Spring Boot WebMvcConfigurerAdapter 实现拦截器无配置

来源:互联网 发布:cmd获取软件版本号 编辑:程序博客网 时间:2024/06/08 10:28

SpringBoot对静态资源的支持以及很重要的一个类WebMvcConfigurerAdapter,该类可以省去我们之前的拦截XML配置文件,减少了对于XML文件的管理,这也是springBoot无配置的思想。

Spring Boot 默认为我们提供了静态资源处理,使用 WebMvcAutoConfiguration 中的配置各种属性。

首先创建对应的拦截器 这里我创建class AppAccessInterceptor.并且extends  HandlerInterceptorAdapter

里面实现我自己的拦截器功能,

/** *  * @ClassName: AppAccessInterceptor * @Description: APP请求拦截 * @author peng.xu * @date 2017年10月16日 下午2:10:10 * */@Slf4jpublic class AppAccessInterceptor extends HandlerInterceptorAdapter {    @Override    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)            throws Exception {        HandlerMethod handlerMethod = (HandlerMethod) handler;        Method method = handlerMethod.getMethod();        RequestAuth auth = method.getAnnotation(RequestAuth.class);        if(auth != null){            log.info("===========preHandle【拦截器拦截请求:{},参数:{}】==========", request.getRequestURL(), request.getQueryString());            Map<String, String[]> map = request.getParameterMap();            log.info("preHandle 拦截器进行拦截-request信息:{}", JSONObject.toJSON(map));            return false;        }        return true;             }}
RequestAuth  是一个我自己的注解,这样在需要加拦截的方法上 @RequestAuth 就表示要走拦截器。
具体代码

/** * * @ClassName: RequestAuth * @Description: 请求拦截* @author peng.xu* @date 2017年10月16日 下午3:25:19 * */@Documented@Inherited@Target({ElementType.METHOD,ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)public @interface RequestAuth {    boolean validate() default true;}


然后创建对应的配置类,之前的配置文件就在这里被替换了。我起名为InterceptorsWebMvcConfig 并且 extends WebMvcConfigurerAdapter,然后我们重写它的addInterceptors 方法即可。

具体代码:

<mvc:interceptors><mvc:interceptor><!-- 拦截所有请求 --><mvc:mapping path="/gw/**/*" /><!-- spu商品放行 --><mvc:exclude-mapping path="/gw/spu/*" />

这样即可实现了 XML中代码

所以XML 我们就不在需要。
我们想自定义静态资源映射目录的话,只需重写addResourceHandlers方法即可。


  @Override    public void addResourceHandlers(ResourceHandlerRegistry registry) {        registry.addResourceHandler("swagger-ui.html")                .addResourceLocations("classpath:/META-INF/resources/");        registry.addResourceHandler("/webjars/**")                .addResourceLocations("classpath:/META-INF/resources/webjars/");    }