JavaEE的URL模式“/”相匹配的一切,而这应该是的情况下“/ *”而已,不是为了“/”(jav

2019-09-17 00:07发布

  <security-constraint>
    <web-resource-collection>
      <web-resource-name>Common pages</web-resource-name>
      <url-pattern>/test1.html</url-pattern>
      <http-method>GET</http-method>
    </web-resource-collection>
    <auth-constraint>
      <role-name>MY_GROUP</role-name>
    </auth-constraint>
  </security-constraint>

正如所料,这种约束,页面/test1.html需要身份验证,并在页面/test2.html不需要认证。

  <security-constraint>
    <web-resource-collection>
      <web-resource-name>Common pages</web-resource-name>
      <url-pattern>/*</url-pattern>
      <http-method>GET</http-method>
    </web-resource-collection>
    <auth-constraint>
      <role-name>MY_GROUP</role-name>
    </auth-constraint>
  </security-constraint>

如预期,与此约束,所有的页面都需要验证,包括/test2.html。

  <security-constraint>
    <web-resource-collection>
      <web-resource-name>Common pages</web-resource-name>
      <url-pattern>/</url-pattern>
      <url-pattern>/test1.html</url-pattern>
      <http-method>GET</http-method>
    </web-resource-collection>
    <auth-constraint>
      <role-name>MY_GROUP</role-name>
    </auth-constraint>
  </security-constraint>

这一限制,我希望在页面/test1.html和/需要验证,但网页/test2.html不应该需要身份验证。

然而,事实证明,/test2.html还需要验证。

问题1是正常吗? 为什么会这样?

问题2.它在哪里写的URL模式“/”等同于“/ *”的样式? Java Servlet规范2.5: http://goo.gl/UxoPL

问题3:我如何才能知道根页“/”需要身份验证,而不是其他的页面?

PS:我使用的jboss-EAP-4.3。

Answer 1:

/是匹配其不受任何更具体的服务器URL模式在同一Web应用程序像匹配的一切特殊的URL模式/app/**.do ,等它,说,“默认的servlet”。 这是在默认情况下由servletcontainer自己的默认servlet处理,通常用于像普通的香草HTML / CSS / JS /图像文件的静态资源对于没有web应用程序自己的servlet中的一个将被调用。 例如Tomcat有DefaultServlet用于这一目的。

/*是匹配的一切 ,包括“默认servlet”的要求过于通用的URL模式。 这个URL模式通常只,而不是servlet的被使用的过滤器。 否则,你就必须重塑servletcontainer自己的默认servlet的工作来处理像普通的香草HTML / CSS / JS /图像文件的静态文件。

至于你的具体功能要求,你需要指定一个可喜的文件/

<welcome-file-list>
    <welcome-file>index.html</welcome-file>
</welcome-file-list>

然后把安全性约束URL模式上/index.html代替。



文章来源: javaee url-pattern “/” matches everything, while this should be the case for “/*” only, not for “/”