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

SpringBoot攔截器原理解析及使用方法

 更新時(shí)間:2020年04月27日 10:16:58   作者:小伍2013  
這篇文章主要介紹了SpringBoot攔截器原理解析及使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

攔截器簡(jiǎn)介

攔截器通常通過(guò)動(dòng)態(tài)代理的方式來(lái)執(zhí)行。

攔截器的生命周期由IoC容器管理,可以通過(guò)注入等方式來(lái)獲取其他Bean的實(shí)例,使用更方便。

攔截器配置使用方式

實(shí)現(xiàn)攔截器接口:

import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

private class AuthenticationInterceptor implements HandlerInterceptor {
	// 在請(qǐng)求處理之前進(jìn)行調(diào)用(Controller方法調(diào)用之前)
  @Override
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException{
  	System.out.println(request.getRequestURL());
  	User user = (User)request.getSession().getAttribute("USER");
    if(user != null){
    	return true;
    }else {
    	System.out.println("no login...");
    	// request.getRequestDispatcher("/index.html").forward(request, response);
    	response.sendRedirect(request.getContextPath()+"login.html");
    	return false;
    }
    return false;
  }
  
  // 在請(qǐng)求處理之后視圖被渲染之前進(jìn)行調(diào)用(Controller方法調(diào)用之后)
  @Override
  public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
    System.out.println("postHandle...");
  }

	// 在請(qǐng)求結(jié)束之后、也就是視圖被渲染之后進(jìn)行調(diào)用(主要是用于進(jìn)行資源清理工作)
  @Override
  public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
    System.out.println("afterCompletion...");
  }
}

將攔截器加入到配置中:

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebSecurityConfig implements WebMvcConfigurer{
  @Override
  public void addInterceptors(InterceptorRegistry registry){
    registry.addInterceptor(new AuthenticationInterceptor())
    		//所有路徑都被攔截
    		.addPathPatterns("/**")
    		//添加不攔截的路徑
    		.excludePathPatterns("/userLogin", "/css/**", "/images/**", "/js/**", "/login.html");
    registry.addInterceptor(new OtherInterceptor())
        .addPathPatterns("/**");
  }
}

備注:

由于 preHandle、postHandle、afterCompletion 是不同的方法,如果在這些方法之間使用共享變量來(lái)儲(chǔ)存值,會(huì)存在線程安全問(wèn)題。而使用過(guò)濾器實(shí)現(xiàn)則不存在此問(wèn)題。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

额济纳旗| 苏州市| 拜泉县| 玉树县| 宁陵县| 布尔津县| 博爱县| 柳州市| 班戈县| 大兴区| 云林县| 曲麻莱县| 南皮县| 武乡县| 饶阳县| 临泽县| 安新县| 竹北市| 精河县| 吉林省| 礼泉县| 信宜市| 丽水市| 卓尼县| 乐清市| 汉阴县| 盈江县| 德安县| 岳普湖县| 本溪| 工布江达县| 策勒县| 彝良县| 遂溪县| 稷山县| 茂名市| 天祝| 易门县| 云和县| 石棉县| 梅河口市|