一、网关
1.拦截器Interceptor
public class UserInfoInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 1.获取请求头中的用户信息 String userInfo = request.getHeader("user-info"); if (StrUtil.isBlank(userInfo)) { // 没有用户信息,放行 return true; } // 2.保存到ThreadLocal UserContext.setUser(Long.valueOf(userInfo)); // 3.放行 return true; } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { // 移除用户 UserContext.removeUser(); } }继承handlerinterceptor,实现俩个方法pre在controller之前。
注册拦截器
@Configuration public class MvcConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new UserInfoInterceptor()); } }此时配置类只在当前模块下生效,,要想在其他模块下使用必须被spring扫描包扫到。在resource下的注册xml写上
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.hmall.common.config.MyBatisConfig,\ com.hmall.common.config.MqConfig,\ com.hmall.common.config.MvcConfig此时运行gateway报错。此时配置类在网关类生效。但网关不是springmvc的类,采用spring自动装配的原理条件配置springmvc的核心类
@ConditionalOnClass(DispatcherServlet.class)
@ConditionalOnClass(DispatcherServlet.class)