12.1.2 实施安全约束
WEB-INF目录下的资源客户端不能直接通过URL访问,不过,我们可以通过Servlet或JSP页面访问WEB-INF目录下的资源。
但是,如果你只是简单地想保护资源:拒绝未经授权的用户访问,允许经过授权的用户访问,这可以在部署描述符中声明安全约束来实现。
security-constraint元素说明
部署描述符中的security-constraint元素允许不通过编程就可以限制对某个资源的访问。这个元素有两个子元素:web-resource-collection和auth-constraint。
web-resource-collection子元素
web-resource-collection元素表示需要限制访问的资源集合。包括web-resource-name、description、url-pattern、http-method和http-method-ommission等子元素。
web-resource-name子元素用于设置与受保护资源相关联的名称。url-pattern子元素设置受保护资源的URL的正则表达式,例如:*.jsp表示保护所有的jsp文件/*表示保护所有的资源/jsp/*表示保护jsp目录下的所有资源- 不能同时指定
目录和星号.后缀名,下面的URL表达式指定jsp目录下的所有JSP页面是无效的:/JSP/*.jsp。 url-pattern仅适用于客户端可以直接访问到的资源。特别是,它不适合于通过MVC体系结构利用RequestDispatcher来访问的页面,不适合于利用类似jsp:forward的手段来访问的页面。
http-method元素中写入一个HTTP方法,比如GET和POST,表示该HTTP方法可以访问到这些资源集合.- 如果没有
http-method元素,这表示将禁止所有HTTP方法访问这些资源。
- 如果没有
http-method-omission元素中写入一个HTTP方法,表示使用该方法无法访问到这些资源集合。http-method元素和http-method-omission元素不能出现在相同的web-resource-collection元素里
auth-constraint子元素
auth-constraint元素指定那些用户角色可以访问该受保护的资源集合,通常,此元素应该包含一个或多个role-name元素,
- 如果
security-constraint元素下没有auth-constraint子元素,这表明任何身份的用户都可以访问相应的资源。 - 如果
security-constraint元素下有auth-constraint子元素,但是其内容为空,这表示所有身份的用户都被禁止访问相应的资源。
实例:禁止访问特定目录下的资源
下面的web.xml文件的security-constraint元素限制了所有JSP页面的访问。由于auth-constraint不包含role-name元素,是一个空元素,则没有任何用户可以访问JSP页面。
web.xml
1 |
|
1.jsp
该文件位于jsp页面下,在项目中的路径为:/app12a/WebContent/jsp/1.jsp
1 | <!DOCTYPE HTML> |
运行效果
现在我们在浏览器里输入这个URL来测试下:
http://localhost:8080/app12a/jsp/1.jsp
该JSP页面是无法为访问到的,Servlet容器将发送一个HTTP 403错误给浏览器:表示拒绝访问请求的资源。
浏览器显示效果如下图所示:
测试auth-constraint元素
注释掉部署描述符web.xml中的auth-constraint元素,然后重启服务器(修改了web.xml需要重启服务器),再次访问1.jsp页面,现在是可以访问到该页面的,显示效果如下图所示:
参考资料
https://www.cnblogs.com/hongzai/articles/3296737.html
https://blog.csdn.net/u012045045/article/details/86612561
原文链接: 12.1.2 实施安全约束