防止其他URL地址直接訪問本站資源【防盜鏈過濾器】
阿新 • • 發佈:2019-01-30
在開發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>