spring boot 添加拦截器的简单实例(springBoot 2.x版本,添加拦截器,静态资源不可访问解决方法)
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.
*/
@Configuration
public 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
@Aspect
public 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
@Aspect
public 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时,静态资源也会执行自定义的拦截器
所有导致静态资源不可访问的问题
解决方法:
在添加自定义拦截器是,过滤掉静态资源路径


spring boot 添加拦截器的简单实例(springBoot 2.x版本,添加拦截器,静态资源不可访问解决方法)的更多相关文章
- spring boot入门笔记(四) - 多环境配置、加载顺序、静态资源映射
1.多环境配置 先描述下以前的开发流程:从SVN把项目下载到本地,各种修改配置文件,启动成功:完成功能后上传到公司的测试服务器,修改各种配置文件,启动成功:最后到上线的日子里,把新功能中涉及到的文件打 ...
- Spring Boot AOP之对请求的参数入参与返回结果进行拦截处理
Spring Boot AOP之对请求的参数入参与返回结果进行拦截处理 本文链接:https://blog.csdn.net/puhaiyang/article/details/78146620 ...
- Spring Boot(二十):使用spring-boot-admin对spring-boot服务进行监控
Spring Boot(二十):使用spring-boot-admin对spring-boot服务进行监控 Spring Boot Actuator提供了对单个Spring Boot的监控,信息包含: ...
- Springboot2.1.1下的自定义拦截器而静态资源不能访问的问题
1.项目结构 2.自定义拦截器 public class LoginHandlerlnterceptor implements HandlerInterceptor { //目标方法执行之前 @Ove ...
- 【Spring学习笔记-MVC-14】Spring MVC对静态资源的访问
作者:ssslinppp 参考链接: http://www.cnblogs.com/luxh/archive/2013/03/14/2959207.html http://www.cnb ...
- spring boot 2.x拦截器导致静态资源404终极解决办法
首先添加application文件static路径,我的是yml文件 spring: mvc: static-path-pattern: /static/**然后注册拦截器类如下方法; @Overri ...
- Spring Boot【快速入门】简单案例
Spring Boot[快速入门] Spring Boot 概述 Build Anything with Spring Boot:Spring Boot is the starting point ...
- Spring Boot集成Springfox Swagger3和简单应用
摘要:Springfox Swagger可以动态生成 API 接口供前后端进行交互和在线调试接口,Spring Boot 框架是目前非常流行的微服务框架,所以,在Spring Boot 项目中集成Sp ...
- Spring Boot 1.4测试的简单理解
首先maven要引入spring-boot-starter-test这个包. 先看一段代码 @RunWith(SpringRunner.class) @SpringBootTest(webEnviro ...
随机推荐
- U盘文件被隐藏
转自https://blog.csdn.net/zichen_ziqi/article/details/80171891 文章原地址:http://www.uqidong.com/help/1625. ...
- Java垃圾收集器概述
垃圾收集器的操作 查找未使用的对象,释放内存,并压缩堆,避免内存碎片 一个java程序,有执行应用程序逻辑的线程和执行GC的线程组.当GC跟踪对象引用,或在内存中移动对象,它必须确保应用程序线程没有使 ...
- linux添加超级管理员用户,修改,删除用户
useradd一个用户后,去修改/etc/passwd文件中的这个用户这一行,把其中的uid改为0,gid改为0(其中****代表一个用户名)这样****就具有root权限了 如:root2:x:0: ...
- Oracle篇 之 查询行及概念
Oracle: s_emp s_dept s_region 行:Row(tuple) 列:Column(attribute) conn:改变用户 Drop:删除用户 drop user bri ...
- 【BZOJ5492】[HNOI2019]校园旅行(bfs)
[HNOI2019]校园旅行(bfs) 题面 洛谷 题解 首先考虑暴力做法怎么做. 把所有可行的二元组全部丢进队列里,每次两个点分别向两侧拓展一个同色点,然后更新可行的情况. 这样子的复杂度是\(O( ...
- Codeforces 1082C Multi-Subject Competition(前缀+思维)
题目链接:Multi-Subject Competition 题意:给定n名选手,每名选手都有唯一选择的科目si和对应的能力水平.并且给定科目数量为m.求选定若干个科目,并且每个科目参与选手数量相同的 ...
- 【linux】linux系统中常见配置文件说明
1.配置文件/proc/sys/fs/file-nr 里文件里显示三个数字 [root@localhost logs]# cat /proc/sys/fs/file-nr 已分配文件句柄的数目 已使用 ...
- Oracle Database 快捷版 安装 连接
Oracle Database 快捷版 11g 第 2 版 下载地址:http://www.oracle.com/technetwork/cn/database/database-technologi ...
- 关于opencv的cv2.WINDOW_一类
用法:cv2.namedWindow('窗口标题',默认参数) 默认参数:cv2.WINDOW_AUTOSIZE+cv2.WINDOW_KEEPRATIO+cv2.WINDOW_GUI_EXPANDE ...
- Windows编写的shell脚本,在linux上无法执行
前两天由于要查一个数据库的binlog日志,经常用命令写比较麻烦,想着写一个简单的脚本,自动去刷一下数据库的binlog日志,就直接在windows上面写了,然后拷贝到linux中去运行,其实很简单的 ...