4

我需要为我的 web 应用程序的三个不同部分定义安全约束。一个/admin/*,一个,/account/*一个棘手的。最后一个应该匹配除前面的 url 模式(/*不包括/admin/*and /account/*)之外的所有内容。如何创建此约束?

  <security-constraint>
    <web-resource-collection>
        <web-resource-name>AdminPanel</web-resource-name>
        <url-pattern>/admin/*</url-pattern>
    </web-resource-collection>      
    <auth-constraint>
        <role-name>admin</role-name>
    </auth-constraint>
    <user-data-constraint>      
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
        </user-data-constraint>
  </security-constraint>

  <security-constraint>
    <web-resource-collection>
        <web-resource-name>AccountPanel</web-resource-name>
        <url-pattern>/account/*</url-pattern>
    </web-resource-collection>      
    <auth-constraint>
        <role-name>account</role-name>
    </auth-constraint>
    <user-data-constraint>      
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
        </user-data-constraint>
  </security-constraint>

  <security-constraint>
    <web-resource-collection>
        <web-resource-name>HTTPSOnly</web-resource-name>
        <url-pattern>`/* excluding /admin/*, /account/*`</url-pattern>
    </web-resource-collection>      
    <auth-constraint>
        <role-name>visitor</role-name>
    </auth-constraint>
    <user-data-constraint>      
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
        </user-data-constraint>
  </security-constraint>
4

1 回答 1

1

您定义了三个不同的角色,即。管理员、帐户和访客。

您的第一个约束表明只有管理员角色可以访问 /admin/* 中的资源

您的第二个约束说只有帐户可以访问 /account/* 中的资源

此时(没有第三个约束)想象一个访问者角色(或任何其他角色)试图访问管理员和帐户目录中的任何内容。由于前两条规则,它将无法访问它。它只能访问 admin 和 account 目录之外的资源。

所以你想要的已经通过前两个约束实现了,在我看来你不需要第三个约束。

于 2013-04-02T12:57:35.740 回答