springboot token签名


使用JWT(JSON WEB TOKEN)工具, <artifactId>jjwt</artifactId>

 

生成token方式

package com.travelsky.auto.token; import com.travelsky.config.TokenConfig; import io.jsonwebtoken.*; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.authentication.BadCredentialsException; import org.springframework.stereotype.Component; import java.sql.Date; import java.time.LocalDateTime; import java.time.ZoneId; /** * token工厂 */ @Component @Slf4j public class TokenFactory { @Autowired private TokenConfig tokenConfig; /** * 生成token * @param key * @return
     */
    public TokenContent createToken(final String key) { final LocalDateTime now = LocalDateTime.now(); // Claims保存主题信息
        final Claims claims = Jwts.claims().setSubject(tokenConfig.getSubject()); final String token = Jwts.builder() // 设置信息
 .setClaims(claims) // 设置主体
 .setIssuer(tokenConfig.getIssuer()) // 设置创建时间
 .setIssuedAt(Date.from(now.atZone(ZoneId.systemDefault()).toInstant())) // 设置过期时间
 .setExpiration(Date.from(now.plusMinutes(tokenConfig.getExpiration()).atZone(ZoneId.systemDefault()).toInstant())) // 使用HS512加密
 .signWith(SignatureAlgorithm.HS512, key) // 生成字符串token
 .compact(); return new TokenContent(token, claims); }

 

根据前端取回的token进行验证方式

package com.travelsky.auto.token; import com.travelsky.config.TokenConfig; import io.jsonwebtoken.*; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.authentication.BadCredentialsException; import org.springframework.stereotype.Component; import java.sql.Date; import java.time.LocalDateTime; import java.time.ZoneId; /** * token工厂 */ @Component @Slf4j public class TokenFactory { @Autowired private TokenConfig tokenConfig; /** * 验证token * @param key 与subject一致 * @param token 页面传回的token字符串 */
    void parser(final String key, final String token) { try { // 验证token
 Jwts.parser().setSigningKey(key).parseClaimsJws(token); } catch (UnsupportedJwtException | MalformedJwtException | IllegalArgumentException | SignatureException ex) { log.error("不可用Invalid Token", ex); throw new BadCredentialsException("验证失败,Token不可用:Invalid token: ", ex); } catch (ExpiredJwtException expiredEx) { log.info("过期Token is expired", expiredEx); throw new ExpiredTokenException("token过期", expiredEx); } } }

 

token配置类

package com.travelsky.config; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration; @Configuration @Data @ConfigurationProperties(prefix = "token") public class TokenConfig { private String issuer; private Long expiration; private String subject; }

 

token配置文件

token: issuer: antlord expiration: 20 subject: token

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM