其实springboot拦截器的配置方法和springMVC类似,只需要注意一些小的改动就可以了。下面主要介绍两种常用的拦截器:1、基于URL的拦截器:publicclassLoginInterceptorextendsHandlerInterceptorAdapter{/***请求处理前调用(Controller方法调用前)*基于URL的拦截器*@paramrequest*@paramresponse*@paramhandler*@return*@throwsException*/@OverridepublicbooleanpreHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler)throwsException{Stringpath=request.getServletPath();if(path.matches(Const.NO_INTERCEPTOR_PATHdirectlyinterceptedby/PATH){returntrue;}else{//这写你的需要拦截,比如取缓存,SESSION,权限判断等System.out.println("=====================================");returntrue;}}}关键代码:path.matches(Const.NO_INTERCEPTOR_PATH是基于正则匹配的url。/***@authorBianP*@explainconstantclass*/publicclassConst{publicstaticfinalStringSUCCESS="SUCCESS";publicstaticfinalStringERROR="ERROR";publicstaticfinalStringFIALL="FIALL";/**********************对象和个体******************************/publicstaticfinalStringSESSION_USER="loginedAgent";//用户对象publicstaticfinalStringSESSION_LOGINID="sessionLoginID";//登录IDpublicstaticfinalStringSESSION_USERID="sessionUserID";//当前用户对象ID号publicstaticfinalStringSESSION_USERNAME="sessionUserName";//当前用户对象ID号publicstaticfinalIntegerPAGE=10;//默认页码publicstaticfinalStringSESSION_URL="sessionUrl";//记录的urlpublicstaticfinalStringSESSION_SECURITY_CODE="sessionVerifyCode";//登录页面验证码//时间缓存时间publicstaticfinalintTIMEOUT=1800;//秒publicstaticfinalStringON_LOGIN="/logout.htm";publicstaticfinalStringLOGIN_OUT="/toLogout";//不验证URLLanon:no-auth/authc:受控publicstaticfinalStringNO_INTERCEPTOR_PATH=".*/((.css)|(.js)|(images)|(login)|(anon)).*";}2.基于注解的拦截器①创建注解:/***需要的时候使用这个登录验证controller方法上的注解*/@Target({ElementType.METHOD})//方法名上可以使用@Retention(RetentionPolicy.RUNTIME)//运行时有效public@interfaceLoginRequired{}②创建拦截器:publicclassAuthorityInterceptorextendsHandlerInterceptorAdapter{@OverridepublicbooleanpreHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler)throwsException{//如果不是映射到方法直接通过if(!(handlerinstanceofHandlerMethod)){returntrue;}//①:START方法注解级拦截器HandlerMethodhandlerMethod=(HandlerMethod)handler;methodmethod=handlerMethod.getMethod();//判断接口是否需要登录这是你需要拦截的东西,比如fetching缓存、SESSION、权限判断等System.out.println("====================================");returntrue;}returntrue;}}3.在配置中加入拦截器,相当于SpringMVC中的配置文件所做的:/***与springmvc的webmvc拦截配置相同*@authorBIANP*/@ConfigurationpublicclassWebConfigurerimpelementsWebMvcConfigurer{@OverridepublicvoidaddInterceptors(InterceptorRegistryregistry){//拦截所有请求,判断是否登录registry.addInterceptor(LoginInterceptor()).addPathPatterns("/**");registry.addInterceptor(AuthorityInterceptor())).addPathPatterns("/**");}@BeanpublicLoginInterceptorLoginInterceptor(){returnnewLoginInterceptor();}@BeanpublicAuthorityInterceptorAuthorityInterceptor(){returnnewAuthorityInterceptor();}}1.一定要加上@Configuration注解,启动Loading时会用到2.有的教程用的是“WebMvcConfigurerAdapter”,但是这个类在spring5.0版本之后已经废弃了WebMvcConfigurerAdapter,虽然还能用,但是不太好看。3.还有一些教程用到的WebMvcConfigurationSupport。我用了之后发现classpath:/META/resources/,classpath:/resources/,classpath:/static/,classpath:/public/都不生效。具体原因可以看源码,因为:WebMvcAutoConfiguration上有一个条件注解:@ConditionalOnMissingBean(WebMvcConfigurationSupport.class),所以推荐使用WebMvcConfigurer。其实springMVC中的很多东西都可以搬到springboot中使用,只需要把配置文件改成对应的@Configuration类即可。
