12.1.2 实施安全约束
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