1. 前言
微服务下架构下,借助JWT和Spring Gateway过滤器进行统一用户认证,并通过拦截器解析用户携带Token获取当前用户信息存储到ThreadLocal方便业务模块使用
2. 服务架构
主要包含四个模块,使用Nacos作为注册和配置中心
服务 | 类型 | 端口 | 描述 |
---|---|---|---|
jtool-gateway | gateway | 8080 | 网关,用作接口转发和认证 |
jtool-security | authentication | 8083 | 用户认证 |
jtool-template | service | 8081 | 业务模块1 |
jtool-demo | service | 8082 | 业务模块2 |
3. 网关过滤器
处于白名单中的接口不需要认证,直接转发(比如/login接口,网关会转发到security模块),非白名单接口需要解析request携带的token,若token合法,将解析token获取的用户名放到request中转发到指定接口即可
@Component
@Import(IgnoreUrlsConfig.class)
public class AuthenticationFilter implements GlobalFilter, Ordered {
@Autowired
private IgnoreUrlsConfig ignoreUrlsConfig;
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
ServerHttpRequest request = exchang