网关实现登陆校验(Spring Cloud Gateway)

Spring Cloud Gateway实现登陆校验与信息传递

完整实现步骤:JWT 网关校验 + 微服务信息传递

JWT网关校验:在网关层使用全局过滤器进行拦截
微服务信息传递:在微服务里面用拦截器拦截到信息,然后统一使用

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/10c5eb2f83ad4272bd0a0f70a11a4148.png![

一、技术选型说明
  • JWT 解析库推荐
    推荐使用 jjwt(Java JWT),它是 Java 生态中最流行的 JWT 库,具有以下优势:
    1. API 简洁:生成、解析 JWT 仅需几行代码。
    2. 安全性高:支持多种签名算法(如 HS512、RS256)。
    3. 社区活跃:长期维护,文档完善,与 Spring 兼容性好。

二、网关层实现 JWT 校验

1. 添加依赖

在网关模块的 pom.xml 中添加 jjwt 和必要依赖:

<!-- JJWT -->
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-api</artifactId>
    <version>0.11.5</version>
</dependency>
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-impl</artifactId>
    <version>0.11.5</version>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-jackson</artifactId>
    <version>0.11.5</version>
    <scope>runtime</scope>
</dependency>
2. 实现 JWT 工具类
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.security.Keys;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.security.Key;
import java.util.Date;

@Component
public class JwtUtils {
   
   

    @Value("${jwt.secret}")  // 从配置文件中读取密钥
    private String secret;

    @Value("${jwt.expiration}")
    private long expiration;

    private Key key;

    // 初始化密钥
    @PostConstruct
    public void init() {
   
   
        this.key = Keys.hmacShaKeyFor(secret.getBytes());
    }

    // 生成 JWT
    public String generateToken(String username, String roles) {
   
   
        return Jwts.builder()
                .setSubject(username)
                .claim("roles", roles)
                .setIssuedAt(new Date())
                .setExpiration(new Date(System.currentTimeMillis() + expiration))
                .signWith(key)
                .compact();
    }

    // 解析 JWT
    public Claims parseToken(String token) {
   
   
        return Jwts.parserBuilder()
                .setSigningKey(key)
                .build()
                .parseClaimsJws(token)
                .getBody();
    }

    // 验证 Token 是否过期
    public boolean isTokenExpired(String token) {
   
   
        return parseToken(token).getExpiration().before(new Date());
    }
}
3. 全局过滤器实现 JWT 校验
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatu
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值