网站用的tomcat服务器,结果里面的音乐总是被盗链,非常郁闷。查找了n多资料,使用了n款软件都没有用,因为我们的应用比较特殊,总会把不该防的也防了。一怒之下就研究了一下防盗链原理,亲自写了一款防盗链的过滤器,代码非常简单如下:
/**
* @author
* @company
* @time Dec 18, 2006 2:08:18 PM
* @version 1.0.0.0
* @package com
*/
package com;
import java.io.IOException;
import java.io.PrintWriter;
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;
/**
* Description : 这个过滤器用来保护内容文件不被恶意盗链
* @author : okwang
* @version : 1.0.0 2007-06-08
*
*/
public class DownFilter implements Filter {
/*
* (non-Javadoc)
*
* @see javax.servlet.Filter#destroy()
*/
public void destroy() {
// TODO Auto-generated method stub
}
/*
* (non-Javadoc)
*
* @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest,
* javax.servlet.ServletResponse, javax.servlet.FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest req = (HttpServletRequest)request;
String info=req.getHeader("User-Agent");
if (info != null && !info.equals("contype")) {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<html><head></head><body>");
out.println("<h1>对不起,,您没有访问的权限!");
out.println("</h1></body></html>");
out.flush();
return;
}else
{
chain.doFilter(request, response);
}
}
/*
*
* @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
*/
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
另外还要在工程项目的web.xml里加上如下语句:
<filter>
<filter-name>DownFilter</filter-name>
<filter-class>com.DownFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>DownFilter</filter-name>
<url-pattern>/upload/up/*</url-pattern>
</filter-mapping>
红字为所保护的内容文件夹