登录校验笔记

 Http是无状态协议:

每一次请求都是独立的,下一次请求并不会携带上一次请求的数据

会话技术

用于同一浏览器的不同请求之间共享数据

会话跟踪:识别多次请求是否来自同一浏览器

客户端会话跟踪技术:Cookie

服务端会话跟踪技术:Session

令牌技术

JWT令牌

对JSON格式的数据进行了安全的封装

Claims类

是ASP.NET Core中的一个类,用于处理和验证身份验证令牌中的声明(claims)。声明是一组键值对,用于描述身份验证令牌的有关信息,例如用户的ID、姓名、角色等。Claims类可以让开发人员轻松地检索和操作身份验证令牌中的声明,以便进行身份验证和授权。

生成jwt令牌

可将输出的jwt令牌复制到 jwt官网 看看是不是想要的样子

报错:java.lang.IllegalArgumentException: secret key byte array cannot be null or empty.

可能是signWith的第二个参数长度太短,设置长一点的即可

解析jwt令牌

setSigningKey(签名密钥)中字符串要与signWith的第二个参数相同,parseClaimsJws中放入jwt令牌要用""引起来

Filter过滤器

注意:实现的Filter接口可以选择jakarta.servlet这个包,然后实现类中的方法,其中init()和destroy()方法都有默认实现,可自行选择是否实现,但是doFilter()方法必须实现

放行语句:filterChain.doFilter(servletRequest,servletResponse);

@WebFilter中urlPatterns

属性值为需要拦截的请求

执行流程:

过滤器链:

执行流程:

登录校验Filter_demo

流程图:

对应步骤:

具体实现:

HttpServletRequest对象

HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有信息。

HttpServletResponse类

如果需要设置返回给客户端的信息,可以通过HttpServletResponse对象来进行设置,他是通过流来给客户端传递数据的

HttpServletRequest.getRequestURL():

返回客户端发出请求时的完整URL

HttpServletRequest.getHeader(string name):

以 String 的形式返回指定请求头的值。如果该请求不包含指定名称的头,则此方法返回 null。如果有多个具有相同名称的头,则此方法返回请求中的第一个头。头名称是不区分大小写的。

StringUtils.hasLength()

方法可判断字符串是否为null或长度为0,导入的是spring的包

对象转JSON格式

引入依赖:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.83</version>
</dependency>

调用JSONObject.toJSONString()方法,可在不借用注解的情况下将对象转换为JSON格式的字符串

字符流:HttpServletResponse.getWriter().write("str");

可将字符串str传回前端

如果前端遇到中文乱码的情况,可以在获取的字符流前面调用HttpServletResponse.setContentType(text/html;charset=UTF-8),设置编码格式

jwt如果解析失败会抛出异常,在这里接住并处理

完整代码:

Interceptor拦截器

定义拦截器

目标资源方法即Controller层

Ctrl+O打开实现接口需要重写的方法面板

@Component将拦截器交给IOC容器管理

注册拦截器

@Configuration:放在类前,表明一个类是配置类

@Autowired注入拦截器

.addInterceptor()指定添加拦截器

.addPathPatterns()指定拦截资源

拦截器中指定所有资源为/**而不是/*

拦截路径:

拦截流程:

先由过滤器拦截,因为tomcat是一个servlet容器,识别servlet程序,不识别Controller程序,而在spring web环境中,提供了前端控制器--DispatcherServlet,由其将请求转给Controller程序,而请求又被中间的拦截器拦截

登录校验Interceptor_demo

流程图及步骤与Filter_demo相同,代码也只需要搬过来修改

需注意的是,是否放行逻辑改为return true/false;

方法参数类型不同,获取url,token以及写入字符流不再需要强转

具体代码如下:

 Filter与Interceptor

拦截器是由spring提供的

异常处理

防止因为出现的异常而导致返回给前端的结果格式不是统一的响应结果Result格式,而导致前端无法解析出现问题,因此定义全局异常处理器

声明一个java类,一般放在exception包中

@RestControllerAdvice:放在类前,表明类为全局异常处理器。@RestControllerAdvice=@ControllerAdvice+@ResponseBody

@ExceptionHandler:放在方法前,Value属性指定需要处理的异常类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值