request.getHeader("referer")防盗链
2016-05-07 09:26
316 查看
一、什么是Referer
HTTP headers是HTTP请求和相应的核心模块,它承载了关于客户端浏览器、请求页面、服务器等相关信息。Referer是HTTP头中的一个属性,告诉服务器我是从哪个页面链接过来的。
request.getHeader(“referer”)可用的情况:
1.
2.表单提交。
request.getHeader(“referer”)不可用的情况:
1.从收藏夹链接。
2.自定义地址。
3.浏览器直接输入。
二、request.getHeader(“referer”)使用步骤
第一步: web.xml中配置过滤器
第二步:过滤器实现doFilter方法
点击下载源码
HTTP headers是HTTP请求和相应的核心模块,它承载了关于客户端浏览器、请求页面、服务器等相关信息。Referer是HTTP头中的一个属性,告诉服务器我是从哪个页面链接过来的。
request.getHeader(“referer”)可用的情况:
1.
<a href="">。
2.表单提交。
request.getHeader(“referer”)不可用的情况:
1.从收藏夹链接。
2.自定义地址。
3.浏览器直接输入。
二、request.getHeader(“referer”)使用步骤
第一步: web.xml中配置过滤器
<!-- 请求url防盗链 --> <filter> <filter-name>safeChainFilter</filter-name> <filter-class>com.bh.filter.SafeChainFilter</filter-class> </filter> <filter-mapping> <filter-name>safeChainFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
第二步:过滤器实现doFilter方法
@Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) res; String requestAddress = request.getRequestURL().toString(); //得到用户是从什么页面连过来的 String requestHeader = request.getHeader("referer"); System.out.println("requestAddress: "+requestAddress); System.out.println("requestHeader: "+requestHeader); //对样式文件不做过滤 if (requestAddress.indexOf("/css/")<0 && requestAddress.indexOf("/js/")<0 && requestAddress.indexOf("/images/")<0) { if (!requestAddress .equals("http://localhost:8080/FangDaoLian_Test/index.jsp")) { if (!requestAddress.equals("http://localhost:8080/FangDaoLian_Test/Login.jsp")) { if (requestHeader!=null) { if (!requestHeader.startsWith("http://localhost:8080") || !requestHeader .startsWith("http://localhost:8080")) { response.sendRedirect("error.gif"); return; } } else {//直接在浏览器里输入有referer的页面,返回是null response.sendRedirect(request.getContextPath() + "/Login.jsp"); return; } } } } chain.doFilter(req, res); }
点击下载源码
相关文章推荐
- 重用UITableViewHeaderFooterView
- UITableView的子控件高度不确定处理
- iOS UIKit:Navigation Controllers
- 基于MVC4+EasyUI的Web开发框架经验总结
- 如何实现UITableView优化
- Codeforces 670E Correct Bracket Sequence Editor (list模拟)
- GUID是什么?
- 【SSH网上商城项目实战03】使用EasyUI搭建后台页面框架
- 支持placeholder和自适配高度的TextView控件
- MySQL开启慢查询日志log-slow-queries的方法
- mysql 5.5 开启慢日志slow log的方法(log_slow_queries)
- Tricky Priority Queue
- pt-query-digest查询日志分析工具
- storyboard 让TableViewCell的分割线顶到最左边
- STL学习——Priority_queue篇
- LINQ语句中的.AsEnumerable() 和 .AsQueryable()的区别
- STL学习——Stack/Queue篇
- OCiOS动效设计:UITableView 实现滚动视差效果
- 执行build -ceZ 编译驱动前的小动作1-setenv.bat
- STL学习——Deque篇