前面也說過,過濾和攔截是一個項目安全的基礎,一個項目必須要有基本的攔截功能。 試想 如果 一個普通用戶可以毫無阻攔的進入你的後臺管理,那根本毫無安全性可言。下面我們就來看看過濾器如何製作。
首先,新建一個繼承Filter接口的JAVA類 其功能代碼如下:
- 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;
- import javax.servlet.http.HttpSession;
- public class FrontAuthFilter implements Filter {
- public void destroy() {
- }
- public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
- FilterChain filterChain) throws IOException, ServletException {
- /**
- * 1,doFilter方法的第一個參數爲ServletRequest對象。此對象給過濾器提供了對進入的信息(包括
- * 表單數據、cookie和HTTP請求頭)的完全訪問。第二個參數爲ServletResponse,通常在簡單的過
- * 濾器中忽略此參數。最後一個參數爲FilterChain,此參數用來調用servlet或JSP頁。
- */
- HttpServletRequest request = (HttpServletRequest) servletRequest;
- /**
- * 如果處理HTTP請求,並且需要訪問諸如getHeader或getCookies等在ServletRequest中
- * 無法得到的方法,就要把此request對象構造成HttpServletRequest
- */
- HttpServletResponse response = (HttpServletResponse) servletResponse;
- String currentURL = request.getRequestURI(); //取得根目錄所對應的絕對路徑:
- String targetURL = currentURL.substring(currentURL.indexOf("/", 1),
- currentURL.length()); //截取到當前文件名用於比較
- HttpServletRequest req = (HttpServletRequest) request;
- String url = req.getRequestURL().toString();
- HttpSession session = request.getSession(false);
- if (!"/login.jsp".equals(targetURL)) {
- //判斷當前頁是否是重定向以後的登錄頁面頁面,如果是就不做session的判斷,防止出現死循環
- if (session == null || session.getAttribute("examusers_name") == null) {
- //*用戶登錄以後需手動添加session
- response.sendRedirect(request.getContextPath() + "/login.jsp");
- //如果session爲空表示用戶沒有登錄就重定向到login.jsp頁面
- return;
- }
- }
- //加入filter鏈繼續向下執行
- if (!"action".equals(url.substring(url.length() - 6, url.length()))) {
- }
- filterChain.doFilter(request, response);
- }
- public void init(FilterConfig filterConfig) throws ServletException {
- }
- /**
- * 調用FilterChain對象的doFilter方法。Filter接口的doFilter方法取一個FilterChain對象作 爲它
- * 的一個參數。在調用此對象的doFilter方法時,激活下一個相關的過濾器。如果沒有另
- * 一個過濾器與servlet或JSP頁面關聯,則servlet或JSP頁面被激活。
- */
- }
如何將它變成你的 基本上修改1,2處即可
1.判斷狀態的值 修改變量名即可 注意:session==null 不可除去
- if (session == null || session.getAttribute("examusers_name") == null) {
2.路徑
- if (!"/login.jsp (修改這裏 爲你的登陸頁面)".equals(targetURL)) {
- 判斷當前頁是否是重定向以後的登錄頁面頁面,如果是就不做session的判斷,防止出現死循環
- if (session == null || session.getAttribute("examusers_name") == null) {
- *用戶登錄以後需手動添加session
- response.sendRedirect(request.getContextPath() + "/login.jsp(修改這裏 爲你的登陸頁面)");
- 如果session爲空表示用戶沒有登錄就重定向到login.jsp頁面
- return;
- }
- }
好了 過濾器就寫好了 接下來調用即可 這裏需要修改web.xml文件
- <filter>
- <filter-name>FrontAuthFilter</filter-name>
- <filter-class>org.yzsoft.examdemo.util.FrontAuthFilter</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>FrontAuthFilter</filter-name>
- <url-pattern>/front/*</url-pattern>
- </filter-mapping>
<filter-class>這裏是你過濾器的位置</filter-class>
<url-pattern>這裏則是需要過濾的目錄 如我需要過濾back目錄的所有頁面 /back/* </url-pattern>
需要注意個問題 登陸頁面不能被過濾 原理就像這個
拿鑰匙開保險櫃一樣 假如 你所需要保存的東西保存在保險櫃裏
然後必須有一把鑰匙開鎖 但是如果你將鑰匙也鎖在保險櫃 那就永遠也開不了鎖
然而 將登陸頁包含在過濾目錄下就像將鑰匙鎖在保險櫃是一樣的
好了,話不多說。
--------------------------------------------------------------------------------
謝謝觀看 小弟新手 有什麼不足 麻煩指出 在此謝謝了 chenwei51製作 請尊重作者 轉帖 需註明原地址