分布式Session

Posted yuefeng123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分布式Session相关的知识,希望对你有一定的参考价值。

方案一:采用redis集群

       架构:

        浏览器 ---> nginx ---> 应用集群 ---> redis集群

        首次登录时,服务器端生成token,存入redis,并将token返回给客户端(浏览器), 然后浏览器每次访问服务器端时都会携带token, 应用服务器携带token会访问redis集群,如果根据token查到用户相关信息,则说明是已登录状态

 代码略

 

-----------------------------------------------------------------------------------------------------------------------------------------------

 

方案二:采用JWT

     架构

     浏览器 ---> Nginx ---> 应用集群 ---> JWT

        首次登录时,服务器端通过Jwt加密算法生成token,并返回给客户端(浏览器),然后浏览器每次访问服务器端时都会携带token,应用服务器会通过Jwt解密算法对token进行解密操作,如果解密成功获取到用户相关信息,则说明是已登录状


package net.jwt.utils;

import io.jsonwebtoken.*;
import net.jwt.domain.User;

import java.util.Date;

public class JwtUtil

private static final String SUBJECT = "jiajing"; //发布者

private static final Long EXPIRE = 1000 * 60 * 60 * 24 * 7L;//一周后过期

private static final String APPSECRET = "jjjjj";//密钥
/**
* 生成jwt(加密)
* @return 返回token
*/
public static String createJsonWebJwt(User user)

String token = Jwts.builder().setSubject(SUBJECT)
.claim("id", user.getId()) //
.claim("name", user.getName())
.claim("phone", user.getPhone())
.setIssuedAt(new Date())
.setExpiration(new Date(System.currentTimeMillis() + EXPIRE))
.signWith(SignatureAlgorithm.HS256, APPSECRET)
.compact();
return token;



/**
* 校验token(解密)
* @param token
* @return
*/
public static Claims checkJwt(String token)
try
Claims claims = Jwts.parser().setSigningKey(APPSECRET)
.parseClaimsJws(token).getBody();
return claims;
catch (Exception e)
System.out.println("非法");

return null;




<!-- JWT相关 -->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.7.0</version>
</dependency>

以上是关于分布式Session的主要内容,如果未能解决你的问题,请参考以下文章

分布式session实现

分布式session共享

关于分布式Session 的几种实现方式

Spring Session解决分布式Session问题的实现原理

实战 用户登录session校验分布式存储session

什么是Session分布式共享