繁体   English   中英

在JBoss / JAAS中使用HTTP Request.login

Using HTTP Request.login with JBoss/JAAS

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我已经成功设置了JBoss安全域,并且可以使用BASIC身份验证(在web.xml中定义)进行身份验证。 这一切都很好。 但是,我无法弄清楚如何使用http request.login方法。

以下安全域(来自jboss-web.xml)适用于BASIC身份验证:

<jboss-web>  
    <context-root>/myapp</context-root>  
    <security-domain>java:/jaas/myapp-realm</security-domain>  
</jboss-web> 

但是当我使用request.login时,如下所示:

public void login() {
    FacesContext context = FacesContext.getCurrentInstance();
    HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();
    try {
        request.login(username, password);
    }
    catch (ServletException ex) {
        java.util.logging.Logger.getLogger(UserLogin.class.getName()).log(Level.SEVERE, null, ex);
    }
}

我得到以下异常:

javax.servlet.ServletException: Failed to authenticate a principal

我知道用户名/密码很好(使用BASIC身份验证可以正常工作)。 我已经登录了TRACE级别,并且看起来甚至都没有尝试进行身份验证。 我错过了什么?

如果您需要有关我的设置/配置的更多详细信息,请参见http://java-web-development.blogspot.com/2011/07/jee-6-security-part-two-implementation.html 我正在使用JBoss 6。

1 个回复

现在正在工作。 我确保基于FORM的身份验证有效,一旦成功,我便回到了使用request.login的方式。 我通过JRebel使用热部署,因此很可能已经通过BASIC auth进行了身份验证,并且它在用户会话中留下了用户主体,这随后导致request.login失败(如果您已通过身份验证,request.login会引发异常)。 我发誓我已经完成了JBoss的硬重启,但这是我唯一能想到的逻辑。

我现在在登录名周围有一个健全性检查,如下所示:

public void login() {
    FacesContext context = FacesContext.getCurrentInstance();
    HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();
    try {
        Principal userPrincipal = request.getUserPrincipal();
        if (request.getUserPrincipal() != null) {
            request.logout();
        }
        request.login(username, password);
        userPrincipal = request.getUserPrincipal();
        authUser = userDao.findByLogin(userPrincipal.getName());
    }
    catch (ServletException ex) {
        java.util.logging.Logger.getLogger(UserLogin.class.getName()).log(Level.SEVERE, null, ex);
    }
1 Glassfish JDBCRealm和request.login()

我在使用领域和request.login()登录用户时遇到了一些问题,我发现了一些类似的问题,但是都没有解决我的问题的方法。 Login.xhtml loginBean.java } web.xml glassfish-web.xml 领域设置: ...

3 “记住我”和Servlet 3.0 request.login()

我正在Java EE容器(jdbc-realm)中使用Servlet 3.0提供的HttpServletRequest.login()方法,并且一切正常。 根据此[Java EE 6:如何在用户登录Web应用程序时实施“保持登录状态”,我实现了“记住我”方法。 但是我在过滤器类中坚持 ...

4 JBoss JAAS自定义登录模块

我正在尝试将自定义JAAS身份验证模块用于JBoss 5.1.0.GA上托管的基于Web的应用程序。 所以一切似乎都运转良好,直到用户数量增加和会话(所以它认为)开始变得混杂。 我使用自定义JAAS的原因是因为自定义身份验证后端以及需要传回密码以便在应用程序中进一步使用。 当我在s ...

6 通过JAAS手动登录用户到JBoss WIldfly

我正在尝试执行手动登录。 我的意图是通过JAX-RS调用登录某人,但在标准会话中。 这样,后续的javascript调用和java调用都将看到相同的Subject,Principal等。这都是在Picketlink的SSO上下文中发生的,我需要向用户显示他当前的登录状态,并允许他登录背景。 ...

7 JBoss JAAS自定义登录模块错误消息

我有一个应用程序,它使用了JBoss的自定义登录模块 。 身份验证可能由于各种原因而失败,我必须向用户显示这些,而不是通常的Inavlid username / password错误。 有没有办法从登录消息中获取错误消息? 我认为最好的方法是通过异常,因为authenticate返回一 ...

8 可以在EAR中(在JBoss 5上)部署JAAS登录模块吗?

这个主题几乎概括了这个问题。 通常,JAAS登录模块部署在EAR应用程序之外( 使用认证服务,但不部署它)。 可以在EAR中部署它吗? 有优点(代码重用,与应用程序更好的集成)。 我只对用于该应用程序的模块感兴趣(实际上,该应用程序将仍然是服务器中唯一运行的应用程序)。 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM