JWT(Json Web Token)是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源。比如用在用户登录上。
JWT最重要的作用就是对 token信息的防伪 作用。
JWT的原理:
一个JWT由三个部分组成:公共部分、私有部分、签名部分。最后由这三者组合进行base64编码得到JWT。
公共部分
主要是该JWT的相关配置参数,比如签名的加密算法、格式类型、过期时间等等。
Key=ATGUIGU
2.私有部分
用户自定义的内容,根据实际需要真正要封装的信息。
userInfo{用户的Id,用户的昵称nickName}
3.签名部分
SaltiP: 当前服务器的Ip地址!{linux 中配置代理服务器的ip}
主要用户对JWT生成字符串的时候,进行加密{盐值}
最终组成 key+salt+userInfo----》token!
base64编码,并不是加密,只是把明文信息变成了不可见的字符串。但是其实只要用一些工具就可以把base64编码解成明文,所以不要在JWT中放入涉及私密的信息。
springboot整合jwt步骤:
首先引入依赖:
< dependency > < groupId > io.jsonwebtoken </ groupId > < artifactId > jjwt </ artifactId > </ dependency >
然后在util包里面编写JwtHelper工具类:
public class JwtHelper { private static long tokenExpiration = 24 * 60 * 60 * 1000 ; private static String tokenSignKey = "123456" ;
public static String createToken(Long userId, String userName) { String token = Jwts. builder () .setSubject( "HAS" ) .setExpiration( new Date(System. currentTimeMillis () + tokenExpiration )) .claim( "userId" , userId) .claim( "userName" , userName) .signWith(SignatureAlgorithm. HS512 , tokenSignKey ) .compressWith(CompressionCodecs. GZIP ) .compact(); return token; } public static Long getUserId(String token) { if (StringUtils. isEmpty (token)) return null ; Jws<Claims> claimsJws = Jwts. parser ().setSigningKey( tokenSignKey ).parseClaimsJws(token); Claims claims = claimsJws.getBody(); Integer userId = (Integer)claims.get( "userId" ); return userId.longValue(); } public static String getUserName(String token) { if (StringUtils. isEmpty (token)) return "" ; Jws<Claims> claimsJws
= Jwts. parser ().setSigningKey( tokenSignKey ).parseClaimsJws(token); Claims claims = claimsJws.getBody(); return (String)claims.get( "userName" ); } public static void main(String[] args) { String token = JwtHelper. createToken ( 1L , "55" ); System. out .println(token); System. out .println(JwtHelper. getUserId (token)); System. out .println(JwtHelper. getUserName (token)); } }
注意:helper类中userId、userName根据自己业务进行修改即可