我在我的 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 用户存储库。