我在我的 web 应用程序中使用基于声明式 J2EE 表单的身份验证,遵循各个地方给出的说明,例如此处:http://java.dzone.com/articles/understanding-web-security
似乎通过 j_security_check 登录允许领域内的所有用户进行身份验证(登录),但不检查他们的角色。 授权检查似乎只在用户访问具有安全约束的页面时执行。
所以在我的应用程序中,用户能够成功登录,因为他们在领域中,但是当他们访问安全页面时,他们会收到难看的“错误 403:授权失败”消息。
有没有办法将身份验证限制为具有特定角色的用户?或者我是否需要确保用户领域仅包含具有所需角色的用户。
就代码而言,我的 web.xml 中有以下声明:
<login-config>
<auth-method>FORM</auth-method>
<realm-name>Simple</realm-name>
<form-login-config>
<form-login-page>/login.jsp</form-login-page>
<form-error-page>/loginerror.jsp</form-error-page>
</form-login-config>
</login-config>
但是它没有说明任何关于所需角色的信息,因此任何导航到 login.jsp 的用户如果在这个范围内就可以成功登录。
然后,当用户访问与这里的 url-pattern 匹配的任何页面时:
<security-constraint>
<display-name>Authorised</display-name>
<web-resource-collection>
<web-resource-name>Authenticated and Authorised Resources</web-resource-name>
<url-pattern>/secure/*</url-pattern>
<http-method>PUT</http-method>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>simpleWebAppUser</role-name>
</auth-constraint>
<user-data-constraint>
<transport-guarantee>INTEGRAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
那是检查角色的时候。
角色“simpleWebAppUser”是应用程序范围的,我想在让登录成功之前检查用户是否具有此角色。
我在 Windows XP/2000/2003 上使用 WebSphere 7.0,配置为使用 O/S 用户存储库。
最佳答案
Is there a way to limit authentication to users having a particular role?
没有。身份验证是建立身份的过程,而不是执行访问控制检查的过程。这就是 JAAS(以及因此的 Java Servlet 规范)处理这个主题的方式;大多数其他系统也将以类似的方式实现身份验证。
如果您可以修改应用程序以仅在用户处于特定角色时显示“安全页面”(Servlet API 通过 HttpServletRequest 的 isUserInRole 方法允许这样做),那么您将节省一些胃灼热(同时执行下面列出的建议)。
Or am I required to ensure that the user realm only contains users with the required role.
如果可能的话,你可以这样做。但是,您也可以通过编写自己的 JAAS LoginModule 来解决这个问题,该模块仅在用户也映射到所需角色(您的应用程序代码可以识别)时才成功验证用户。您还必须配置应用程序服务器和 Web 应用程序才能使用此登录模块。
关于java - 限制谁可以使用基于 j2ee 表单的身份验证按角色登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6171729/