会话跟踪令牌技术

1.如果通过令牌技术来跟踪会话,我们就可以在浏览器发起请求。在请求登录接口的时候,如果登录成 功,我就可以生成一个令牌,令牌就是用户的合法身份凭证。接下来我在响应数据的时候,我就可以直 接将令牌响应给前端。
1.接下来我们在前端程序当中接收到令牌之后,就需要将这个令牌存储起来。这个存储可以存储在
cookie 当中,也可以存储在其他的存储空间 ( 比如: localStorage) 当中。
接下来,在后续的每一次请求当中,都需要将令牌携带到服务端。携带到服务端之后,接下来我们就需要来校验令牌的有效性。如果令牌是有效的,就说明用户已经执行了登录操作,如果令牌是无效的,就 说明用户之前并未执行登录操作。 此时,如果是在同一次会话的多次请求之间,我们想共享数据,我们就可以将共享的数据存储在令牌当 中就可以了。
优缺点
优点:
支持 PC 端、移动端
解决集群环境下的认证问题
减轻服务器的存储压力(无需在服务器端存储)
缺点:需要自己实现(包括令牌的生成、令牌的传递、令牌的校验)
io.jsonwebtoken
jjwt
0.9.1
生成 JWT 代码实现:
@Test
public void genJwt (){
Map < String , Object > claims = new HashMap <> ();
claims . put ( "id" , 1 );
claims . put ( "username" , "Tom" );
String jwt = Jwts . builder ()
. setClaims ( claims ) // 自定义内容 ( 载荷 )
. signWith ( SignatureAlgorithm . HS256 , "itheima" ) // 签名算法
. setExpiration ( new Date ( System . currentTimeMillis () +
24 * 3600 * 1000 )) // 有效期
. compact ();
System . out . println ( jwt );
实现了 JWT 令牌的生成,下面我们接着使用 Java 代码来校验 JWT 令牌 ( 解析生成的令牌 )
@Test
public void parseJwt (){
Claims claims = Jwts . parser ()
. setSigningKey ( "itheima" ) // 指定签名密钥(必须保证和生成令牌时使用
相同的签名密钥)
. parseClaimsJws ( "eyJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwiZXhwIjoxNjcyNzI5NzMw
fQ.fHi0Ub8npbyt71UqLXDdLyipptLgxBUg_mSuGJtXtBk" )
. getBody ();
System . out . println ( claims );
}

你可能感兴趣的:(java)