安全约束的url-pattern无法正常工作

时间:2017-06-01 06:30:30

标签: java java-ee web.xml

我已定义了两个角色 - 用户

    <security-role>
     <role-name>User</role-name>
    </security-role>

和管理员

    <security-role>
      <role-name>Admin</role-name>
    </security-role>

在我的web.xml中。

问题1 -

我希望用户只有拥有这两个角色中的任何一个才能访问该应用程序(将来可能会添加更多角色,所以我没有使用*角色模式)

<security-constraint id ="FullAccess">
    <web-resource-collection>
      <web-resource-name>CPDC Application</web-resource-name>
      <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
      <role-name>Admin</role-name>
      <role-name>User</role-name>
    </auth-constraint>
  </security-constraint>

如果有两个角色,这不起作用。删除其中一个角色会使其按预期工作。如果我希望两个角色可以访问此资源,该怎么办?

问题2 -

现在,我还希望只有具有Admin角色的用户能够从adminresource /

访问所有资源
 <security-constraint id="AdminAccess">
  <web-resource-collection>
    <web-resource-name>Admin resources</web-resource-name>
    <url-pattern>/appname/servlet.svc/adminresource/*</url-pattern>  
  </web-resource-collection>
  <auth-constraint>
     <role-name>Admin</role-name>
  </auth-constraint> 
</security-constraint>

此约束无效,甚至具有用户角色的用户也可以访问https://localhost:8080/appname/servlet.svc/adminresrouce/test

形式的网址

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

这看起来已经包含了应用程序的上下文根/appname

 <url-pattern>/appname/servlet.svc/adminresource/*</url-pattern>

它不属于任何url-pattern,因为它们都与上下文根有关。