网站嵌入百度地图,驻马店市旅游网站建设,租车公司网站模板,阿里云企业邮箱入口登录校验的相关知识点 【1】会话技术1)会话:2)会话跟踪:3)常见的几种会话跟踪#xff1a; 【2】JWT令牌1)定义解释2#xff09;测试生成Jwt令牌并解析3#xff09;注意事项 【3】过滤器Filter1)过滤器工作原理如下#xff1a;2)简单使用示例3)自定义拦截路径4)疑问5)过滤器… 登录校验的相关知识点 【1】会话技术1)会话:2)会话跟踪:3)常见的几种会话跟踪 【2】JWT令牌1)定义解释2测试生成Jwt令牌并解析3注意事项 【3】过滤器Filter1)过滤器工作原理如下2)简单使用示例3)自定义拦截路径4)疑问5)过滤器链 【4】拦截器Interceptor1)定义理解2如何使用1定义拦截器实现Handlerlnterceptor接口并重写其所有方法2注册拦截器 3)拦截路径4拦截器的执行流程 【1】会话技术 前言也就是浏览器每一次的访问客户端就是一次独立的会话当是使用http协议这是无状态的也就是服务器不会保留关于客户端之前请求的任何信息。会话技术保留不同请求之间的数据共享从状态管理、而可以解决一些问题身份验证、数据一致性、状态管理 1)会话:
用户打开浏览器访问web服务器的资源会话建立直到有一方断开连接会话结束。在一次会话中可以包含多次请求和响应.
2)会话跟踪:
一种维护浏览器状态的方法服务器需要识别多次请求是否来自于同一浏览器以便在同一次会话的多次请求间共享数据。
3)常见的几种会话跟踪
客户端会话跟踪技术: Cookie 优点: HTTP协议中支持的技术缺点:移动端APP无法使用Cookie不安全用户可以自己禁用CookieCookie不能跨域 服务端跟踪技术:Session 优点:存储在服务端安全缺点:服务器集群环境下无法直接使用Session Cookie的缺点 令牌技术 优点 支持PC端、移动端解决集群环境下的认证问题减轻服务器端存储压力 http协议 HTTPHypertext Transfer Protocol协议是一种无状态协议。这意味着每个HTTP请求都是独立的服务器不会保留关于客户端之前请求的任何信息。在无状态的HTTP协议中服务器不能自动跟踪和管理客户端的状态。每次客户端发送请求时服务器都需要完整地处理该请求而不考虑之前的请求或状态。服务器不会记住客户端的身份、会话状态或其他上下文信息。
【2】JWT令牌
1)定义解释 全称:JSON Web Token JWT网址 定义了一种简洁的、自包含的格式用于在通信双方以ison数据格式安全的传输信息。由于数字签名的存在这些信息是可靠的 2测试生成Jwt令牌并解析
/*** 测试JWT令牌的生成*/Testpublic void testGenJwt(){MapString,Object claimsnew HashMap();claims.put(id,1);claims.put(name,hua);String jwtJwts.builder().signWith(SignatureAlgorithm.HS256,huahhh)//签名算法参数一编码算法类型参数二签名内容.setClaims(claims)//自定义内容载荷.setExpiration(new Date(System.currentTimeMillis()3600*1000)) // 设置有效期为1小时.compact();//得到字符串的JWT令牌System.out.println(jwt );}/*** 解析Jwt令牌*/Testpublic void testParseJwt(){Claims claims Jwts.parser()//设置签名密钥.setSigningKey(huahhh)//传入要解析的Jwt令牌.parseClaimsJws(eyJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoiaHVhIiwiaWQiOjEsImV4cCI6MTY5MzI3ODEyNX0.ZP-K8BAThdNMrIsYRE1O-IPdAayXwbb82kayK9ku-Js)//得到解析后的内容.getBody();System.out.println(claims);}
3注意事项 JWT校验时使用的签名秘钥必须和生成]WT令牌时使用的秘钥是配套的如果]WT令牌解析校验时报错则说明JWT令牌被篡改 或 失效了令牌非法。 【3】过滤器Filter 过滤器Filter是一种在Java Web应用程序中用于对HTTP请求进行预处理和后处理的组件。它可以在请求到达目标资源之前对请求进行修改、验证、记录或拦截并在响应返回给客户端之前对响应进行修改、处理或拦截。过滤器通常用于实现与请求和响应相关的共同功能如身份验证、日志记录、字符编码转换、跨域资源共享CORS处理等。通过使用过滤器可以在多个Servlet或JSP页面之间共享公共逻辑和处理流程提高代码的重用性和可维护性。 1)过滤器工作原理如下
当HTTP请求到达Web应用程序时服务器首先将请求发送给过滤器链中的第一个过滤器。过滤器对请求进行处理、修改或验证并决定是否将请求传递给下一个过滤器。如果有更多的过滤器存在请求将按照定义的顺序依次传递给下一个过滤器。最后一个过滤器将请求传递给目标资源如Servlet或JSP页面进行处理。处理完目标资源后请求经过相同的过滤器链返回但此时是按照相反的顺序通过过滤器对响应进行修改或处理。最终响应被发送给客户端。
2)简单使用示例
定义实现类实现filter接口
import jakarta.servlet.*;
import jakarta.servlet.annotation.WebFilter;import java.io.IOException;/*** 配置filter拦截器需要加上WebFilter(urlPatterns /*)。* 【1】/*表示拦截所有的请求* 【2】Filter是Java Servlet规范的一部分并不是Spring Boot框架的核心内容。需要在主类上加上注解ServletComponentScan*/
WebFilter(urlPatterns /*)
public class DemopFilter implements Filter {// 初始化方法在过滤器被创建时调用通常用于进行一些初始化操作,只调用一次Overridepublic void init(FilterConfig filterConfig) throws ServletException {Filter.super.init(filterConfig);System.out.println(init初始化方法执行了);}// 过滤方法在每次请求到达时调用可以对请求和响应进行处理可以调用多次Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {// 在这里编写过滤的逻辑和处理代码// 在调用filterChain.doFilter()方法之前可以对请求进行修改或拦截// 调用filterChain.doFilter()方法将请求传递给下一个过滤器或目标资源如Servlet或JSP页面/*** 放行*/filterChain.doFilter(servletRequest, servletResponse);// 在调用filterChain.doFilter()方法之后可以对响应进行修改或处理System.out.println(拦截到了请求);}// 销毁方法在过滤器被销毁时调用通常用于进行一些清理操作只调用一次Overridepublic void destroy() {Filter.super.destroy();System.out.println(destroy方法执行了);}
}
需要在主类上加上注解ServletComponentScan//开启了对Servlet组件的支持 import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;ServletComponentScan//开启了对Servlet组件的支持
SpringBootApplication
public class Web_Application {public static void main(String[] args) {SpringApplication.run(Web_Application .class, args);}}3)自定义拦截路径 4)疑问 放行后访问对应资源资源访问完成后还会回到Filter中吗?会如果回到Filter中是重新执行还是执行放行后的逻辑呢?执行放行后逻辑 5)过滤器链 过滤器链Filter Chain是由多个过滤器组成的链式结构用于按照特定的顺序依次对HTTP请求进行处理。当一个请求到达时它将依次经过所有注册在该过滤器链上的过滤器直到最后一个过滤器然后再按相反的顺序经过这些过滤器处理响应。 【4】拦截器Interceptor
1)定义理解 拦截器Interceptor是在Web开发中用于对请求进行预处理和后处理的一种机制。在Spring框架中拦截器是一种用于拦截HTTP请求和响应的组件可以在请求进入控制器之前和离开控制器之后执行特定的操作。 与过滤器不同拦截器是Spring框架提供的特性并且通常与Spring MVCModel-View-Controller一起使用用于对控制器的请求进行拦截和处理。拦截器主要用于实现以下功能 预处理在控制器方法执行之前可以进行一些预处理操作例如权限验证、数据准备或日志记录等。 后处理在控制器方法执行完成后可以对响应进行处理例如添加公共数据、渲染视图或记录响应时间等。 异常处理如果控制器方法抛出异常拦截器可以捕获并处理这些异常以进行统一的异常处理逻辑。 拦截器与过滤器的区别在于它们的运行位置和作用对象拦截器针对的是具体的控制器方法而过滤器则是针对URL路径的。拦截器更具有细粒度的控制能力可以对特定的控制器方法进行拦截和处理。 2如何使用
1定义拦截器实现Handlerlnterceptor接口并重写其所有方法 实现该类的时候需要在类上加上注解Component表示把该类的对象交给IOC容器管理方便注册拦截器的时候可以直接声明该变量。 import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;Component
public class LoginCheckInterceptor implements HandlerInterceptor {//日标资源方法运行前运行返回true: 放行可以执行控制层代码返回false 不放行Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println(preHandle......);return true;}//标资源方法运行后运行Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println(postHandle......);}//视图渲染完毕后运行最后运行Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println(afterCompletion......);}
}2注册拦截器
import com.example.interceptor.LoginCheckInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;/*** Configuration该注解表示是配置类*/
Configuration
public class WebConfig implements WebMvcConfigurer {//使用 Autowired 注解从 IOCInversion of Control容器中获取 LoginCheckInterceptor 的 bean 对象以便后续注册拦截器。Autowiredprivate LoginCheckInterceptor loginCheckInterceptor;//重写addInterceptors方法注册一个拦截器//使用 registry.addInterceptor 方法将 loginCheckInterceptor 拦截器添加到拦截器链中。//使用 addPathPatterns 方法指定拦截的路径规则。此处的 /* 表示拦截所有的请求路径。Overridepublic void addInterceptors(InterceptorRegistry registry) {//注册拦截器并拦截所有的路径请求资源registry.addInterceptor(loginCheckInterceptor).addPathPatterns(/**);}
}3)拦截路径 4拦截器的执行流程