過濾過濾,實際就是把須要和不須要的東西分開!html
今天來講道說道咱們程序中的‘登陸過濾器’ ,首先咱們看看一下面的問題:java
一、「登陸過濾器」是幹什麼用的?web
1)「登陸過濾器」就是爲了防止在用戶沒有登陸的狀況下來訪問咱們的網站。安全
2)舉例:main.html 這個網頁是須要經過login.html這個網頁登陸後才能夠訪問的,如今有一個用戶沒有登陸,直接訪問main.html成功了。那麼,這樣的網站是否是以爲不安全呢?用戶不用登陸隨隨便便就訪問了。so,we have to need a filter.咱們須要用過濾器來過濾一些須要登陸後才能夠訪問的頁面.session
二、咱們要怎麼過濾呢?app
1)at first ! 咱們確定要過濾掉須要登陸的頁面jsp
2)咱們拿到了須要登陸的頁面後,咱們怎麼判斷用戶有沒有登陸呢?so,we need a session .網站
3)已session爲依據,來判斷用戶是否是登陸過了。登陸過了咱們就讓他繼續訪問,沒有登陸的咱們就讓他返回到登陸界面。url
下面咱們來看看代碼是如何實現的:spa
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>
注意:登陸頁面不能過濾。。。自行調試不要偷懶!這樣記憶深入......
博文到此結束,感謝您的觀看,但願對各位讀者有所幫助,若是有什麼意見以及建議請在評論留言......
======祝各位讀者生活愉快======