登录验证

2024-01-07 21:42:52

会话技术

会话 打开浏览器,访问web服务器的资源,会话建立,直到有一方断开连接,会话结束。在一次会话中可以包含多次请求与响应

会话跟踪 一种维护浏览器的方法 服务器需要识别多次请求是否来自于同一浏览器 以便在同一次会话的多次请求间共享数据

会话跟踪方案?

? ? ? ? 客户端会话跟踪技术 Cookie

? ? ? ? 服务端会话跟踪技术 Session

? ? ? ? 令牌技术

JWT

Json Web Token

定义了一种简洁的,自包含的格式,用于在通信双方以json数据格式安全的传输信息。由于数字签名的存在,这些信息是可靠的

?组成

? ? ? ? 第一部分 header 头:记录令牌类型,签名算法等

? ? ? ? 第二部分 Payload 有效载荷:携带一些自定义信息,默认信息等

? ? ? ? 第三部分 Signature 签名:防止Token被修改,确保安全性。将header,Payload加入执行密匙,通过指定签名算法计算而来

?在pom.xml中引入JWT令牌依赖

        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>0.9.1</version>
        </dependency>

Jwt生成

@SpringBootTest
class SpringbootMybatisCrudApplicationTests {

    @Autowired
    private EmpMapper empMapper;

    @Test
    public void testGenJwt(){
        Map<String,Object>claims = new HashMap<>();
        claims.put("id",1);
        claims.put("name","tom");
        String jwt =  Jwts.builder()
                .signWith(SignatureAlgorithm.HS256,"awaw")//签名算法
                .setClaims(claims)//自定义内容(载荷)
                .setExpiration(new Date(System.currentTimeMillis() + 3600 * 10000))//有效期
                .compact();
        System.out.println(jwt);
    }
}

Jwt校验

Jwt检验时使用的签名秘钥,必须和生成Jwt令牌时使用的秘钥是配套的?

@SpringBootTest
class SpringbootMybatisCrudApplicationTests {

    @Autowired
    private EmpMapper empMapper;
    
    @Test
    public void testParseJwt(){
        Claims claims = Jwts.parser()
                .setSigningKey("awaw")//指定签名密匙
                .parseClaimsJws("eyJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoidG9tIiwiaWQiOjEsImV4cCI6MTcwNDY0NjU4OH0.EKF6hnJvMExOBaJHE71OZmQBN0Sbcc3sH9FHkBq8sDY")//解析令牌
                .getBody();
        System.out.println(claims);
    }
}

文章来源:https://blog.csdn.net/m0_72832574/article/details/135439559
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。