過濾過濾,實際就是把需要和不需要的東西分開!
今天來說道說道我們程序中的‘登錄過濾器’ ,首先我們看看一下面的問題:
1、“登錄過濾器”是干什么用的?
1)“登錄過濾器”就是為了防止在用戶沒有登錄的情況下來訪問我們的網站。
2)舉例:main.html 這個網頁是需要通過login.html這個網頁登錄后才可以訪問的,現在有一個用戶沒有登錄,直接訪問main.html成功了。那么,這樣的網站是不是覺得不安全呢?用戶不用登錄隨隨便便就訪問了。so,we have to need a filter.我們需要用過濾器來過濾一些需要登錄后才可以訪問的頁面.
2、我們要怎么過濾呢?
1)at first ! 我們肯定要過濾掉需要登錄的頁面
2)我們拿到了需要登錄的頁面后,我們怎么判斷用戶有沒有登錄呢?so,we need a session .
3)已session為依據,來判斷用戶是不是登錄過了。登錄過了我們就讓他繼續訪問,沒有登錄的我們就讓他返回到登錄界面。
下面我們來看看代碼是如何實現的:
package com.haojieli.filter;
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 LoginFilter implements Filter{
public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest req = (HttpServletRequest)arg0;
HttpServletResponse resp =(HttpServletResponse) arg1;
HttpSession session = req.getSession();
// 獲得用戶請求的URI
String path = req.getRequestURI();
// 從session取得已經登錄驗證的憑證 我這里的demo用的是password來作為登錄憑證
String password = (String) session.getAttribute("password");
// login.jsp頁面無需過濾(根據自己項目的要求來)
//也可以path.contains("login.jsp") 反正怎么精確怎么來就不多說了
if(path.indexOf("/login.jsp") > -1) {//注意:登錄頁面千萬不能過濾 不然過濾器就。。。。。自行調試不要偷懶!這樣記憶深刻
arg2.doFilter(req, resp);
return;
} else {//如果不是login.jsp進行過濾
if (password == null || "".equals(password)) {
// 跳轉到登陸頁面
resp.sendRedirect("login.jsp");
} else {
// 已經登陸,繼續此次請求
arg2.doFilter(req, resp);
}
}
}
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
在這里就不用解釋代碼了,代碼中有詳細的注釋,但是重要的一點 我們過濾器是寫好了 ,還需要配置啊,不然怎么運行呢?followe me。
將過濾器配置到web.xml里面
<filter>
<filter-name>Login</filter-name>
<filter-class>com.haojieli.filter.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>adminLogin</filter-name>
<!--這里的/admin/* 表示是指定路徑下的文件需要過濾 也可以寫為 <url-pattern>/*</url-pattern> 表示所有文件都需要過濾-->
<url-pattern>/admin/*</url-pattern>
</filter-mapping>
注意:登錄頁面不能過濾。。。自行調試不要偷懶!這樣記憶深刻......
博文到此結束,感謝您的觀看,希望對各位讀者有所幫助,如果有什么意見以及建議請在評論留言......
======祝各位讀者生活愉快======