java怎么实现token生成和验证

什么是Token?

Token(令牌)是一种用于身份验证和授权的字符串,通常在客户端和服务器之间传递,Token可以是JSON Web Token(JWT)、OAuth 2.0 Bearer Token等形式,Token的主要作用是在用户登录后,将用户的唯一标识(如用户ID)存储在客户端,以便在后续的请求中进行身份验证,这样,服务器就可以根据Token判断用户是否具有访问特定资源的权限。

Java实现Token生成

1、JWT(JSON Web Token)

java怎么实现token生成和验证

JWT是一种基于JSON的开放标准(RFC 7519),用于在网络上安全地传输信息,JWT由三部分组成:头部(Header)、载荷(Payload)和签名(Signature),头部包含令牌类型和过期时间等信息,载荷包含用户信息,签名用于验证令牌的完整性和真实性。

下面是一个简单的Java代码示例,使用jjwt库生成JWT Token:

import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
public class JwtUtil {
    private static final String SECRET_KEY = "your_secret_key";
    public static String generateToken(String username) {
        long currentTimeMillis = System.currentTimeMillis();
        Date now = new Date(currentTimeMillis);
        Date expiration = new Date(currentTimeMillis + 3600 * 1000); // 设置过期时间为1小时
        return Jwts.builder()
                .setSubject(username)
                .setIssuedAt(now)
                .setExpiration(expiration)
                .signWith(SignatureAlgorithm.HS512, SECRET_KEY)
                .compact();
    }
}

2、OAuth 2.0 Bearer Token

java怎么实现token生成和验证

OAuth 2.0 Bearer Token是一种授权框架,允许用户授权第三方应用访问其资源,Bearer Token是一种简单的授权机制,它只是在HTTP请求头中添加一个名为"Authorization"的字段,其值为"Bearer "加上Token。

下面是一个简单的Java代码示例,使用Spring Security库生成OAuth 2.0 Bearer Token:

import org.springframework.security.oauth2.common.DefaultOAuth2AccessToken;
import org.springframework.security.oauth2.provider.OAuth2Authentication;
import org.springframework.security.oauth2.provider.token.TokenStore;
import org.springframework.security.oauth2.provider.token.store.InMemoryTokenStore;
import org.springframework.security.oauth2.provider.token.UsernamePasswordAuthenticationToken;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
@Service
public class OAuth2TokenService {
    private final TokenStore tokenStore = new InMemoryTokenStore();
    public String generateAccessToken(OAuth2Authentication authentication) {
        Map<String, Object> additionalInfo = new HashMap<>();
        additionalInfo.put("scope", "read"); // 可以自定义权限范围
        String accessToken = generateAccessToken(authentication, additionalInfo);
        saveAccessToken(accessToken, authentication); // 将Token存储到内存中,实际应用中可以使用数据库存储
        return accessToken;
    }
    private String generateAccessToken(OAuth2Authentication authentication, Map<String, Object> additionalInfo) {
        String accessToken = generateAccessTokenValue(); // 由OAuth2ProviderDetails配置类生成唯一的Token值
        DefaultOAuth2AccessToken token = new DefaultOAuth\u0026lt;>(accessToken, authentication); // 将Token和认证信息封装成DefaultOAuth2AccessToken对象
        token.setAdditionalInformation(additionalInfo); // 将额外信息添加到Token中
        return accessToken;
    }
}

Java实现Token验证

1、JWT验证

java怎么实现token生成和验证

要验证JWT Token,可以使用jjwt库提供的JwtParser类解析Token,然后检查其签名是否正确,以下是一个简单的Java代码示例:

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jws;
import io.jsonwebtoken.JwtException;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind

原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/192169.html

Like (0)
Donate 微信扫一扫 微信扫一扫
K-seo的头像K-seoSEO优化员
Previous 2024-01-02 15:32
Next 2024-01-02 15:34

相关推荐

  • php access_token

    PHP中的access_token通常用于API鉴权,确保请求的安全性。

    2024-02-11
    0207
  • Token和Cookie的区别

    Token和Cookie是两种常见的用户身份验证和状态管理的方法,它们在Web开发中被广泛使用,尽管它们有一些相似之处,但它们的用途、工作方式和使用场景却有很大的不同,本文将详细介绍Token和Cookie的区别,并解释为什么在某些情况下,选择使用其中一种方法而不是另一种方法可能会更加有效。我们来看看Token,Token是一种无状态……

    2023-12-09
    0149
  • publickey token

    这段内容是关于公钥令牌的。公钥令牌是一种安全机制,用于验证用户身份和授权访问。它通过使用公钥加密技术来确保只有持有有效密钥的用户才能访问受保护的资源。

    2024-02-19
    0160
  • vue如何获取header里面的值

    在Vue中,可以通过this.$http.headers获取header的值。

    2024-01-20
    0321
  • vue单点登录的实现方式

    单点登录简介单点登录(Single Sign-On,简称SSO)是一种身份验证技术,允许用户使用一组凭据(如用户名和密码或数字证书)在多个应用程序之间进行身份验证,这样,用户只需登录一次,就可以访问所有关联的应用程序,无需再次为每个应用程序单独登录,Vue页面实现单点登录的方法有很多,本文将介绍一种基于OAuth2.0协议的实现方法。……

    2024-01-19
    0184
  • C语言strtok函数的用法有哪些

    C语言中的strtok函数是一个常用的字符串处理函数,主要用于将一个字符串按照指定的分隔符进行分割,得到一个字符串数组,这个函数在很多程序中都有应用,比如解析命令行参数、处理文件路径等,下面我们来详细介绍一下strtok函数的用法。1、strtok函数的基本用法strtok函数的原型如下:char *strtok(char *str,……

    2024-01-25
    0209

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

免备案 高防CDN 无视CC/DDOS攻击 限时秒杀,10元即可体验  (专业解决各类攻击)>>点击进入