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

标签 java security jsf jboss jaas

我的服务器端 JBoss EAP 6.2.0 SecurityDomain 上有一个 CustomLogin 模块。这个自定义LoginModule需要三个CallbackHandler: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();

这甚至会调用我的服务器端自定义登录模块,但不知何故,登录不会传播到 Web 应用程序和 EJB。

最佳答案

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

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

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

关于java - 以编程方式登录到 JSF2 Web 应用程序中的自定义 JAAS LoginModule (JBoss),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21773997/

相关文章:

java - 为什么将对象添加到静态集合会导致 NullPointerException?

c# - Web 服务 web.config 混合身份验证模式

java - Spring 安全3 : Problem autowiring UserDetailsManager/JdbcUserDetailsManager

java - 将库添加到 JRE

java - 向 Controller 发送参数

java - spring boot应用kafka pipeline报错 "Connection to node -1 could not be established. Broker may not be available."

java - 索引越界错误

jsf - 获取具有其他名称的 session 作用域 bean 的新实例

java - 具有批量和刷新功能的生产者/消费者

JSF 组件方面