Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JSF2 web应用程序(JBoss)中自定义JAAS LoginModule的编程登录_Java_Security_Jsf_Jboss_Jaas - Fatal编程技术网

Java JSF2 web应用程序(JBoss)中自定义JAAS LoginModule的编程登录

Java JSF2 web应用程序(JBoss)中自定义JAAS LoginModule的编程登录,java,security,jsf,jboss,jaas,Java,Security,Jsf,Jboss,Jaas,我的服务器端JBoss EAP 6.2.0 SecurityDomain上有一个CustomLogin模块。此自定义LoginModule需要三个回调处理程序:NameCallback Java标准、PasswordCallback Java标准和一个由我自己实现的额外OtpCallback,用于一次性密码 现在我想通过JSF2.1Web应用程序登录到这个模块。我知道这通常可以通过表单登录、基本登录或通过登录实现。但是他们都不允许我指定用户名、密码和otp值。它们只允许输入用户名和密码 因此,我

我的服务器端JBoss EAP 6.2.0 SecurityDomain上有一个CustomLogin模块。此自定义LoginModule需要三个回调处理程序:NameCallback Java标准、PasswordCallback Java标准和一个由我自己实现的额外OtpCallback,用于一次性密码

现在我想通过JSF2.1Web应用程序登录到这个模块。我知道这通常可以通过表单登录、基本登录或通过登录实现。但是他们都不允许我指定用户名、密码和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和密码打包成一个字符串,并将两个参数username和password+OTP传递给

这不是最优雅的解决方案,但它很有效