0

假设我有 3 个角色 admin 和 guest
,我有 40 页

--views
------page1.xhtml1
------page1.xhtml2
------page1.xhtml3
------page1.xhtml4
------ ......

管理员可以访问所有页面
访客无法仅访问页面 1,2 和 3

我如何排除角色访客访问页面 1,2 和 3

<security-constraint>
   <display-name>excluded</display-name>
   <web-resource-collection>
      <web-resource-name>No Access</web-resource-name>
      <url-pattern>/views/page1.xhtml</url-pattern>
      <url-pattern>/views/page2.xhtml</url-pattern>
      <url-pattern>/views/page3.xhtml</url-pattern>
   </web-resource-collection>
   <auth-constraint />
   <user-data-constraint>
      <transport-guarantee>NONE</transport-guarantee>
   </user-data-constraint>
</security-constraint>

此代码示例将停止所有角色对第 1,2 和 3 页的访问,但我想要的是仅停止对角色访客的这些页​​面的访问

4

2 回答 2

0

首先,您需要在您的 servlet 容器中配置一个安全领域,这将允许容器对数据库、LDAP 服务器、纯文本文件等执行身份验证。查看您的 servlet 容器的文档,因为这是非常具体的给每一个人。

然后,您必须将配置登录到您的web.xml,作为起点,您会对BASIC登录类型感到满意(以验证容器是否正确验证了用户),但稍后您将希望拥有自己的登录表单。基本登录配置是这样的:

<login-config>
  <auth-method>BASIC</auth-method>
  <realm-name>default</realm-name>
</login-config>

请注意,您必须在那里设置实际安全领域的名称,即在 servlet 容器中配置的名称。

然后是当您使用<security-constraint />标签(当前代码段中的内容)配置访问权限时。如果您想只允许某些用户访问您的应用程序的某些部分,那么您需要将角色名称添加到您的<auth-constraint />标签中。类似于以下内容:

<auth-constraint>
  <role-name>ADMIN</role-name>
  <role-name>MODERATOR</role-name>
</auth-constraint>

您还需要配置安全角色:

<security-role>ADMIN</security-role>
<security-role>MODERATOR</security-role>

一些容器甚至会要求您将一些特定于 servlet 的配置文件添加到您的/WEB-INF文件夹中,在该文件夹中您将安全领域中的实际用户组映射到应用程序中的角色名称(它们可以是相同的名称,但它们没有太多)。同样,这是特定于 servlet 容器的,因此您需要检查 servlet 容器的配置。

我正在添加一些链接以供进一步阅读:

于 2013-08-27T11:34:34.347 回答
0

您忘记在 中设置角色<auth-constraint>。这样,没有人能够访问这些资源。您需要在那里设置允许访问这些资源的角色。如果您的管理员角色完全像这样调用admin,那么应该这样做:

<auth-constraint>
    <role-name>admin</role-name>
</auth-constraint>

不要忘记注册角色,就<security-role>好像还没有完成一样:

<security-role>
    <role-name>admin</role-name>
</security-role>

也可以看看:

于 2013-08-27T11:31:41.217 回答