最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java 使用過濾器實(shí)現(xiàn)登錄攔截處理

 更新時(shí)間:2021年09月27日 16:28:10   作者:ChengNengNeng  
這篇文章主要介紹了java 使用過濾器實(shí)現(xiàn)登錄攔截處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

濾器實(shí)現(xiàn)登錄攔截處理

一、什么是過濾器

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

二、工作原理及生命周期

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

在這里插入圖片描述 在這里插入圖片描述

這個(gè)過程包含了過濾器的生命周期:

1.實(shí)例化

2.初始化

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

4.銷毀

三、過濾器使用

在springboot項(xiàng)目簡(jiǎn)單使用過濾器進(jìn)行登錄攔截處理

1.實(shí)現(xiàn)過濾器

public class MyFilter implements Filter {
	private static final String CURRENT_USER = "current_user";
   //配置白名單
	protected static List<Pattern> patterns = new ArrayList<Pattern>();
	//靜態(tài)代碼塊,在虛擬機(jī)加載類的時(shí)候就會(huì)加載執(zhí)行,而且只執(zhí)行一次
	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) {
			//若為登錄狀態(tài) 放行訪問
			filterChain.doFilter(httpRequest, httpResponse);
			return;
		} else {
			//否則默認(rèn)訪問index接口
			wrapper.sendRedirect("/index");
		}
	}
	@Override
	public void destroy() {
	}
//判斷當(dāng)前請(qǐng)求是否在白名單
	private boolean isInclude(String url) {
		for (Pattern pattern : patterns) {
			Matcher matcher = pattern.matcher(url);
			if (matcher.matches()) {
				return true;
			}
		}
		return false;
	}
}

2.注冊(cè)過濾器

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

3.運(yùn)行項(xiàng)目

訪問/index,會(huì)發(fā)現(xiàn)沒有被攔截,返回正確結(jié)果

在這里插入圖片描述

在未登錄狀態(tài),訪問/update接口,會(huì)被攔截跳轉(zhuǎn)至/index頁

在這里插入圖片描述

在登錄狀態(tài),訪問/update接口,可以訪問

在這里插入圖片描述

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

常用過濾器及其使用后續(xù)再來學(xué)習(xí)。

filter簡(jiǎn)易實(shí)現(xiàn)登錄功能攔截

暑期項(xiàng)目實(shí)習(xí)第八課, filter簡(jiǎn)易實(shí)現(xiàn)登錄功能攔截

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;
    }

結(jié)果圖

在這里插入圖片描述 在這里插入圖片描述

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java實(shí)現(xiàn)分庫(kù)分表實(shí)踐指南

    Java實(shí)現(xiàn)分庫(kù)分表實(shí)踐指南

    在開發(fā)中我們經(jīng)常使用到分庫(kù)分表,但是一般是我們前期就已經(jīng)做了規(guī)劃,對(duì)數(shù)據(jù)庫(kù)怎么劃分,對(duì)哪些表進(jìn)行分表,這篇文章主要給大家介紹了關(guān)于Java實(shí)現(xiàn)分庫(kù)分表的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • Java中Array、List、ArrayList的區(qū)別及說明

    Java中Array、List、ArrayList的區(qū)別及說明

    這篇文章主要介紹了Java中Array、List、ArrayList的區(qū)別及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Java 異步實(shí)現(xiàn)的幾種方式小結(jié)

    Java 異步實(shí)現(xiàn)的幾種方式小結(jié)

    這篇文章主要介紹了Java 異步實(shí)現(xiàn)的幾種方式小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 使用Netty進(jìn)行編解碼的操作過程詳解

    使用Netty進(jìn)行編解碼的操作過程詳解

    這篇文章主要介紹了使用Netty進(jìn)行編解碼的操作過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • IDEA?2022?中的Lombok?使用基礎(chǔ)教程

    IDEA?2022?中的Lombok?使用基礎(chǔ)教程

    ? Lombok是使用java編寫的一款開源類庫(kù)。其主作用是使用注解來代替一些具有格式固定,沒有過多技術(shù)含量的編碼工作,這篇文章主要介紹了IDEA?2022?中的Lombok?使用基礎(chǔ)教程,需要的朋友可以參考下
    2022-12-12
  • 使用SpringDataJpa創(chuàng)建中間表

    使用SpringDataJpa創(chuàng)建中間表

    這篇文章主要介紹了使用SpringDataJpa創(chuàng)建中間表,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Java IO 之文件讀寫簡(jiǎn)單實(shí)例

    Java IO 之文件讀寫簡(jiǎn)單實(shí)例

    這篇文章主要介紹了Java IO 之文件讀寫簡(jiǎn)單實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • Java?NIO實(shí)現(xiàn)聊天室功能

    Java?NIO實(shí)現(xiàn)聊天室功能

    這篇文章主要為大家詳細(xì)介紹了Java?NIO實(shí)現(xiàn)聊天室功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Java面試之如何獲取客戶端真實(shí)IP

    Java面試之如何獲取客戶端真實(shí)IP

    這篇文章主要給大家介紹了關(guān)于Java面試之如何獲取客戶端真實(shí)IP的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • 使用maven的profile構(gòu)建不同環(huán)境配置的方法

    使用maven的profile構(gòu)建不同環(huán)境配置的方法

    這篇文章主要介紹了使用maven的profile構(gòu)建不同環(huán)境配置的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01

最新評(píng)論

濮阳县| 驻马店市| 咸阳市| 龙陵县| 施秉县| 北宁市| 宝坻区| 恭城| 友谊县| 根河市| 隆昌县| 扶沟县| 博客| 贡觉县| 阳高县| 牟定县| 安阳市| 江永县| 富民县| 彰化县| 屏东市| 泰兴市| 固始县| 沭阳县| 潼关县| 南木林县| 扶沟县| 天门市| 毕节市| 呼玛县| 万盛区| 顺平县| 沁阳市| 项城市| 商河县| 宿州市| 福建省| 海宁市| 望城县| 厦门市| 宝应县|