JavaWeb后端开发 JWT令牌解析 登录校验 通用模板/SpringBoot整合

实现思路

通过登录成功的标记来检测,在每个接口前做一个标记判断是否登录,若没登录则返回错误信息,并使前端退出.但这样较为繁琐,因此我们可以通过一种统一拦截的技术来拦截所有请求.

JavaWeb后端开发 JWT令牌解析 登录校验 通用模板/SpringBoot整合_第1张图片

JavaWeb后端开发 JWT令牌解析 登录校验 通用模板/SpringBoot整合_第2张图片

相关技术的解析

JavaWeb后端开发 JWT令牌解析 登录校验 通用模板/SpringBoot整合_第3张图片会话跟踪三个方案

1.访问cookie的值,在同一会话的不同请求之间共享数据

JavaWeb后端开发 JWT令牌解析 登录校验 通用模板/SpringBoot整合_第4张图片

JavaWeb后端开发 JWT令牌解析 登录校验 通用模板/SpringBoot整合_第5张图片

跨域:只要协议/IP地址/端口三个维度任何一个不同,就是跨域操作

2.session

JavaWeb后端开发 JWT令牌解析 登录校验 通用模板/SpringBoot整合_第6张图片

3.现代普遍采用的令牌技术--JWT令牌

JavaWeb后端开发 JWT令牌解析 登录校验 通用模板/SpringBoot整合_第7张图片

JWT令牌技术

一个令牌包含三个部分:头/有效载荷/签名:防止令牌被篡改

JavaWeb后端开发 JWT令牌解析 登录校验 通用模板/SpringBoot整合_第8张图片

两个步骤:生成令牌-校验令牌

JavaWeb后端开发 JWT令牌解析 登录校验 通用模板/SpringBoot整合_第9张图片生成令牌

1.引入依赖

JavaWeb后端开发 JWT令牌解析 登录校验 通用模板/SpringBoot整合_第10张图片

2.生成令牌

1.签名算法

2.自定义内容

3.令牌有效期

JavaWeb后端开发 JWT令牌解析 登录校验 通用模板/SpringBoot整合_第11张图片

@Test
	public void JwtTest()
	{
		Map claims = new HashMap<>();
		claims.put("id", 1);
		claims.put("name", "tom");
		/*此处负载的内容是id和姓名*/
		String jwt = Jwts.builder()
				/*设置签名算法*/
				.signWith(SignatureAlgorithm.HS256, "theresa")
				/*自定义内容(负载)*/
				.setClaims(claims)
				/*设置有效期为一小时*/
				.setExpiration(new Date(System.currentTimeMillis() + 3600 * 1000))
				.compact();

	}

校验令牌

报错的两种情况:过期/被篡改

.setSigningKey("theresa")填入和开始输入的一样,签名算法
.parseClaimsJws("")中填入要校验的令牌

public void ParseJwt(String jwt){
   //许可验证
        Claims claims = Jwts.parser()
                .setSigningKey(signKey)//传递签名
                .parseClaimsJws(jwt)//传递令牌
                .getBody();//得到内容
        System.out.println(claims);

    }

登录下发令牌

@PostMapping("/login")
    public Result login(@RequestBody Emp emp){
        log.info("员工登录:{}",emp);
        Emp e = empService.login(emp);

        //登录成功,生成令牌,下发令牌
        if(e != null)
        {
            Map claims = new HashMap<>();
            claims.put("id",e.getId());
            claims.put("name",e.getName());
            claims.put("username",e.getUsername());
            //包含当前登录的员工信息
            String jwt =  JwtUtils.JwtCreator(claims);
            return Result.success(jwt);
        }

        //登录失败,返回错误信息
        return Result.error("用户名或密码错误");
    }
}

你可能感兴趣的:(Spring,spring,boot,java,后端)