我应该用什么来代替旧的 Jwt 方法?

问题描述 投票:0回答:1
@Component
public class JwtTokenProvider {

    @Value("${petapp.app.secret}")
    private String APP_SECRET;
    @Value("${petapp.expires.in}")
    private Long EXPIRES_IN;

    public String generateJwtToken(Authentication auth){
        JwtUserDetails userDetails = (JwtUserDetails) auth.getPrincipal();
        Date expireDate = new Date(new Date().getTime() + EXPIRES_IN);
        return Jwts.builder().setSubject(Long.toString(userDetails.getId()))
                .setIssuedAt(new Date()).setExpiration(expireDate)
                .signWith(SignatureAlgorithm.HS512, APP_SECRET).compact();
    }

    Long getUserIdFromJwt(String token){
        Claims claims = Jwts.parser().setSigningKey(APP_SECRET).build().parseSignedClaims(token).getBody();
        return Long.parseLong(claims.getSubject());
    }

    boolean validateToken(String token){
        try{
            Jwts.parser().setSigningKey(APP_SECRET).build().parseSignedClaims(token);
            return !isTokenExpired(token);
        }catch(SignatureException | MalformedJwtException | ExpiredJwtException | UnsupportedJwtException |
               IllegalArgumentException e){
            return false;
        }
    }

    private boolean isTokenExpired(String token) {
        Date expiration = Jwts.parser().setSigningKey(APP_SECRET).build().parseSignedClaims(token).getBody().getExpiration();
        return expiration.before(new Date());
    }

}

我正在尝试创建一个用于登录和注册我的应用程序的身份验证系统。我正在使用旧资源来制作此代码部分。我可以注册成功,但无法登录系统。Yellow parts for deprecated methods.

spring spring-security jwt
1个回答
0
投票

在新版本的依赖项中,他们基本上放弃了

set
。所以而不是

Jwts.builder().setSubject(Long.toString(userDetails.getId()))
                .setIssuedAt(new Date()).setExpiration(expireDate)
                .signWith(SignatureAlgorithm.HS512, APP_SECRET).compact();

您使用:

Jwts.builder().subject(Long.toString(userDetails.getId()))
    .issuedAt(new Date()).expiration(expireDate)               
    .signWith(Keys.hmacShaKeyFor(APP_SECRET.getBytes())).compact();

来自我的一个演示项目的 github 链接,作为进一步的资源。

© www.soinside.com 2019 - 2024. All rights reserved.