网关传递用户
如何传递用户
使用自定义拦截器拦截请求
// 传递用户到下游服务 【保存在header里面】
String userinfo = userId.toString();
exchange.mutate()
.request(builder -> builder.header("user-info", userinfo))
.build();
return chain.filter(exchange);
注意:这个拦截在其他的服务里面使用,可以将其封装到hm-common里面
1、hm-common模块文件目录结构
2、封装拦截器
package com.hmall.common.interceptor;
import cn.hutool.core.util.StrUtil;
import com.hmall.common.utils.UserContext;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class UserInfoInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String userInfo = request.getHeader("user-info"); // user-info
System.out.println("userInfo:::" + userInfo);
if(StrUtil.isNotBlank(userInfo)){
UserContext.setUser(Long.valueOf(userInfo));
}
return true;
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
UserContext.removeUser();
}
}
3、拦截器的注册
注意拦截器需要注册才能使用,创建一个配置类继承WebMvcConfigurer,注入拦截器
package com.hmall.common.config;
import com.hmall.common.interceptor.UserInfoInterceptor;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.DispatcherServlet;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
@ConditionalOnClass(DispatcherServlet.class)
public class MvcConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new UserInfoInterceptor());
}
}
4、将拦截器实现装配
在src/main/resources/META-INF/spring.factories 问价下面进行配置。
org.springframework.boot.autoconfigure.EnableAutoConfiguration=
com.hmall.common.config.MyBatisConfig,
com.hmall.common.config.JsonConfig,
com.hmall.common.config.MvcConfig
认识spring.factories文件
spring.factories 是一个标准的Spring Framework配置文件,它用于指定Spring应用程序中要加载的类或配置的位置。
具体来说,spring.factories 文件通常用于以下两个目的:
总结,src/main/resources/META-INF/spring.factories 是一个用于配置Spring应用程序中自动装配和插件扩展的重要文件。在具体的项目中,其作用和用途可能有所不同,具体要根据使用的框架或库来确定。
5、拦截器使用截图
userInfo:::3
UserContext.getUser() 购物车。。。。。= 3