限制直接通过地址栏键入链接地址访问xml配置文件
前言在实际的web项目中,有些配置项会放在xml文件里面,对于xml文件,我们其实并不希望访问者进行访问,毕竟xml文件里面可能配置了一些较为敏感的信息,比如内网IP、用户名及密码等。 方法1、 判断请求方式(POST、GET) 在web项目内读取xml文件一般进行的是POST请求,而通过地址栏键入地址访问则为GET请求,依次来区分。 public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws IOException,ServletException { HttpServletRequest httpreq = (HttpServletRequest) request; String method = httpreq.getMethod(); if("GET".equals(method)) { httpres.sendRedirect(httpreq.getContextPath() + "/error.html"); return; } chain.doFilter(request,response); } 当然,在web.xml里面也要相应的配置filter: <filter> <filter-name>authVisitPage</filter-name> <filter-class>web.AuthVisitFilter</filter-class> </filter> <filter-mapping> <filter-name>authVisitPage</filter-name> <url-pattern>*.xml</url-pattern> </filter-mapping> 2、 利用document.referrer属性 referrer是与对网页的请求有关的document对象中的属性。referrer属性中保存着链接到当前页面的那个页面的URL,在没有来源页面的情况下,referrer属性中可能会包含空字符串。 public void doFilter(ServletRequest request,ServletException { HttpServletRequest httpreq = (HttpServletRequest) request; String referer = httpreq.getHeader("Referer"); if(referer == null) { httpres.sendRedirect(httpreq.getContextPath() + "/error.html"); return; } chain.doFilter(request,response); } 这里只是判断referer是否为空,但忽略了一种情况: <a href="http://域名/configs/*.xml">跳转</a> 如果还是用之前的过滤器,只是判断referer是否为空的话,是不能够过滤掉这种跳转过来的访问请求。对此,过滤器需要增加判断:禁止非内部访问 public void doFilter(ServletRequest request,ServletException { HttpServletRequest httpreq = (HttpServletRequest) request; String referer = httpreq.getHeader("Referer"); String host = httpreq.getHeader("Host"); if(referer == null || referer.indexOf(host) < 0) { httpres.sendRedirect(httpreq.getContextPath() + "/error.html"); return; } chain.doFilter(request,response); } 总结
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |