Generar Token en java (súper práctico)

Generar token (JWT) en java

Hoy compartiré contigo un ejemplo de generación de token en java.


Inserte la descripción de la imagen aquí

Forma simple y simple de blog 1:

Que es JWT

El token web Json (JWT) es un estándar abierto basado en JSON ((RFC 7519) implementado para transferir reclamos entre entornos de aplicaciones web. El token está diseñado para ser compacto y seguro, especialmente adecuado para sitios distribuidos de un solo sitio. Escenario (SSO). Las sentencias JWT se utilizan generalmente para pasar la información de identidad del usuario autenticado entre el proveedor de identidad y el proveedor de servicios para obtener recursos del servidor de recursos.


Innocent-Blog Way 2:

mecanismo de autenticación de token

El mecanismo de autenticación basado en token es similar al protocolo http y también no tiene estado, y no necesita retener información de autenticación de usuario o información de sesión en el lado del servidor. Esto significa que las aplicaciones basadas en el mecanismo de autenticación de token no necesitan considerar en qué servidor inicia sesión el usuario, lo que brinda comodidad para la expansión de la aplicación.

El proceso es así:

1. El usuario utiliza el nombre de usuario y la contraseña para solicitar el servidor
2. El servidor verifica la información del usuario
3. El servidor envía un token al usuario después de la verificación
4. El cliente almacena el token y adjunta el valor del token a cada solicitud
5. El servidor Verifica el valor del token y devuelve los datos


Modo de blog simple y simple 3:

No diré más tonterías, el código es profundo y superficial, es posible usarlo directamente, todavía se necesita mucho tiempo para entenderlo realmente. También se necesita la misma paciencia. Acerca de JWT se puede ver vagamente a través de mi artículo, principalmente el siguiente código de ejemplo, puede recordarlo.

¡Código! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !

/**
     * 生成token
     * @param userToken
     * @param expire
     * @return
     * @throws Exception
     */
    public static String generateToken(UserToken userToken, int expire) throws Exception {
    
    
        JwtClaims claims = new JwtClaims();
        claims.setSubject(userToken.getUsername());
        claims.setClaim(CommonConstants.CONTEXT_USER_ID,userToken.getUserId());
        claims.setClaim(CommonConstants.CONTEXT_NAME, userToken.getName());
        claims.setClaim(CommonConstants.CONTEXT_DEPT_ID, userToken.getDeptId());
        claims.setClaim(CommonConstants.CONTEXT_APPLICATION_ID, userToken.getApplicationId());
        claims.setExpirationTimeMinutesInTheFuture(expire == 0 ? 60*24 : expire);

        Key key = new HmacKey(CommonConstants.JWT_PRIVATE_KEY.getBytes("UTF-8"));

        JsonWebSignature jws = new JsonWebSignature();
        jws.setPayload(claims.toJson());
        jws.setAlgorithmHeaderValue(AlgorithmIdentifiers.HMAC_SHA256);
        jws.setKey(key);
        jws.setDoKeyValidation(false); // relaxes the key length requirement

        //签名
        String token = jws.getCompactSerialization();
        return token;
    }

    /**
     * 解析token
     * @param token
     * @return
     * @throws Exception
     */
    public static UserToken getInfoFromToken(String token) throws Exception {
    
    

        if (token == null) {
    
    
            return null;
        }

        Key key = new HmacKey(CommonConstants.JWT_PRIVATE_KEY.getBytes("UTF-8"));

        JwtConsumer jwtConsumer = new JwtConsumerBuilder()
                .setRequireExpirationTime()
                .setAllowedClockSkewInSeconds(30)
                .setRequireSubject()
                .setVerificationKey(key)
                .setRelaxVerificationKeyValidation() // relaxes key length requirement
                .build();

        JwtClaims processedClaims = jwtConsumer.processToClaims(token);

        return new UserToken(
                processedClaims.getSubject(),
                processedClaims.getClaimValue(CommonConstants.CONTEXT_USER_ID).toString(),
                processedClaims.getClaimValue(CommonConstants.CONTEXT_NAME).toString(),
                processedClaims.getClaimValue(CommonConstants.CONTEXT_DEPT_ID).toString(),
                processedClaims.getClaimValue(CommonConstants.CONTEXT_APPLICATION_ID).toString());
    }

    public static void main(String[] agars) throws Exception {
    
    
        UserToken userToken=new UserToken("admin","1","超级管理员名称","1","111111");
        String token = generateToken(userToken, 0);
        System.out.println(token);
        UserToken infoFromToken = getInfoFromToken(token);
        System.out.println(infoFromToken);

    }

Explicación 1: El UserToken en el código es una clase de entidad. Todos dependen de su propio negocio. Yo guardo información de usuario en él.

private static final long serialVersionUID = 1L;

    public UserToken(String username, String userId, String name) {
    
    
        this.userId = userId;
        this.username = username;
        this.name = name;
    }

    public UserToken(String username, String userId, String name, String deptId,String applicationId) {
    
    
        this.userId = userId;
        this.username = username;
        this.name = name;
        this.deptId = deptId;
        this.applicationId = applicationId;
    }

    /**
     * 用户id
     */
    private String userId;
    /**
     * 用户登录名
     */
    private String username;
    /**
     * 用户真实姓名
     */
    private String name;

    /**
     * 归属机构ID
     */
    private String deptId;

    /**
     * 应用ID
     */
    private String applicationId;

    public String getUserId() {
    
    
        return userId;
    }

    public void setUserId(String userId) {
    
    
        this.userId = userId;
    }

    public String getUsername() {
    
    
        return username;
    }

    public void setUsername(String username) {
    
    
        this.username = username;
    }

    public String getName() {
    
    
        return name;
    }

    public void setName(String name) {
    
    
        this.name = name;
    }

    public String getDeptId() {
    
    
        return deptId;
    }

    public void setDeptId(String deptId) {
    
    
        this.deptId = deptId;
    }

    public String getApplicationId() {
    
    
        return applicationId;
    }

    public void setApplicationId(String applicationId) {
    
    
        this.applicationId = applicationId;
    }

    @Override
    public String toString() {
    
    
        return "UserToken{" +
                "userId=" + userId +
                ", username='" + username + '\'' +
                ", name='" + name + '\'' +
                ", deptId='" + deptId + '\'' +
                ", applicationId='" + applicationId + '\'' +
                '}';
    }

Explicación 2: También hay una clase CommonConstants en el código, que en realidad son algunas constantes definidas. Además, el punto blanco es en realidad un valor clave fijo. Como se muestra en la siguiente figura: todos corresponden a los campos de mi userToken. Cada uno decide según sus propios asuntos.

Inserte la descripción de la imagen aquí

Lo siento, olvidé confiar en !!!

<dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>0.9.0</version>
        </dependency>
        <dependency>
            <groupId>org.bitbucket.b_c</groupId>
            <artifactId>jose4j</artifactId>
            <version>0.6.4</version>
        </dependency>

Este es el final de este artículo, grabando la vida, la tecnología de grabación, conveniente y práctica, y espero ayudar a otros bloggers. Adiós

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/m0_46379371/article/details/113243629
Recomendado
Clasificación