1. 程式人生 > >防止其他URL地址直接訪問本站資源【防盜鏈過濾器】

防止其他URL地址直接訪問本站資源【防盜鏈過濾器】

在開發WEB應用時,我們要考慮到我們的網站某些資源(如圖片,頁面)不應該讓使用者直接通過其他站點URL訪問,想只允許使用者從本站點跳轉到某些資源。這時候,我們的防盜鏈過濾器就有用了。

作用:使得訪問某個特定的URL(在下面web.xml中可以配置)時,需要先經過過濾器,過濾器可對這些訪問的頭資訊進行分析,從而做出相應的反應,或是阻攔,或是跳轉,或是允許訪問,業務邏輯可以自己定。

過濾器程式碼:

package com.yykj.servlet;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;

public class MyFilter implements Filter{

    private FilterConfig filterConfig = null;

    public void init(FilterConfig filterConfig) throws ServletException {
        this.filterConfig = filterConfig;
    }

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

        HttpServletRequest request = (HttpServletRequest) req;	//request物件
        HttpServletResponse response = (HttpServletResponse) res;//response物件

        response.setHeader("Cache-Control", "no-store");
        response.setHeader("Pragrma", "no-cache");
        response.setDateHeader("Expires", 0);//禁止瀏覽器快取
        String referer = request.getHeader("referer");    //連結的來源地址

        if (referer == null || !referer.contains(request.getServerName())) {//判斷訪問來源
            request.getRequestDispatcher("/images/errorimage.gif").forward(request, response);//顯示錯誤圖片
        } else {
            chain.doFilter(request, response); //正常顯示圖片
        }
    }

    public void destroy(){
        filterConfig = null;
    }
}

web.xml配置:

<filter>
    <filter-name>MyFilter</filter-name>
    <filter-class>com.yykj.servlet.MyFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>MyFilter</filter-name>
    <url-pattern>/pages/*</url-pattern>
  </filter-mapping>