中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java如何使用過濾器實現登錄攔截處理

發布時間:2021-09-28 09:19:25 來源:億速云 閱讀:193 作者:小新 欄目:開發技術

這篇文章主要介紹了java如何使用過濾器實現登錄攔截處理,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

濾器實現登錄攔截處理

一、什么是過濾器

過濾器是處于客戶端與服務器資源文件之間的一道過濾網(駐留在服務器端的Web組件),在訪問資源文件之前,通過一系列的過濾器對請求進行修改、判斷等,把不符合規則的請求在中途攔截或修改。也可以對響應進行過濾,攔截或修改響應

二、工作原理及生命周期

舉個例子 當我們登錄系統可以訪問到頁面,當退出登錄后,要訪問就必須重新登錄,這就是過濾器起到的作用。當我們訪問某個接口時,過濾器會攔截請求,判斷當前用戶是否是登錄狀態,若登錄則放行訪問,若未登錄則返回指定頁面(通常為登錄頁或一個客戶友好的提示頁)

java如何使用過濾器實現登錄攔截處理 java如何使用過濾器實現登錄攔截處理

這個過程包含了過濾器的生命周期:

1.實例化

2.初始化

3.執行過濾操作(包括訪問前對request操作和返回時對response的操作處理)

4.銷毀

三、過濾器使用

在springboot項目簡單使用過濾器進行登錄攔截處理

1.實現過濾器

public class MyFilter implements Filter {
	private static final String CURRENT_USER = "current_user";
   //配置白名單
	protected static List<Pattern> patterns = new ArrayList<Pattern>();
	//靜態代碼塊,在虛擬機加載類的時候就會加載執行,而且只執行一次
	static {
		patterns.add(Pattern.compile("/index"));
		patterns.add(Pattern.compile("/login"));
		patterns.add(Pattern.compile("/register"));
	}
	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
	}
	@Override
	public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
		HttpServletRequest httpRequest = (HttpServletRequest) servletRequest;
		HttpServletResponse httpResponse = (HttpServletResponse) servletResponse;
		HttpServletResponseWrapper wrapper = new HttpServletResponseWrapper(httpResponse);
		String url = httpRequest.getRequestURI().substring(httpRequest.getContextPath().length());
		if (isInclude(url)) {
			//在白名單中的url,放行訪問
			filterChain.doFilter(httpRequest, httpResponse);
			return;
		}
		if (SessionUtils.getSessionAttribute(CURRENT_USER) != null) {
			//若為登錄狀態 放行訪問
			filterChain.doFilter(httpRequest, httpResponse);
			return;
		} else {
			//否則默認訪問index接口
			wrapper.sendRedirect("/index");
		}
	}
	@Override
	public void destroy() {
	}
//判斷當前請求是否在白名單
	private boolean isInclude(String url) {
		for (Pattern pattern : patterns) {
			Matcher matcher = pattern.matcher(url);
			if (matcher.matches()) {
				return true;
			}
		}
		return false;
	}
}

2.注冊過濾器

@Configuration
public class WebConfig {
	/**
	 * 配置過濾器
	 * @return
	 */
	@Bean
	public FilterRegistrationBean someFilterRegistration() {
		FilterRegistrationBean registration = new FilterRegistrationBean();
		registration.setFilter(myFilter());
		//攔截/*的訪問 多級匹配(springboot 過濾器/*以及匹配 /**多級匹配)
		registration.addUrlPatterns("/*");
		registration.setName("myFilter");
		return registration;
	}
	/**
	 * 創建一個bean
	 * @return
	 */
	@Bean(name = "myFilter")
	public Filter myFilter() {
		return new MyFilter();
	}
}

3.運行項目

訪問/index,會發現沒有被攔截,返回正確結果

java如何使用過濾器實現登錄攔截處理

在未登錄狀態,訪問/update接口,會被攔截跳轉至/index頁

java如何使用過濾器實現登錄攔截處理

在登錄狀態,訪問/update接口,可以訪問

java如何使用過濾器實現登錄攔截處理

這里也可以在程序debug看下。簡單的過濾器功能完成。

常用過濾器及其使用后續再來學習。

filter簡易實現登錄功能攔截

暑期項目實習第八課, filter簡易實現登錄功能攔截

LoginFliter

public class LoginFliter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        HttpSession session = request.getSession();
        User user = (User)session.getAttribute("user");
        String uri = request.getRequestURI();
        System.out.println(uri.indexOf("findAll.do"));
        System.out.println(uri.indexOf("login.do"));
        if(user==null && uri.indexOf("login.do")==-1){
            response.sendRedirect(request.getContextPath()+"/");
        }else {
            filterChain.doFilter(request,response);
        }
    }
    @Override
    public void destroy() {
    }
}

controller

   @RequestMapping("/login.do")
    public ModelAndView login(User user, HttpSession session){
        boolean flag = userService.login(user.getName(),user.getPassword());
        ModelAndView modelAndView = new ModelAndView();
        if(flag){
            session.setAttribute("user",user);
            modelAndView.setViewName("../ok");
        }else {
            modelAndView.setViewName("../failure");
        }
        return modelAndView;
    }

結果圖

java如何使用過濾器實現登錄攔截處理 java如何使用過濾器實現登錄攔截處理

感謝你能夠認真閱讀完這篇文章,希望小編分享的“java如何使用過濾器實現登錄攔截處理”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阳高县| 微山县| 新巴尔虎左旗| 九龙城区| 康马县| 山东| 冀州市| 大城县| 申扎县| 正阳县| 苍南县| 佛坪县| 防城港市| 长泰县| 贡嘎县| 郯城县| 五峰| 津市市| 天台县| 双流县| 化隆| 翁牛特旗| 长沙县| 亚东县| 阿拉尔市| 内丘县| 朝阳县| 吉林市| 桐乡市| 柳河县| 保定市| 林甸县| 台南县| 屏山县| 双牌县| 宁安市| 和政县| 巴南区| 盖州市| 大化| 增城市|