一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - java 使用過濾器實(shí)現(xiàn)登錄攔截處理

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

2022-01-20 12:05ChengNengNeng Java教程

這篇文章主要介紹了java 使用過濾器實(shí)現(xiàn)登錄攔截處理方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

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

一、什么是過濾器

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

二、工作原理及生命周期

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

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

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

1.實(shí)例化

2.初始化

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

4.銷毀

三、過濾器使用

在springboot項(xiàng)目簡單使用過濾器進(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í)候就會加載執(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)前請求是否在白名單
	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;
	}
	/**
	 * 創(chuàng)建一個(gè)bean
	 * @return
	 */
	@Bean(name = "myFilter")
	public Filter myFilter() {
		return new MyFilter();
	}
}

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

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

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

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

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

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

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

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

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

 

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

暑期項(xiàng)目實(shí)習(xí)第八課, filter簡易實(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é)果圖

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

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

原文鏈接:https://blog.csdn.net/ChengChengxn/article/details/88619575

延伸 · 閱讀

精彩推薦
  • Java教程Java8中Stream使用的一個(gè)注意事項(xiàng)

    Java8中Stream使用的一個(gè)注意事項(xiàng)

    最近在工作中發(fā)現(xiàn)了對于集合操作轉(zhuǎn)換的神器,java8新特性 stream,但在使用中遇到了一個(gè)非常重要的注意點(diǎn),所以這篇文章主要給大家介紹了關(guān)于Java8中S...

    阿杜7482021-02-04
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關(guān)于小米推送Java代碼,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧...

    富貴穩(wěn)中求8032021-07-12
  • Java教程Java實(shí)現(xiàn)搶紅包功能

    Java實(shí)現(xiàn)搶紅包功能

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)搶紅包功能,采用多線程模擬多人同時(shí)搶紅包,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程Java BufferWriter寫文件寫不進(jìn)去或缺失數(shù)據(jù)的解決

    Java BufferWriter寫文件寫不進(jìn)去或缺失數(shù)據(jù)的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進(jìn)去或缺失數(shù)據(jù)的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程xml與Java對象的轉(zhuǎn)換詳解

    xml與Java對象的轉(zhuǎn)換詳解

    這篇文章主要介紹了xml與Java對象的轉(zhuǎn)換詳解的相關(guān)資料,需要的朋友可以參考下...

    Java教程網(wǎng)2942020-09-17
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經(jīng)有好久沒有升過級了。升級完畢重啟之后,突然發(fā)現(xiàn)好多錯(cuò)誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程20個(gè)非常實(shí)用的Java程序代碼片段

    20個(gè)非常實(shí)用的Java程序代碼片段

    這篇文章主要為大家分享了20個(gè)非常實(shí)用的Java程序片段,對java開發(fā)項(xiàng)目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
主站蜘蛛池模板: 欧美又大又粗又爽视频 | youzljzljzljzlj96| 亚洲人的天堂男人爽爽爽 | 亚洲欧美日韩国产一区二区精品 | 乌克兰一级毛片 | 亚洲xxxxxhd奶水女人 | 国产中文在线 | 精品无码国产AV一区二区三区 | h卡通第一页 | 日本老师xxxxx18 | 高清在线观看免费入口 | 短篇小说肉 | 四虎884aa永久播放地址http | 精品久久久久免费极品大片 | 娇小8一12xxxx第一次 | 亚洲国产精品综合久久网络 | 猫扑俩性 | 亚洲第一网站免费视频 | 国内亚州视频在线观看 | 69欧美性猛交 | 国产精品一二区 | 日产精品一卡2卡三卡4乱码久久 | tube69中国露脸 | 秋霞黄色大片 | 欧美性色黄大片四虎影视 | 午夜香蕉成视频人网站高清版 | 国产未成女年一区二区 | 校花被老头夺去第一次动图 | 日本高清中文字幕一区二区三区 | 小早川怜子在线播放精品 | 男人都懂www深夜免费网站 | 视频一区 日韩 | 午夜dj影院在线视频观看完整 | 99ri国产在线 | 天堂在线中文无弹窗全文阅读 | 色老大在线 | 成人在线视频在线观看 | 日韩成人在线视频 | 久久99re2在线视频精品 | 厨房play黄瓜进入 | 日本一区二区三区久久精品 |