Token in Java generieren (super praktisch)

Generieren Sie Token (JWT) in Java

Heute werde ich Ihnen ein Beispiel für das Generieren von Token in Java vorstellen


Fügen Sie hier eine Bildbeschreibung ein

Plain und Plain-Blog Way 1:

Was ist JWT?

Json Web Token (JWT) ist ein offener JSON-basierter Standard ((RFC 7519)), der implementiert wird, um Ansprüche zwischen Webanwendungsumgebungen zu übertragen. Das Token ist kompakt und sicher und eignet sich besonders für verteilte Sites mit nur einem Standort. Anmelden (SSO) -Szenario. JWT-Anweisungen werden im Allgemeinen verwendet, um die authentifizierten Benutzeridentitätsinformationen zwischen dem Identitätsanbieter und dem Dienstanbieter zu übergeben, um Ressourcen vom Ressourcenserver abzurufen.


Innocent-Blog Way 2:

Token-Authentifizierungsmechanismus

Der tokenbasierte Authentifizierungsmechanismus ähnelt dem http-Protokoll und ist auch zustandslos. Auf der Serverseite müssen keine Benutzerauthentifizierungsinformationen oder Sitzungsinformationen gespeichert werden. Dies bedeutet, dass Anwendungen, die auf dem Tokenauthentifizierungsmechanismus basieren, nicht berücksichtigen müssen, auf welchem ​​Server sich der Benutzer anmeldet, was die Anwendungserweiterung erleichtert.

Der Prozess ist wie folgt:

1. Der Benutzer verwendet den Benutzernamen und das Kennwort, um den Server anzufordern.
2. Der Server überprüft die Benutzerinformationen.
3. Der Server sendet nach der Überprüfung ein Token an den Benutzer.
4. Der Client speichert das Token und hängt den Token-Wert an jede Anforderung an.
5. Der Server Überprüfen Sie den Token-Wert und geben Sie die Daten zurück


Plain und Plain-Blog Way 3:

Ich werde nicht mehr Unsinn sagen, der Code ist tief und flach, es ist möglich, ihn direkt zu verwenden, es dauert immer noch lange, bis man ihn wirklich versteht. Die gleiche Geduld ist auch erforderlich. Über JWT kann vage durch meinen Artikel gesehen werden, hauptsächlich der folgende Beispielcode, Sie können sich daran erinnern.

Code! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !

/**
     * 生成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);

    }

Erläuterung 1: Das UserToken im Code ist eine Entitätsklasse. Jeder hängt von Ihrem eigenen Unternehmen ab. Ich speichere einige Benutzerinformationen darin.

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 + '\'' +
                '}';
    }

Erläuterung 2: Der Code enthält auch eine CommonConstants-Klasse, bei der es sich tatsächlich um einige definierte Konstanten handelt. Außerdem ist der Weißpunkt tatsächlich ein fester Schlüsselwert. Wie in der folgenden Abbildung gezeigt: Alle entsprechen den Feldern in meinem userToken. Jeder entscheidet nach seinem eigenen Geschäft.

Fügen Sie hier eine Bildbeschreibung ein

Entschuldigung, ich habe vergessen mich darauf zu verlassen !!!

<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>

Dies ist das Ende dieses Artikels, in dem das Leben, die Aufnahmetechnologie, praktisch und praktisch aufgezeichnet werden, und wir hoffen, anderen Bloggern helfen zu können. Tschüss

Fügen Sie hier eine Bildbeschreibung ein

Ich denke du magst

Origin blog.csdn.net/m0_46379371/article/details/113243629
Empfohlen
Rangfolge