SpringBoot案例总结(三)

1.登录校验的实现思路是怎样的?

实现思路:在访问资源前进行访问的拦截,判断你当前会话是否有登录,如果没有登录拒绝访问。如果是登录的那就可以进行访问资源。

2.会话技术有哪些方式可以实现?
 会话:用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断开连接,会话结束。在一次会话中可以包含多次请求和响应                                              

传统技术:使用Cookie(浏览器端)+Session(服务器端)实现会话,进行会话跟踪。
弊端:不能在集群服务中灵话使用,手机客户端无法支持Cookie。

令牌技术:
优点:可以在集群服务中灵活使用,移动端也可以支持。

3.JWT令牌组成部分有哪些,各自作用是什么?
  1. Header(头),作用:记录令牌类型、加密算法等;
  2. Payload(有效载荷),作用:存储一些令牌携带的用户信息,比如id,username,过期时间等
  3. Signature(签名),作用:防止Token(令牌)被篡改、确保安全性。

在这里插入图片描述

4. 怎么使用JWT令牌?(依赖,创建,校验)

1). pom.xml 引入jwt的依赖

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

2). 生成令牌

public class JwtDemo {

    @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() + 12*3600*1000)) //设置令牌的有效期
                .compact();
        System.out.println(jwt);
    }

}

3).解析令牌

    @Test
    public void parseJwt(){
        Claims claims = Jwts.parser()
                .setSigningKey("itheima")
            				.parseClaimsJws("eyJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwiZXhwIjoxNjU5OTk1NTE3LCJ1c2VybmFtZSI6IlRvbSJ9.EUTfeqPkGslekdKBezcWCe7a7xbcIIwB1MXlIccTMwo")
                .getBody();
        System.out.println(claims);
    }

注意事项:

  • JWT校验时使用的签名秘钥,必须和生成JWT令牌时使用的秘钥是配套的。
  • 如果JWT令牌解析校验时报错,则说明 JWT令牌被篡改 或 失效了,令牌非法。
5.项目中在什么时候去生成令牌?

在登录时生成令牌,在访问核心资源的时候进行令牌的校验

7.当前端携带令牌访问资源时怎么去拦截校验令牌的合法性?

需要在服务端统一拦截校验JWT令牌

两种手段实现:过滤器Filter、拦截器Interceptor。

8.过滤器具体使用的步骤是怎样的?

1). 定义类,实现 Filter接口,并重写doFilter方法

2). 配置Filter拦截资源的路径:在类上定义 @WebFilter 注解

3). 在doFilter方法中输出一句话,并放行

4). 在启动类上使用@ServletComponentScan 开启 Servlet 组件扫描

代码如下:
在这里插入图片描述

在这里插入图片描述

9.拦截器具体使用的步骤是怎样的?
  1. 定义拦截器,实现HandlerInterceptor接口,并重写其所有方法。在这里插入图片描述
  2. 注册拦截器
    在这里插入图片描述
10.项目中异常是怎么处理的?具体怎么实现?

方案一:在Controller的方法中进行try…catch处理 (代码过于臃肿)
方案二:全局异常处理器

全局异常处理的实现步骤
1、创建一个类用来专门处理异常,在类上面加上注解:@RestControllerAdvice
2、在里面写一个方法用来处理异常:该方法返回值类型用同一响应结果Result,还需要使用注解@ExceptionHandler去定义要处理的异常类型。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/2302_77094379/article/details/132154212