最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring Security 使用 OncePerRequestFilter 過(guò)濾器校驗(yàn)登錄過(guò)期、請(qǐng)求日志等操作

 更新時(shí)間:2024年06月26日 11:36:54   作者:杜小舟  
OncePerRequestFilter是一個(gè)過(guò)濾器,每個(gè)請(qǐng)求都會(huì)執(zhí)行一次;一般開(kāi)發(fā)中主要是做檢查是否已登錄、Token是否過(guò)期和授權(quán)等操作,而每個(gè)操作都是一個(gè)過(guò)濾器,下面介紹Spring Security 使用 OncePerRequestFilter 過(guò)濾器校驗(yàn)登錄過(guò)期、請(qǐng)求日志等操作方法,感興趣的朋友一起看看吧

前言

OncePerRequestFilter 是一個(gè)過(guò)濾器,每個(gè)請(qǐng)求都會(huì)執(zhí)行一次;一般開(kāi)發(fā)中主要是做檢查是否已登錄、Token是否過(guò)期和授權(quán)等操作,而每個(gè)操作都是一個(gè)過(guò)濾器,下面演示一下。

OncePerRequestFilter 使用

檢查是否登錄過(guò)期過(guò)濾器

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;
/**
 * 檢查是否登錄過(guò)期
 *
 * @author francis
 * @create: 2023-08-30 16:45
 **/
@Component
@Slf4j
public class JwtAuthenticationTokenFilter extends OncePerRequestFilter {
    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
        log.info("進(jìn)入 JwtAuthenticationTokenFilter ...");
        /**
         * 從 request 的 header 中拿出來(lái) token
         */
        String token = request.getHeader("token");
        if (token == null || token.isEmpty()) {
            // 沒(méi)有攜帶 token 則 放行
            filterChain.doFilter(request, response);
            return;
        }
        /**
         * 檢查 token 是否過(guò)期邏輯 .....
         */
        // 放行
        filterChain.doFilter(request, response);
    }
}

檢查是否登錄過(guò)期過(guò)濾器

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;
/**
 * 請(qǐng)求日志
 *
 * @author francis
 * @create: 2023-08-31 10:15
 **/
@Component
@Slf4j
public class OperationLogFilter extends OncePerRequestFilter {
    @Override
    protected 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
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
    @Autowired
    private JwtAuthenticationTokenFilter jwtAuthenticationTokenFilter;
    @Autowired
    private OperationLogFilter operationLogFilter;
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                // 關(guān)閉csrf
                .csrf().disable()
                // 不通過(guò) Session 獲取 SecurityContext
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                .and()
                    .authorizeRequests()
                        // 對(duì)于登錄接口 允許匿名訪問(wèn)
                        .antMatchers("/login")
                            .permitAll()
                        // 除上面外的所有請(qǐng)求全部需要鑒權(quán)認(rèn)證
                        .anyRequest()
                            .authenticated();
        // 在 UsernamePasswordAuthenticationFilter(驗(yàn)證用戶) 之前執(zhí)行
        // TODO 需要注意的是下面過(guò)濾器的順序就是執(zhí)行的順序,使用 @Order 也沒(méi)辦法改變
        http
        		// 登錄是否過(guò)期
                .addFilterBefore(jwtAuthenticationTokenFilter, UsernamePasswordAuthenticationFilter.class)
                // 請(qǐng)求日志
                .addFilterBefore(operationLogFilter, UsernamePasswordAuthenticationFilter.class);
    }
    @Bean
    @Override
    public AuthenticationManager authenticationManagerBean() throws Exception {
        return super.authenticationManagerBean();
    }
}

