java - 限制谁可以使用基于 j2ee 表单的身份验证按角色登录

标签 java jakarta-ee security websphere-7

我在我的 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/

相关文章:

java - JSP 中出现错误 "Buffer reader can not be resolver to a type"

java - 使用 ConcurrentMap 双重检查锁定

ruby-on-rails - Stripe 托管帐户 - 错误的国家/地区

javascript - 使用JS执行MySQL查询及其涉及的安全问题

c++ - 需要对特定安全优化的解释

java - LocationListener、LocationRequest、LocationServices 在实现 Google Maps API 以在 Android Studio 中查找附近地点时导入无效

java - PropertySourcesPlaceholderConfigurer 和 PropertyPlaceholderConfigurer

jsp - 如何为不同类型的对象显示不同的 JSP View

java - 为什么 javax.ejb.AsyncResult.isDone 总是抛出异常?

java - ActionContext.getContext().getSession() 返回 null