javaweb 之 防盗链
防盗链:如果其他网站引用本网站的图片资源,显示一个错误图片。(即本站资源只能自己使用)
作用:其他网站如果引用本站资源,会加重服务器负荷和带宽。如果是用防盗链 则能减少服务器负荷。
引用来自: http://windyli.blog.51cto.com/1300305/315283
apache的tomcat使用filter能够轻松实现防盗链
如下:
1.定义一个防盗链filter
a 实现Filter接口
b.在web.xml中配置该filter 多个Filter通过 Filter-mapping 的前后顺序 来确定前后顺序
package com.it.cast.filter.image; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ImageFilter implements Filter{ @Override //生命周期方法只会执行一次。在该Filter被销毁前执行 public void destroy() { } @Override /**每次有客户端都会调用该方法*/ public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest)req; HttpServletResponse response = (HttpServletResponse)res; String referer = request.getHeader("referer"); //外站链接 if (referer == null || !referer.contains(request.getServerName())) { //显示错误图片 request.getRequestDispatcher("/error.gif").forward(request, response); //本站链接 正常显示 }else { System.out.println("request被处理之前。。"); //chain.doFilter(request, response)方法一定要写上。否则不会执行servlet代码。 /**注意:doFilter()中一定要执行chain.doFilter(request,response) * 否则request不会交给后面的filter或servlet*/ chain.doFilter(request, response); System.out.println("request被处理之后,response抵达客户端浏览器之前"); } } @Override //生命周期方法只会执行一次,在Filter加载时执行 public void init(FilterConfig filterConfig) throws ServletException { } }
web.xml中配置
<filter>
<filter-name>imageFilter</filter-name>
<filter-class>com.it.cast.filter.image.ImageFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>imageFilter</filter-name>
<url-pattern>/images/*</url-pattern>
<url-pattern>upload/images/*</url-pattern>
<!-- dispatcher配置到达servlet的方式 有四种
REQUEST (默认) :仅当请求servlet时才有效
FORWORD:某servlet通过forword到达某servlet时才有效
INCLUDE:jsp中通过<jsp:include/>请求某servlet时才有效
ERROR :jsp中通过<%@ page errorPage = "error.jsp" %>指定错误页面时才有效
-->
<dispatcher></dispatcher><!-- 默认的,可以不写该标签 -->
</filter-mapping>

浙公网安备 33010602011771号