实现基于JSON Web Token(JWT)的身份验证和授权

实现基于JSON Web Token(JWT)的身份验证和授权

实现基于JSON Web Token(JWT)的身份验证和授权通常涉及以下几个步骤:

添加依赖:

首先,您需要添加JWT库的依赖到您的项目中。常用的JWT库有jjwt(Java JWT)。

Maven依赖:

<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-api</artifactId>
    <version>0.11.2</version>
</dependency>
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-impl</artifactId>
    <version>0.11.2</version>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-jackson</artifactId>
    <version>0.11.2</version>
    <scope>runtime</scope>
</dependency>

Gradle依赖:

implementation 'io.jsonwebtoken:jjwt-api:0.11.2'
runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.11.2'
runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.11.2'

创建JWT工具类:

创建一个JWT工具类来生成和解析JWT令牌。

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.Date;

@Component
public class JwtUtils {

    @Value("${jwt.secret}")
    private String secret;

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

    public String generateToken(String username) {
        Date now = new Date();
        Date expiryDate = new Date(now.getTime() + expiration * 1000);

        return Jwts.builder()
                .setSubject(username)
                .setIssuedAt(now)
                .setExpiration(expiryDate)
                .signWith(SignatureAlgorithm.HS512, secret)
                .compact();
    }

    public String getUsernameFromToken(String token) {
        Claims claims = Jwts.parser()
                .setSigningKey(secret)
                .parseClaimsJws(token)
                .getBody();
        return claims.getSubject();
    }

    public boolean validateToken(String token) {
        try {
            Jwts.parser().setSigningKey(secret).parseClaimsJws(token);
            return true;
        } catch (Exception e) {
            return false;
        }
    }
}

配置JWT参数:

application.propertiesapplication.yml中配置JWT的密钥和过期时间等参数。

jwt.secret=yourSecretKey
jwt.expiration=3600
  1. 实现认证和授权逻辑:

    根据您的应用程序需求,实现认证和授权逻辑。在认证成功后,使用JWT工具类生成JWT令牌并返回给客户端。在需要进行授权的请求中,通过解析JWT令牌来验证用户身份和权限。

    例如,在Spring Security中,您可以使用JwtAuthenticationFilter来验证JWT令牌并在认证成功后将用户信息添加到Security上下文中。

  2. 在客户端使用JWT令牌:

    在客户端请求需要授权的资源时,将JWT令牌添加到请求的头部(通常是Authorization头部)中。

    RestTemplate restTemplate = new RestTemplate();
    HttpHeaders headers = new HttpHeaders();
    headers.set("Authorization", "Bearer " + jwtToken);
    HttpEntity<String> entity = new HttpEntity<>(headers);
    ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.GET, entity, String.class);
    

    通过以上步骤,您就可以实现基于JSON Web Token(JWT)的身份验证和授权。JWT令牌具有轻量、无状态、可扩展等优点,在前后端分离的应用中广泛应用于身份验证和授权。

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值