到此這篇關(guān)于Spring Security 使用 OncePerRequestFilter 過(guò)濾器校驗(yàn)登錄過(guò)期、請(qǐng)求日志等操作的文章就介紹到這了,更多相關(guān)Spring Security OncePerRequestFilter 過(guò)濾器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • PowerJob的AliOssService工作流程源碼解讀

    PowerJob的AliOssService工作流程源碼解讀

    這篇文章主要介紹了PowerJob的AliOssServiceg工作流程源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • SpringBoot YAML語(yǔ)法基礎(chǔ)詳細(xì)整理

    SpringBoot YAML語(yǔ)法基礎(chǔ)詳細(xì)整理

    YAML 是 “YAML Ain’t Markup Language”(YAML 不是一種標(biāo)記語(yǔ)言)的遞歸縮寫(xiě)。在開(kāi)發(fā)的這種語(yǔ)言時(shí),YAML 的意思其實(shí)是:“Yet Another Markup Language”(仍是一種標(biāo)記語(yǔ)言),本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • IDEA生成javadoc的實(shí)現(xiàn)步驟

    IDEA生成javadoc的實(shí)現(xiàn)步驟

    Javadoc是一種用于生成API文檔的工具,它可以根據(jù)代碼中特定格式的注釋自動(dòng)生成文檔,本文主要介紹了IDEA生成javadoc的實(shí)現(xiàn)步驟,感興趣的可以了解一下
    2023-10-10
  • maven項(xiàng)目install時(shí)忽略執(zhí)行test方法的總結(jié)

    maven項(xiàng)目install時(shí)忽略執(zhí)行test方法的總結(jié)

    這篇文章主要介紹了maven項(xiàng)目install時(shí)忽略執(zhí)行test方法的總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • C# TreeNode案例詳解

    C# TreeNode案例詳解

    這篇文章主要介紹了C# TreeNode案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • JVM 方法調(diào)用之動(dòng)態(tài)分派(詳解)

    JVM 方法調(diào)用之動(dòng)態(tài)分派(詳解)

    下面小編就為大家?guī)?lái)一篇JVM 方法調(diào)用之動(dòng)態(tài)分派(詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • 基于java中子類的繼承性的應(yīng)用介紹

    基于java中子類的繼承性的應(yīng)用介紹

    本篇介紹了,基于java中子類的繼承性的應(yīng)用。需要的朋友參考下
    2013-05-05
  • Spring?Cloud?Gateway實(shí)現(xiàn)零拷貝參數(shù)校驗(yàn)的完整指南

    Spring?Cloud?Gateway實(shí)現(xiàn)零拷貝參數(shù)校驗(yàn)的完整指南

    本文將深入探討在?Spring?Cloud?Gateway?中實(shí)現(xiàn)零拷貝參數(shù)校驗(yàn)的完整方案,從問(wèn)題背景、設(shè)計(jì)思路到具體實(shí)現(xiàn),提供可落地的實(shí)踐指導(dǎo),需要的朋友可以參考下
    2026-04-04
  • Spring Cloud Data Flow初體驗(yàn)以Local模式運(yùn)行

    Spring Cloud Data Flow初體驗(yàn)以Local模式運(yùn)行

    這篇文章主要介紹了Spring Cloud Data Flow初體驗(yàn)以Local模式運(yùn)行,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Springboot項(xiàng)目中使用EasyPOI操作Excel的詳細(xì)教程

    Springboot項(xiàng)目中使用EasyPOI操作Excel的詳細(xì)教程

    EasyPOI簡(jiǎn)介:EasyPOI是一款用于簡(jiǎn)化POI開(kāi)發(fā)的類庫(kù),它提供了Excel、CSV、Word的快速導(dǎo)入導(dǎo)出功能,文章詳細(xì)介紹了如何使用EasyPOI進(jìn)行注解方式導(dǎo)出和導(dǎo)入Excel,以及模板方式導(dǎo)出Excel,同時(shí),還簡(jiǎn)要介紹了CSV的導(dǎo)出方式
    2026-01-01

最新評(píng)論

治县。| 台湾省| 黎川县| 龙里县| 施甸县| 余江县| 金阳县| 西城区| 铜鼓县| 五原县| 兴安县| 都江堰市| 道孚县| 仁化县| 沙湾县| 瑞安市| 南充市| 库尔勒市| 阳新县| 湖州市| 河西区| 高雄市| 陆良县| 大宁县| 开鲁县| 措美县| 霞浦县| 密山市| 威信县| 徐州市| 博客| 普格县| 瓦房店市| 兴海县| 盐津县| 井陉县| 衡山县| 鲁甸县| 大宁县| 会昌县| 丹凤县|