博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring boot 添加拦截器的简单实例(springBoot 2.x版本,添加拦截器,静态资源不可访问解决方法)...
阅读量:7006 次
发布时间:2019-06-27

本文共 4047 字,大约阅读时间需要 13 分钟。

spring中拦截器主要分两种,一个是HandlerInterceptor,一个是MethodInterceptor

一、HandlerInterceptor

HandlerInterceptor是springMVC项目中的拦截器,它拦截的目标是请求的地址,比MethodInterceptor先执行。

 

1、创建我们自己的拦截器类并实现 HandlerInterceptor 接口或继承HandlerInterceptorAdapter。

2、创建一个Java类继承WebMvcConfigurerAdapter,并重写 addInterceptors 方法。
3、实例化我们自定义的拦截器,然后将对像手动添加到拦截器链中(在addInterceptors方法中添加)。

package com.qicheshetuan.backend.web.interceptor;import org.springframework.web.servlet.ModelAndView;import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * Created by 15117 on 2018/4/27. */public class TestInterceptor extends HandlerInterceptorAdapter {    @Override    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {        System.out.println("在控制器执行前调用 ");        Boolean flag = true;        if(flag){            System.out.println(request.getMethod());            return true;        }else{            System.out.println(request.getMethod());            return false;        }    }    @Override    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {        System.out.println("在后端控制器执行后调用 ");        super.postHandle(request, response, handler, modelAndView);    }    @Override    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {        System.out.println("整个请求执行完成后调用 ");        super.afterCompletion(request, response, handler, ex);    }}
package com.qicheshetuan.backend.web.interceptor;import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.InterceptorRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;/** * Created by 15117 on 2018/4/27. */@Configurationpublic class InterceptorConfig extends WebMvcConfigurerAdapter {    @Override    public void addInterceptors(InterceptorRegistry registry) {        registry.addInterceptor(new TestInterceptor()).addPathPatterns("/**");        super.addInterceptors(registry);    }}

二、MethodInterceptor

MethodInterceptor是AOP项目中的拦截器,它拦截的目标是方法,即使不是controller中的方法。实现MethodInterceptor拦截器大致也分为两种,一种是实现MethodInterceptor接口,另一种利用AspectJ的注解或配置。

基于注解的AspectJ方式

package com.qicheshetuan.backend.web.interceptor;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.Around;import org.aspectj.lang.annotation.Aspect;import org.springframework.stereotype.Component;/** * Created by 15117 on 2018/4/27. */@Component@Aspectpublic class AspectJInterceptor {    @Around("execution(* com.qicheshetuan.backend.web.controller.AutoCommunityController.*(..))")    public Object around(ProceedingJoinPoint pjp) throws Throwable {        System.out.println("方法执行前");        Object proceed = pjp.proceed();        System.out.println("方法执行后");        return proceed;    }}
package com.qicheshetuan.backend.web.interceptor;import org.aspectj.lang.JoinPoint;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.aspectj.lang.annotation.Pointcut;import org.springframework.stereotype.Component;/** * Created by 15117 on 2018/4/27. */@Component@Aspectpublic class AspectJInterceptor {    @Pointcut("execution(* com.qicheshetuan.backend.web.controller..*.*(..))")    public void execMethod(){    }    @Before("execMethod()")    public void beforeMethod(JoinPoint joinPoint){        System.out.println("方法前执行");        System.out.println(joinPoint.getSignature().getName());    }}

 备注:

近日,发现Spring 5.0 以后WebMvcConfigurerAdapter会过时,新实现

(一)

@Configuration

public class TestConfig implements WebMvcConfigurer {

  . . .

}

(二、推荐)

@Configuration

public class TestConfig extends WebMvcConfigurationSupport {

  . . .

}

 由于spring boot 2.x依赖的spring 5.x版本,使用spring 5.x时,静态资源也会执行自定义的拦截器

所有导致静态资源不可访问的问题

 

解决方法:

在添加自定义拦截器是,过滤掉静态资源路径

 

 

 

 

 

转载于:https://www.cnblogs.com/SongG-blogs/p/8963165.html

你可能感兴趣的文章
js返回相对时间
查看>>
Spring中 @Autowired注解与@Resource注解的区别
查看>>
你必须知道的.NET:内存分配
查看>>
struct.error: 'h' format requires -32768 number 32767
查看>>
nginx报Could not build the server_names_hash,server_names_hash_bucket_size:32错
查看>>
linux中的计划任务
查看>>
码云全面改版:新界面新态度,匠心凝聚!
查看>>
【码云周刊第 28 期】计算机视觉时代的识图技术
查看>>
如何在IIS7或IIS7.5中导入导出站点及应用程序池.
查看>>
http的缓存机制
查看>>
linux安装mysql二进制包( 完整流程 )
查看>>
百度富文本编辑器插入html代码
查看>>
Jquery文本框变色
查看>>
再学 GDI+[26]: TGPPen - 画笔对齐 - SetAlignment
查看>>
10.位图索引
查看>>
图解 CSS (4): background - 背景
查看>>
网络数据包收发流程(三):e1000网卡和DMA
查看>>
MySQL主从同步问题集
查看>>
[置顶] cocos2d-x2.2.5走四棋儿源码“开源”
查看>>
在游戏框架中实现天空体
查看>>