繁体   English   中英

在JSF2 Web应用程序(JBoss)中以编程方式登录到自定义JAAS LoginModule

[英]Programmatic Login to custom JAAS LoginModule in JSF2 web application (JBoss)

我在服务器端JBoss EAP 6.2.0 SecurityDomain上有一个CustomLogin模块。 此自定义LoginModule需要三个CallbackHandlers:NameCallback(Java标准),PasswordCallback(Java标准)和一个附加的OtpCallback(由我自己实现,用于一次性密码)。

现在,我想通过JSF 2.1 Web应用程序登录到此模块。 我知道使用FORM登录,BASIC登录或通过HttpServletRequest#login登录通常是可能的。 但是所有这些都不允许我指定用户名,密码和otp值。 他们只允许用户名和密码。

因此,我正在寻找一种能够通过HttpServletRequestMethod进行身份验证的方法,同时能够提供三个凭据。

非常感谢您的帮助!

注意:我已经尝试使用

LoginContext lc = new LoginContext("MyOtpSecurityDomain", new CallbackHandler() {

                @Override
                public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
                    for( Callback callback : callbacks ) {
                        if( callback instanceof NameCallback ){
                            NameCallback nc =  (NameCallback) callback;
                            nc.setName(username);
                        } else if ( callback instanceof PasswordCallback ) {
                            PasswordCallback pc = (PasswordCallback) callback;
                            pc.setPassword(password.toCharArray());
                        } else if ( callback instanceof OtpCallback ) {
                            OtpCallback oc = (OtpCallback) callback;
                            oc.setOtp(otp);
                        }
                    }
                }
            });
lc.login();

这甚至调用了我的服务器端自定义登录模块,但是以某种方式,该登录不会传播到webapp和EJB。

似乎这是不可能的,至少我无法将JAAS主题传播或绑定到HttpSession。

最后,我最终将OTP和密码打包到一个String中,并将两个参数username和(password + otp)传递给HttpServletRequest#login(java.lang.String username,java.lang.String password)

不是最优雅的解决方案,但它可以工作。

暂无
暂无

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

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