国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

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

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

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

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

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

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

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

一、什么是過(guò)濾器

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

二、工作原理及生命周期

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

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

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

1.實(shí)例化

2.初始化

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

4.銷毀

三、過(guò)濾器使用

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

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

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,放行訪問(wèn)
			filterChain.doFilter(httpRequest, httpResponse);
			return;
		}
		if (SessionUtils.getSessionAttribute(CURRENT_USER) != null) {
			//若為登錄狀態(tài) 放行訪問(wèn)
			filterChain.doFilter(httpRequest, httpResponse);
			return;
		} else {
			//否則默認(rèn)訪問(wè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è)過(guò)濾器

@Configuration
public class WebConfig {
	/**
	 * 配置過(guò)濾器
	 * @return
	 */
	@Bean
	public FilterRegistrationBean someFilterRegistration() {
		FilterRegistrationBean registration = new FilterRegistrationBean();
		registration.setFilter(myFilter());
		//攔截/*的訪問(wèn) 多級(jí)匹配(springboot 過(guò)濾器/*以及匹配 /**多級(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)目

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

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

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

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

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

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

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

常用過(guò)濾器及其使用后續(xù)再來(lái)學(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é)果圖

java 使用過(guò)濾器實(shí)現(xiàn)登錄攔截處理 java 使用過(guò)濾器實(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)了對(duì)于集合操作轉(zhuǎn)換的神器,java8新特性 stream,但在使用中遇到了一個(gè)非常重要的注意點(diǎn),所以這篇文章主要給大家介紹了關(guān)于Java8中S...

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

    小米推送Java代碼

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

    富貴穩(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à)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望...

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

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

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

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

    升級(jí)IDEA后Lombok不能使用的解決方法

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

    程序猿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程序片段,對(duì)java開(kāi)發(fā)項(xiàng)目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
主站蜘蛛池模板: 搞黄在线观看 | 免费精品视频一区二区三区 | 精品久久久久久久久久 | 亚洲一区 中文字幕 | 不卡二区| 日韩视频www | 天天艹| 欧美狠狠操 | 日韩中文字幕一区二区高清99 | 97久久超碰| 欧美午夜一区二区福利视频 | 91精品国产综合久久婷婷香蕉 | 久久免费精品 | 久久综合久久综合久久综合 | 中文字幕二区 | 操久久| 91精品国产乱码久久久久久久久 | 亚洲免费av在线 | av一区二区在线观看 | 精品国产一区二区在线 | 欧美一级片在线观看 | 四房婷婷 | 亚洲免费视频一区 | 亚洲一区 日韩精品 中文字幕 | 涩涩天堂 | 久久久99精品免费观看 | 亚洲国产一区二区a毛片 | 免费黄色成人 | 成人免费观看www的片 | 久久av一区二区三区 | 亚洲精品乱码久久久久久久 | 午夜爽爽 | 亚洲 欧美 日韩 丝袜 另类 | yy6080一级二级 | 色乱码一区二区三区网站 | 天堂av中文字幕 | 国产真实精品久久二三区 | 国产亚洲精品一区二区 | 99热69| 欧美在线观看一区 | 欧美精品一区在线观看 |