java单点登录token_单点登录(token,JWT)

一.什么事单点登录?

答:单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录能得到其他所有系统的信任。

二.单点登录三种常见方式:

1.session广播机制实现:即session复制

2.使用cookie+redis实现:

(1)在项目中任何一个模块进行登录,登录之后,把用户数据放到两个redis和cookie两个地方:

1>redis:在key :生成唯一随机值(ip,用户id等),value:用户数据

2>把redis里面生成的key值放到cookie里面。

(2)访问项目其他模块,发送请求带着cookie进行发送,获取cookie,拿着cookie值进行做事情:

1>获取到cookie值,到redis中进行查询,根据key值进行查询,如果查到用户数据就是登录。

3.使用token实现

token:按照一定的规则生成字符串,字符串可以包含用户信息(Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码)。

实现方式:

(1)在项目的某个模块进行登录,登录之后,按照一定的规则生成字符串,将用户数据放到字符串中,将字符串进行返回:

1>可以通过cookie进行返回

2>可以通过地址栏进行返回

(2)再访问项目中的其他模块,每次访问都在地址栏带着生成的字符串,在访问模块里面获取地址栏字符串,根据字符串获取用户信息,如果可以获取到,就是登录。

三.JWT是什么?

JWT:Json Web Token,是基于Json的一个公开规范,这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息,他的两大使用场景是:认证和数据交换

使用起来就是,由服务端根据规范生成一个令牌(token),并且发放给客户端。此时客户端请求服务端的时候就可以携带者令牌,以令牌来证明自己的身份信息。

简单来说,JWT就是已经定好了规则,可以使用JWT生成字符串,可以包含用户信息。

四.JWT的规则

eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOjYyNywiZXhwIjoxNTcwMDE0ODg1fQ.vPbQh4syxNCzkKXKPSM93LzzLqoJdzPDNeKz8tz9cFM4NzhIOdPrJcH2DG

-9-9MCUufCgrAhhGjuo85GKV4bOQ

1.JWT的头信息:

{'typ': 'JWT','alg': 'HS256'}

2.有效载荷:主体部分(包含用户信息)

3.签名哈希:防伪标志

五.JWT的使用

1.引入JWT依赖

io.jsonwebtoken

jjwt

2.编写JWT工具类

packagecom.atguigu.commonutils;importio.jsonwebtoken.Claims;importio.jsonwebtoken.Jws;importio.jsonwebtoken.Jwts;importio.jsonwebtoken.SignatureAlgorithm;importorg.springframework.http.server.reactive.ServerHttpRequest;importorg.springframework.util.StringUtils;importjavax.servlet.http.HttpServletRequest;importjava.util.Date;/***@authorhelen

*@since2019/10/16*/

public classJwtUtils {//定义两个常量//token的过期时间

public static final long EXPIRE = 1000 * 60 * 60 * 24;//秘钥

public static final String APP_SECRET = "ukc8BDbRigUDaY6pZFfWus2jZWLPHO";/*生成token字符串的方法*/

public staticString getJwtToken(String id, String nickname){

String JwtToken=Jwts.builder()//设置token的头信息

.setHeaderParam("typ", "JWT")

.setHeaderParam("alg", "HS256")//分类

.setSubject("guli-user")//设置token的过期时间

.setIssuedAt(newDate())

.setExpiration(new Date(System.currentTimeMillis() +EXPIRE))//设置token的主体信息,存储用户信息

.claim("id", id)

.claim("nickname", nickname)//设置签名哈希

.signWith(SignatureAlgorithm.HS256, APP_SEC

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值