<分区>
我有一个 JSF-Hibernate 网络应用程序。我需要根据 Windows AD 对用户进行身份验证,并且 Web 应用程序应该只允许来自 X 组成员的登录,否则它应该重定向到错误页面。我该如何配置?
此外,我想在所有页面上显示登录用户的名称,而不是服务器计算机的 Windows 用户的名称。我为此尝试了 System.property("user.name")
,但这只返回服务器名称的 Windows 用户的名称。
<分区>
我有一个 JSF-Hibernate 网络应用程序。我需要根据 Windows AD 对用户进行身份验证,并且 Web 应用程序应该只允许来自 X 组成员的登录,否则它应该重定向到错误页面。我该如何配置?
此外,我想在所有页面上显示登录用户的名称,而不是服务器计算机的 Windows 用户的名称。我为此尝试了 System.property("user.name")
,但这只返回服务器名称的 Windows 用户的名称。
最佳答案
您需要在 servletcontainer 上创建一个所谓的“LDAP 领域”。如何做到这一点取决于所使用的 servletcontainer。由于您没有提供有关所用 servletcontainer 的任何详细信息,因此很难给出合适的答案,但通常只需阅读 servletcontainer 关于 Realm 配置的文档就足够了。例如 Tomcat,它是 Realm Configuration HOW-TO .对于 Tomcat,您需要 JNDIRealm
.更多详细信息,请参阅 JSP wiki .
然后您需要通过声明适当的 <security-constraint>
来配置您的 Web 应用程序以要求特定页面登录。输入 web.xml
.您可以在 <login-config>
中配置登录和错误页面同样的条目web.xml
.
<security-constraint>
<web-resource-collection>
<web-resource-name>secured</web-resource-name>
<url-pattern>/secured/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>X</role-name> <!-- Should be your AD group name. -->
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/login.xhtml</form-login-page>
<form-error-page>/error.xhtml</form-error-page>
</form-login-config>
</login-config>
登录表单应该 POST 到 j_security_check
并使用 j_username
和 j_password
作为输入字段名称。
<form action="j_security_check" method="post">
<input type="text" name="j_username" />
<input type="password" name="j_password" />
<input type="submit" value="login" />
</form>
如果您想要对验证进行更细粒度的控制,因此想要使用 JSF <h:inputText required="true" />
依此类推,然后您还可以提交给支持 bean 操作方法,该方法又调用 HttpServletRequest#login()
.另见 Performing user authentication in Java EE / JSF using j_security_check
关于获取登录用户的名称,只需使用 ExternalContext#getRemoteUser()
在 JSF 上下文中或 HttpServletRequest#getRemoteUser()
在 servlet 上下文中。您可以在 JSF EL 中访问它,也可以通过以下方式访问它:
<p>Welcome, #{request.remoteUser}</p>
系统属性确实返回服务器自己的用户,这在这种情况下绝对没有意义。
关于java - 如何根据 Windows AD 对用户进行身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11103585/