OncePerRequestFilter 是一个过滤器,每个请求都会执行一次;一般开发中主要是做检查是否已登录、Token是否过期和授权等操作,而每个操作都是一个过滤器,下面演示一下。
OncePerRequestFilter 使用 检查是否登录过期过滤器 import lombok.extern.slf4j.Slf4j;import org.springframework.stereotype.Component;import org.springframework.web.filter.OncePerRequestFilter;import javax.servlet.FilterChain;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;/*** 检查是否登录过期** @author francis* @create: 2023-08-30 16:45**/@Component@Slf4jpublic class JwtAuthenticationTokenFilter extends OncePerRequestFilter {@Overrideprotected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {log.info("进入 JwtAuthenticationTokenFilter ...");/*** 从 request 的 header 中拿出来 token*/String token = request.getHeader("token");if (token == null || token.isEmpty()) {// 没有携带 token 则 放行filterChain.doFilter(request, response);return;}/*** 检查 token 是否过期逻辑 .....*/// 放行filterChain.doFilter(request, response);}} 检查是否登录过期过滤器 import lombok.extern.slf4j.Slf4j;import org.springframework.stereotype.Component;import org.springframework.web.filter.OncePerRequestFilter;import javax.servlet.FilterChain;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;/*** 请求日志** @author francis* @create: 2023-08-31 10:15**/@Component@Slf4jpublic class OperationLogFilter extends OncePerRequestFilter {@Overrideprotected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {log.info("OperationLogFilter ...");/*** 操作日志记录 ...*/// 放行filterChain.doFilter(request, response);}} SecurityConfiguration 配置 import com.security.filter.JwtAuthenticationTokenFilter;import com.security.filter.OperationLogFilter;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.security.authentication.AuthenticationManager;import org.springframework.security.config.annotation.web.builders.HttpSecurity;import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;import org.springframework.security.config.http.SessionCreationPolicy;import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;/*** Security 配置类** @author francis* @create: 2023-08-30 14:19**/@Configuration@EnableWebSecuritypublic class SecurityConfiguration extends WebSecurityConfigurerAdapter {@Autowiredprivate JwtAuthenticationTokenFilter jwtAuthenticationTokenFilter;@Autowiredprivate OperationLogFilter operationLogFilter;@Overrideprotected void configure(HttpSecurity http) throws Exception {http// 关闭csrf.csrf().disable()// 不通过 Session 获取 SecurityContext.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and().authorizeRequests()// 对于登录接口 允许匿名访问.antMatchers("/login").permitAll()// 除上面外的所有请求全部需要鉴权认证.anyRequest().authenticated();// 在 UsernamePasswordAuthenticationFilter(验证用户) 之前执行// TODO 需要注意的是下面过滤器的顺序就是执行的顺序,使用 @Order 也没办法改变http// 登录是否过期.addFilterBefore(jwtAuthenticationTokenFilter, UsernamePasswordAuthenticationFilter.class)// 请求日志.addFilterBefore(operationLogFilter, UsernamePasswordAuthenticationFilter.class);}@Bean@Overridepublic AuthenticationManager authenticationManagerBean() throws Exception {return super.authenticationManagerBean();}} End【Spring Security】使用 OncePerRequestFilter 过滤器校验登录过期、请求日志等操作,小米9支持5g吗
cpugpu芯片开发光刻机
智能终端演进
4
文件名:【Spring Security】使用 OncePerRequestFilter 过滤器校验登录过期、请求日志等操作,小米9支持5g吗
【Spring Security】使用 OncePerRequestFilter 过滤器校验登录过期、请求日志等操作
文章目录 前言OncePerRequestFilter 使用检查是否登录过期过滤器检查是否登录过期过滤器 SecurityConfiguration 配置 前言
同类推荐
-

【PXIE301-211】基于PXIE总线的16路并行LVDS数据采集、4路低速、2路隔离RS422数据处理平台,QQ音乐2009
查看 -

【Proteus仿真】【51单片机】电蒸锅温度控制系统,酷派9960(51单片机智能电饭锅控制系统)
查看 -

【Qt】qDebug() 输出16进制数的几种方法,索爱k770i
查看 -

【Qt】对话框QDialog,cs单机版大灾变(qt 对话框)
查看 -

【Qt】获取当前系统用户名:9种获取方式,多普达手机游戏下载
查看 -

【Qt之QColor】,dv6-6029tx(qt v6)
查看 -

【Qt之Quick模块】1. 概述及Quick应用程序创建流程,ipad3发布
查看 -

【Qt开发流程】之容器类1-介绍及常用容器类和使用Java风格迭代器进行遍历,诺基亚n83
查看 -

【RK3399Pro学习笔记】七、ROS订阅者Subscriber的编程实现,索尼t90
查看