/**
** 自定义拦截器
**/
@Component
public class MyInterceptor implements HandlerInterceptor { //实现原生拦截器的接口
@Autowired
private RedisTemplate redisTemplate;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
if(request.getHeader("token")!=null){
redisTemplate.expire(request.getHeader("token"), 30, TimeUnit.MINUTES);
}
//进行逻辑判断,如果ok就返回true,不行就返回false,返回false就不会处理改请求
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
}
}
/**
** 拦截器配置
/
@Configuration
public class InterceptorConfig extends WebMvcConfigurationSupport {
// 以下WebMvcConfigurerAdapter 比较常用的重写接口
// / 添加拦截器 /
// void addInterceptors(InterceptorRegistry registry);
// / 这里配置视图解析器 /
// void configureViewResolvers(ViewResolverRegistry registry);
// / 配置内容裁决的一些选项 /
// void configureContentNegotiation(ContentNegotiationConfigurer configurer);
// / 视图跳转控制器 /
// void addViewControllers(ViewControllerRegistry registry);
// / 静态资源处理 /
// void addResourceHandlers(ResourceHandlerRegistry registry);
// / 默认静态资源处理器 **/
// void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer);
@Autowired
private MyInterceptor interceptor;
/**
*
* 功能描述:
* 配置静态资源,避免静态资源请求被拦截
*/
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**")
.addResourceLocations("classpath:/static/");
registry.addResourceHandler("/templates/**")
.addResourceLocations("classpath:/templates/");
super.addResourceHandlers(registry);
}
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(interceptor)
//addPathPatterns 用于添加拦截规则
.addPathPatterns("/**")
//excludePathPatterns 用于排除拦截
//项目启动测试接口
.excludePathPatterns("/")
//获取用户详情
.excludePathPatterns("/getUers");
super.addInterceptors(registry);
}
/** 解决跨域问题 **/
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")// 允许跨域访问的路径
.allowedOrigins("*")// 允许跨域访问的源
.allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE")// 允许请求方法
.maxAge(168000)// 预检间隔时间
.allowedHeaders("*")// 允许头部设置
.allowCredentials(true);// 是否发送cookie
}
}