码头 8 web.xml:允许低权限用户仅访问一个页面,所有其他用户都需要通过安全约束访问管理员用户

jetty 8 web.xml: Allow low-privilege user to access just one page, admin user required for all others via security-constraints

我想保护我的网络应用程序,以便只有 "admin" 用户可以访问所有页面,但特殊的 "test" 用户可以访问状态页面。

这是我试过的方法:

在web.xml中:

  <security-constraint>
    <web-resource-collection>
      <web-resource-name>Everything else</web-resource-name>
      <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
      <role-name>admin</role-name>
    </auth-constraint>
  </security-constraint>

  <security-constraint>
    <web-resource-collection>
      <web-resource-name>Status page</web-resource-name>
      <url-pattern>/status/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
      <role-name>test</role-name>
      <role-name>admin</role-name>
    </auth-constraint>
  </security-constraint>

  <login-config>
    <auth-method>BASIC</auth-method>     <!-- Use http basic authentication -->
    <realm-name>MyApp Realm</realm-name>  <!-- users are defined in this realm -->
  </login-config>

不幸的是,当我尝试使用测试用户访问状态页面 (https://localhost:444/app-0.0.1-SNAPSHOT/hbr/status) 时,我得到以下信息:

Problem accessing /app-0.0.1-SNAPSHOT/hbr/status. Reason: 
     !role

知道如何解决这个问题吗?

原来 "status" 页面不在应用程序的根目录中,而是名为 "hbr" 的子服务的一部分("hbr" 是唯一的子服务,这就是为什么我没注意)。对第二个安全约束的以下更改导致应用程序按预期工作:

  <security-constraint>
    <web-resource-collection>
      <web-resource-name>Status page</web-resource-name>
      <url-pattern>hbr/status/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
      <role-name>test</role-name>
      <role-name>admin</role-name>
    </auth-constraint>
  </security-constraint>