我的服务器端JBoss EAP 6.2.0 SecurityDomain上有一个CustomLogin模块。这个Custom LoginModule需要三个CallbackHandler:NameCallback(Java标准),PasswordCallback(Java标准)和一个额外的OtpCallback(由我自己实现,一次性密码)。
我现在想通过JSF 2.1 Web应用程序登录此模块。我知道这通常可以通过FORM登录,BASIC登录或通过HttpServletRequest#login登录。 但所有这些都不允许我指定用户名,密码和otp-value。他们只允许用户名和密码。
因此,我正在寻找一种方法来验证HttpServletRequestMethod,同时能够提供三个凭证。
非常感谢您的帮助!
N.B .: 我已经尝试过使用
了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。
答案 0 :(得分:0)
似乎这是不可能的,至少我无法将JAAS主题传播或绑定到HttpSession。
我最终将OTP和密码打包成String并将两个参数username和(password + otp)传递给HttpServletRequest#login(java.lang.String username, java.lang.String password)。
不是最优雅的解决方案,但它确实有效。