context-root上的Web.xml安全性约束并不适用

时间:2016-06-30 12:41:25

标签: java servlets jboss web.xml security-constraint

我有一个使用web.xml配置其安全性的java webapp:

import fileinput
for line in fileinput.FileInput("file",inplace=1):
    if line.rstrip():
        print line

我希望/ admin / *下的所有页面都受到保护,这是有效的。用户首先正确看到登录屏幕,然后重定向到原始请求的页面。

我还希望我的上下文根受到保护:http://host:port/context/但是,当我配置模式<security-constraint> <web-resource-collection> <web-resource-name>webPages</web-resource-name> <description>All web resources</description> <url-pattern></url-pattern> <url-pattern>/admin/*</url-pattern> <http-method>POST</http-method> <http-method>GET</http-method> </web-resource-collection> <auth-constraint> <role-name>admins</role-name> </auth-constraint> <user-data-constraint> <description>SSL not required</description> <transport-guarantee>NONE</transport-guarantee> </user-data-constraint> </security-constraint> 并向root发出请求时,我的java控制器才开始工作并显示视图而不显示用户看到登录屏幕。为什么这种模式适用于<url-pattern></url-pattern>(将请求映射到spring servlet)而不是安全约束?

我在chrome和firefox中都进行过多次重启。

1 个答案:

答案 0 :(得分:0)

您可以尝试使用白名单方法,这意味着只提供公共资源的访问权限。

Here is a better answer示例,但在您的情况下应该是这样的:

<security-constraint>
  <web-resource-collection>
    <web-resource-name>webPages</web-resource-name>
    <description>All web resources</description>
    <url-pattern>/</url-pattern>
    <http-method>POST</http-method>
    <http-method>GET</http-method>
  </web-resource-collection>
  <auth-constraint>
    <role-name>admins</role-name>
  </auth-constraint>
  <user-data-constraint>
    <description>SSL not required</description>
    <transport-guarantee>NONE</transport-guarantee>
  </user-data-constraint>
</security-constraint>
<security-constraint>   
  <web-resource-collection>
    <web-resource-name>Public Resources</web-resource-name>
    <url-pattern>/public/*</url-pattern>
    <url-pattern>/alsopublic</url-pattern>
    <url-pattern>...an so on...</url-pattern>
  </web-resource-collection>  
  <!-- to given public access don't set auth-constraint-->
</security-constraint>

编辑: 参考servlet 3 specification