Java 如何在glassfish中覆盖j_安全检查?
我目前正在使用glassfish v2.1中基于Java 如何在glassfish中覆盖j_安全检查?,java,authentication,glassfish,jsr196,Java,Authentication,Glassfish,Jsr196,我目前正在使用glassfish v2.1中基于表单的身份验证来登录用户,效果很好。我想切换到programmaticologin,我想能够获得最初请求的URL(即,在重定向到登录页面之前),并在我的编程登录代码中使用它,以便用户在身份验证后重定向回请求的页面 我已经看到了j_security\u check——在我的例子中,这是FormAuthenticator(catalina codebase)它将初始请求保存在会话中的SavedRequest对象中,但该会话是StandardSessio
表单的身份验证来登录用户,效果很好。我想切换到programmaticologin
,我想能够获得最初请求的URL(即,在重定向到登录页面之前),并在我的编程登录代码中使用它,以便用户在身份验证后重定向回请求的页面
我已经看到了j_security\u check
——在我的例子中,这是FormAuthenticator
(catalina codebase)它将初始请求保存在会话中的SavedRequest
对象中,但该会话是StandardSession
而不是HttpSession
,因此无法直接访问它
或者我应该将身份验证机制从表单
更改为其他形式吗
谢谢 如果表单身份验证不适用于您,我建议切换到使用ServletFilter进行身份验证。您只需删除基于表单的身份验证,并为需要保护的页面添加一个映射到筛选器。好的,我找到了答案。这就是:
基本上,我试图实现的是在glassfish中实现基于openid的身份验证机制。一种方法是使用programmaticologin
,但这有一些缺点-没有简单的方法重定向回请求的URL,编程身份验证意味着程序员要做更多的工作。因此,在阅读之后,我找到了更好的方法来实现我的目标——服务器身份验证模块或SAMs。这是中描述的标准过程的一部分,并提供了一种为glassfish创建可插拔身份验证模块的方法(即不同于标准表单
,基本
等)。此方法允许您在servlet容器中插入新的身份验证模块,同时保留声明性安全模型
因此,我所需要做的就是编写自己的自定义SAM。下面是一个快速操作:
实现ServerAuthModule接口,该接口主要归结为以下方法:
AuthStatus validateRequest(MessageInfo,security.auth.Subject
clientSubject,security.auth.Subject servicepubject)抛出AuthException
将SAM打包到一个jar中,并将jar放在glassfish lib目录中
配置SAM以与应用程序一起使用。此操作分为两个步骤:
- 在domain.xml中将SAM定义为消息安全提供程序
- 绑定SAM以与应用程序一起使用。您可以通过在应用程序的sun-web-app.xml中定义httpservlet安全提供程序属性来实现这一点。将属性值设置为步骤1中分配给SAM的名称
欲了解更多信息,请阅读
更新:这个问题有一个更简单、更优雅的解决方案,叫做。这是一个由Aike Sommer编写的Java库,允许您编写自己的可插入身份验证程序 谢谢!我已经研究了SecurityFilter,但后来我发现了一种更好的方法,通过坚持glassfish的简洁声明式安全模型来实现我的目标。