1. 程式人生 > 其它 >使用過濾器filter進行登入驗證

使用過濾器filter進行登入驗證

簡述

  在常見的網站上,我們需要登入才能訪問到其他資源。一般來說我們的登入資訊會用session儲存,所以我們可以使用filter進行一個登入驗證的過濾。

package cn.itcast.web.filter;

import com.sun.deploy.net.HttpRequest;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

@WebFilter(
"/*") public class LoginFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
//0.強轉或者一個http req 和 response HttpServletRequest request = (HttpServletRequest) servletRequest; //1.判斷是否是登入相關的資源 String uri = request.getRequestURI(); //2.判斷是否包含登入相關資源路徑,注意要排除css和js資源 if(uri.contains("/login.jsp") || uri.contains("/loginServlet") || uri.contains("/css/") || uri.contains("/js/") || uri.contains("/fronts/") || uri.contains("/checkCodeServlet")){
//包含,證明想去登入 filterChain.doFilter(servletRequest,servletResponse); }else{ //不包含,需要驗證使用者是否登入 //3.從session中獲取user Object user = request.getSession().getAttribute("user"); if(user != null){ //登入了,放行 filterChain.doFilter(servletRequest,servletResponse); }else{ //證明沒有登入,跳轉到登入頁面 request.setAttribute("login_msg","您尚未登入"); request.getRequestDispatcher("login.jsp").forward(request,servletResponse); } } } @Override public void destroy() { } }