我有一个使用JBoss 5.2部署的Web应用程序。为了使用户能够使用该应用程序,他/她必须使用用户名和密码对LDAP服务器(使用简单身份验证)进行身份验证。这一切都是通过为JBoss设置login-config.xml
并为我们的实现提供<login-module>
来完成的。
问题出现在这里:登录后,我有一个场景要求用户提供用户名&amp;执行特定操作时的密码(我也将使用LDAP服务器进行身份验证)。我希望能够重用与用于向Web应用程序验证用户身份相同的机制。
我的表单登录到j_security_check
的应用程序帖子,所以按照这个,我试图向j_security_check
发送请求,但是JBOSS返回404.从阅读中我看了一下,任何任意请求都无法访问已收集的j_security_check
,并且必须响应对受保护资源的质询请求。
那么,我如何验证用户使用同一LDAP服务器提供的第二组凭据?
修改
为了澄清,问题是如何将用户的凭证输入发送到LDAP服务器进行身份验证。抓住用户的输入等等都完成了。剩下的就是获取此输入并将其发送到LDAP服务器并获取响应(这是我被困的地方)。
如果有帮助提及,登录Web应用程序使用扩展UsernamePasswordLoginModule的自定义类。
答案 0 :(得分:1)
因此,经过大量研究,我最终找到了JBoss环境的解决方案(我正在使用它)。
捕获用户凭据后,您可以通过POST / GET将它们发送到服务器,并且您的服务器可以执行以下操作以使用您配置的任何身份验证策略(在login-config.xml
中)来验证凭据:< / p>
WebAuthentication webAuthentication = new WebAuthentication();
boolean success = webAuthentication.login(username, password);
为了扩展这一点,我还能够通过HttpServletRequest
(传递到我的服务器端处理程序)检查用户的角色/组:
boolean userIsInRole = servletRequest.isUserInRole("nameOfGroup")
答案 1 :(得分:0)
答案 2 :(得分:0)
想要为JBoss 6.2+添加另一个答案,其中WebAuthentication
不再存在。
我已经使用LoginContext
的创建来实现相同的结果:
String SECURITY_DOMAIN_NAME = "ssd"; // the security domain's name from standalone.xml
String username = "user";
String password = "password";
LoginContext lc = null;
try {
lc = new LoginContext(SECURITY_DOMAIN_NAME, new UsernamePasswordHandler(username, password.toCharArray()));
lc.login();
// successful login
} catch (LoginException loginException) {
// failed login
}
使用uf lc.getSubject().getPrincipals()
来验证角色。