一、配置拦截器
一、创建拦截器
-
1、使用@Component注解将拦截器注册到spring容器中
-
2、继承HandlerInterceptor接口并实现方法
-
3、preHandler方法中,返回true表示放行,返回false表示拦截
package com.yum.tlias.interceptor;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @author 星辰鱼
* @version 1.0
* @date 2023/4/11 12:29
*/
@Component
public class HelloInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("拦截器 HelloInterceptor preHandle");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("拦截器 HelloInterceptor postHandle");
}
@Override
//该方法将在整个请求结束之后,也就是在DispatcherServlet 渲染了对应的视图之后执行。
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("拦截器 HelloInterceptor afterCompletion");
}
}
二、注册拦截器
-
添加注解@Configuration
-
继承接口WebMvcConfigurer
-
重写方法addInterceptors
package com.yum.tlias.config;
import com.yum.tlias.interceptor.HelloInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* @author 星辰鱼
* @version 1.0
* @date 2023/4/11 12:36
*/
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Autowired
private HelloInterceptor helloInterceptor;
/**
* 添加拦截器
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(helloInterceptor)
//添加拦截的路径 /*表示拦截一级目录 /**表示拦截多级目录
.addPathPatterns("/emps/**", "/depts/**")
//添加放行的路径
.excludePathPatterns("/login", "/index");
}
}
二、创建本地线程
public class WmThreadLocalUtil {
private static final ThreadLocal<Integer> WM_THREAD_LOCAL = new ThreadLocal<>();
//设置用户ID
public static void setUserId(Integer userId){
WM_THREAD_LOCAL.set(userId);
}
//获取用户ID
public static Integer getUserId(){
return WM_THREAD_LOCAL.get();
}
//移除用户ID
public static void removeUserId(){
WM_THREAD_LOCAL.remove();
}
}