学习笔记——Spring Boot web登录校验相关问题

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

        只是通过验证密码和用户名的方式登录是无法真正完成登录功能的,通过地址直接访问某项具体功能就会跳过登录界面。所以在完成基础的登录功能后,还需要进行登录校验。具体思路如下

        首先在用户登录成功后,将用户登录成功的信息存储起来,记录用户已经成功登录的标记。

        其次,在客户端向服务端发起请求时,需要在服务端进行统一拦截,然后读取登录标记中的信息,如果有登录成功的信息,就说明用户登陆成功,放过请求,如果没有登录标记,或者登录标记中的信息不正确,给客户端返回相应的错误信息,并且页面会跳转至登录界面,重新登陆。


2. 会话跟踪技术有哪些方式可以实现?

        会话就是服务端和客户端进行连接,知道其中一方断开连接,会话才会结束。通俗点来说,就是双方进行信息的交互,一方发送请求,一方给予回应。一次会话中,会有多个请求,多个响应。

        会话跟踪技术就是一种维护浏览器状态的方法。服务器需要识别多次请求是否来自于同一浏览器,来自于同一浏览器的,会在同一次会话中的多次请求间共享数据。服务器识别浏览器的过程就是会话跟踪。

        具体实现的方法有两种,一种是传统的方法,Cookie和Session配合使用。还有一种是令牌技术JWT。

3. JWT令牌组成部分有哪些,各自作用是什么?

分为三部分:

        第一部分:Header:记录令牌类型,签名算法等。

        第二部分:Payload:携带一些用户信息及过期时间等。

        第三部分:Signature:防止Token被篡改,确保安全性。


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

        第一步,引入依赖。

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

        第二步、创建一个JWT的工具类,用来生成JWT令牌。

 String jwt = Jwts.builder()
                .setClaims(claims) //执行第二部分负载, 存储的数据
                .signWith(SignatureAlgorithm.HS256, "miyao") //签名算法及秘钥
                .setExpiration(new Date(System.currentTimeMillis() + 12*3600*1000)) //设置令牌的有效期
                .compact();

        上图中,Jwts.builder()方法来构建JWT令牌。用setClaims存储数据,signWith是令牌的算法和密钥,setExpiration是为令牌设置有效期。最后用compact()方法来生成JWT令牌。得到的是一串字符串。

        第三步,在Controller层调用创建的工具类,将前端接受的数据,进行登陆判断。成功登录,生成JWT令牌,并回传个前端。后续在有请求时,前端会在请求头header中携带token到服务端,token的值就是登录是发送的令牌。通过对令牌的解析来成功与否进行校验判断,解析成功校验成功,解析失败,校验失败。

5. 项目中在什么时候去生成令牌?

        在登录阶段生成令牌。

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

        通过Filter过滤器或者Interceptor拦截器,把对资源的请求拦截下来,然后再对令牌的合法性进行校验。校验成功则通过,失败则返回登录界面。
7. 过滤器具体使用的步骤是怎样的?

        第一步、定义类,实现Filter接口,并重写doFilter方法

        第二步、配置资源拦截路径,具体方法:在Filter的实现类上定义@WebFilter注解。(/*,表示拦截所有路径)

@WebFilter(urlPatterns = "/*")

        第三步、在引导类上使用@ServletComponentScan注解,开启Servlet组件扫描。

8. 拦截器具体使用的步骤是怎样的?

        第一步、定义拦截器,实现HandlerInterceptor接口,重写其所有方法。

        第二步、注册拦截器。


9. 项目中异常是怎么处理的?具体怎么实现? 

        两种方法,第一种,在Controller的方法中进行try...catch处理,抓住异常。第二种是全局处理方案。

        第一种用try...catch把代码包起来就可以了,比较简单,要是处理的异常过多,就会导致代码过于臃肿。

        第二种全局处理方案,定义一个类,里面定义一个方法,用来接收所有异常。类上要定义@RestControllerAdvice注解,方法上面要定义个 @ExceptionHandler(Exception.class)注解。 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值