注册 登录
编程论坛 J2EE论坛

防盗链图片的filter的问题。

zhuhe 发布于 2012-01-29 23:22, 1132 次点击
防盗链图片的filter
public class ImageRedirectFilter implements Filter {

public void init(FilterConfig config) throws ServletException {
}

public void doFilter(ServletRequest req, ServletResponse res,
   FilterChain chain) throws IOException, ServletException {

HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;

// 禁止缓存
response.setHeader("Cache-Control", "no-store");
response.setHeader("Pragrma", "no-cache");
response.setDateHeader("Expires", 0);

// 链接来源地址
String referer = request.getHeader("referer");
System.out.println("refer is"+referer);

if (referer == null || !referer.contains(request.getServerName())) {

   /**
    * 如果 链接地址来自其他网站,则返回错误图片
    */
   request.getRequestDispatcher("/error.gif").forward(request,response);

} else {

   /**
    * 图片正常显示
    */
   chain.doFilter(request, response);
}

}

public void destroy() {
}
}
/////////////////////////////////////////////////////
web.xml:

<filter-mapping>
<filter-name>imageRedirectFilter</filter-name>
    <url-pattern>/upload/images/*</url-pattern>
</filter-mapping>

问题:红色的那句并不能请求转移而显示error.gif的图片。
必须将红色的那句写成:request.getRequestDispatcher("error.jsp").forward(request,response);
在error.jsp中再显示error.gif图片才可以,为什么?
error.jsp内容如下:
<html>
  <head>
    <base href="<%=basePath%>">
   
    <title>My JSP 'error.jsp' starting page</title>
   </head>
 
  <body>
  <%=path %><br>
  <%=basePath %><br>
    <img src="error.gif">
    </body>
</html>
3 回复
#2
空空儿2012-02-02 10:58
可能还是图片要通过页面来显示吧,直接显示图片或许就变成了下载图片。
#3
王智钟2012-02-09 10:49
你好,你的写的代码就是一个过滤类,但是你的图片要显示在界面上,必须把图片定义在JSP,你猜可以调用到图片,很简单。你要注意学习JSP的基础知识与概念!希望你能够尽快的掌握吧。
#4
zhuhe2012-02-12 22:28
回复 3楼 王智钟
大哥,请您说明白点,什么是“把图片定义在JSP”?
这句话 request.getRequestDispatcher("/error.gif").forward(request,response);是书中的例子,不成功,我才改为request.getRequestDispatcher("error.jsp").forward(request,response);
然后再在error.jsp中再显示error.gif图片,这样才可以。

请您明示 request.getRequestDispatcher("/error.gif").forward(request,response);这语句有无问题?能否请求转发到图片?(请求转发到JSP页面肯定没有问题)谢谢!
1