Spring攔截器
HandlerInterceptorAdapter需要繼承,
HandlerInterceptor需要實現
可以作為日志記錄和登錄校驗來使用
建議使用HandlerInterceptorAdapter,因為可以按需進行方法的覆蓋。
主要為3種方法:
preHandle:攔截於請求剛進入時,進行判斷,需要boolean返回值,如果返回true將繼續執行,如果返回false,將不進行執行。一般用於登錄校驗。
postHandle:攔截於方法成功返回后,視圖渲染前,可以對modelAndView進行操作。
afterCompletion:攔截於方法成功返回后,視圖渲染前,可以進行成功返回的日志記錄。
springmvc的配置xml
<!-- 攔截器配置,攔截順序:先執行后定義的,排在第一位的最后執行。 -->
<mvc:interceptors>
<!-- 可配置多個-->
<mvc:interceptor>
<!-- mapping path 表示 需要攔截的url-->
<mvc:mapping path="${adminPath}/**" />
<!-- exclude-mapping path 表示 需要排除攔截的url-->
<mvc:exclude-mapping path="${adminPath}/" />
<mvc:exclude-mapping path="${adminPath}/login" />
<!-- bean 表示攔截器的類-->
<bean class="org.jasig.cas.web.interceptor.LogInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
springboot的注解配置
@Configuration public class InterceptorConfig implements WebMvcConfigurer { private static final Logger logger = LoggerFactory.getLogger(InterceptorConfig.class); @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(authenticationInterceptor()) .addPathPatterns("/**"); registry.addInterceptor(loginInterceptor()) .addPathPatterns("/**") .excludePathPatterns("/css/**","/images/**","/js/**","/login.html"); // 攔截所有請求,通過判斷是否有 @LoginRequired 注解 決定是否需要登錄或者通過excludePathPatterns配置不需要攔截的路徑 //多攔截器配置 }