WebMvcConfigurationSupport 注册自定义拦截器 Java SpringBoot
说明
定义拦截器
拦截器(Interceptor)类,用于在处理请求之前进行一些操作。
- 实现方式,让类实现
HandlerInterceptor
。- 在
preHandle
方法中进行请求拦截的逻辑操作。 - 首先判断拦截到的处理器(handler)是否为Controller的方法,如果不是,则直接放行。
- 在
@Component
@Slf4j
public class RedisTokenAdminInterceptor implements HandlerInterceptor{}
判断当前请求是不是动态方法(是不是controller层的内容),如果是则进行拦截。
public boolean preHandle(@NotNull HttpServletRequest request, @NotNull HttpServletResponse response, @NotNull Object handler) throws IOException {
// 判断当前兰街道的是Controller的方法还是其它资源 拦截到的不是动态方法,直接放行
if (!(handler instanceof HandlerMethod)) return true;
// 1. 从请求头中获取令牌
String token = request.getHeader(redisTokenProperties.getAdminTokenName());
log.info("jwt校验:{}", token);
if (token == null) {
InterceptorUtil.unLoginInterceptor(response);
return false;
}
try {
Object empId = redisTemplate.opsForValue().get(token);
log.info("当前员工ID:{}", empId);
if (empId == null) {
InterceptorUtil.customLoginInterceptor(response, MessageConstant.USER_TOKEN_OUT_OF_DATE, "");
return false;
}
// 3. 通过放行
BaseContext.setUserId(Long.valueOf(empId.toString()));
return true;
} catch (Exception exception) {
InterceptorUtil.customLoginInterceptor(response, exception.getMessage(), "");
return false;
}
}
配置类
让配置类继承WebMvcConfigurationSupport
@Configuration
@Slf4j
public class WebMvcConfiguration extends WebMvcConfigurationSupport{}
在配置类中注入拦截器RedisTokenAdminInterceptor
@Configuration
@Slf4j
public class WebMvcConfiguration extends WebMvcConfigurationSupport {
@Autowired
RedisTokenAdminInterceptor adminInterceptor;
/**
* 注册自定义拦截器
*
* @param registry InterceptorRegistry
*/
protected void addInterceptors(InterceptorRegistry registry) {
log.info("开始注册自定义拦截器...");
registry.addInterceptor(adminInterceptor).addPathPatterns("/admin/**")
.excludePathPatterns("/admin/employee/login");
}
}
添加需要拦截的