JavaWeb 過濾器——驗證登錄 防止未登錄進入界面


昨天剛剛完成老師布置的一個Web小項目,項目中用到了兩個過濾器(編碼過濾、登錄過濾)

比如電商網頁中有些不需要登錄也能訪問(首頁、商品詳細信息...),其他都需要過濾在會話作用域(session)中是否含有個人信息對象

示例代碼:

package com.star.miniShop.Filter;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

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;

@WebFilter("/*")
public class LoginFiter implements Filter{
  //實例化一個靜態的集合(這里可以改用map集合,提高性能,每次過濾可以不用for匹配)
    private static List<String> urls = new ArrayList<>();
    //靜態代碼塊中向集合中存放所有可以放行的請求或網頁地址(不用賬號密碼即可訪問)
    static {
        urls.add("/logining");
        urls.add("/shopLogin.html");
        urls.add("/css");
        urls.add("/js");
        urls.add("/images");
        urls.add("/shopHome.html");
        urls.add("/HomeShop");
        urls.add("/Searchs");
        urls.add("/regist");
        urls.add("/shopRegist.html");
    }
    
    @Override
    public void destroy() {
        // TODO Auto-generated method stub
        
    }
    

/**
* 攔截請求,看看用戶是否登陸,如果沒有登陸,
* 則跳轉回登錄頁面,否則就放行
*/


    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
      //注意:ServletRequest是HttpServletRequest父接口,因此需要強轉
      //同樣,ServletResponse是HttpServletResponse父接口,因此需要強轉

        HttpServletRequest req=(HttpServletRequest)request;
        HttpServletResponse res=(HttpServletResponse)response; 
      //得到當前頁面所在目錄下全名稱
        String urlPattern=req.getServletPath();
      //得到頁面所在服務器的絕對路徑
        String path = req.getRequestURI();
        //System.out.println(urlPattern);
        for (String url : urls) {
            if(url.equals(urlPattern) || path.contains(url)) {
        //        System.out.println("reaource do chain...");
                chain.doFilter(request, response);
                //防止重復響應
                return;
            }
        }
        //如果person為null,表示沒有登錄
        if(req.getSession().getAttribute("person")==null) {
            res.sendRedirect("shopLogin.html");
        }else { 
            //放行
            chain.doFilter(request, response);
        }
    }

    @Override
    public void init(FilterConfig arg0) throws ServletException {
        // TODO Auto-generated method stub
        
    }

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM