[英]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.