首先 需要导入需要的包
org.springframework spring-webmvc5.3.12 org.apache.tomcat.embed tomcat-embed-core9.0.54
拦截器注册才能使用
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
InterceptorRegistration registration = registry.addInterceptor(new LoginInterceptor());
WebMvcConfigurer.super.addInterceptors(registry);
InterceptorRegistration registration2 = registry.addInterceptor(new TestInterceptor2());
WebMvcConfigurer.super.addInterceptors(registry);
}
}
import com.test.common.core.constant.SecurityConstants;
import com.test.common.core.utils.JsonUtil;
import com.test.common.core.utils.ServletUtils;
import com.test.common.core.utils.StringUtils;
import com.test.common.security.utils.UserContext;
import com.test.user.api.model.LoginUser;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Enumeration;
import java.util.Optional;
@Slf4j
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
try {
Enumeration headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()) {
String e = headerNames.nextElement();
log.info("所有henaders: {}, value: {}", e, request.getHeader(e));
}
String loginUserData = request.getHeader(SecurityConstants.LOGIN_USER_DATA);
loginUserData = Optional.ofNullable(loginUserData).orElse("");
log.info("请求信息: attribute: {}, url:{}", ServletUtils.urlDecode(loginUserData), request.getRequestURI());
if (StringUtils.isNotEmpty(loginUserData)) {
UserContext.set(JsonUtil.from(ServletUtils.urlDecode(loginUserData), LoginUser.class));
}
}catch (Exception e) {
log.error("拦截器出现异常:", e);
return 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 {
//删除用户信息 释放内存
UserContext.clear();
}
}
import com.test.user.api.model.LoginUser;
import org.springframework.core.NamedThreadLocal;
public class UserContext {
private static final NamedThreadLocal THREAD_LOCAL = new NamedThreadLocal("LoginUserContextLocal");
public static void set(LoginUser user) {
THREAD_LOCAL.set(user);
}
public static LoginUser get() {
return THREAD_LOCAL.get();
}
public static void clear() {
THREAD_LOCAL.remove();
}
}



