欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

前言

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

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
@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()) {
            // 沒有攜帶 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;
/**
 * 請(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()
                // 不通過 Session 獲取 SecurityContext
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                .and()
                    .authorizeRequests()
                        // 對(duì)于登錄接口 允許匿名訪問
                        .antMatchers("/login")
                            .permitAll()
                        // 除上面外的所有請(qǐng)求全部需要鑒權(quán)認(rèn)證
                        .anyRequest()
                            .authenticated();
        // 在 UsernamePasswordAuthenticationFilter(驗(yàn)證用戶) 之前執(zhí)行
        // TODO 需要注意的是下面過濾器的順序就是執(zhí)行的順序,使用 @Order 也沒辦法改變
        http
        		// 登錄是否過期
                .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 過濾器校驗(yàn)登錄過期、請(qǐng)求日志等操作的文章就介紹到這了,更多相關(guān)Spring Security OncePerRequestFilter 過濾器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springMVC引入Validation的具體步驟詳解

    springMVC引入Validation的具體步驟詳解

    本文簡(jiǎn)單介紹如何引入validation的步驟,如何通過自定義validation減少代碼量,提高生產(chǎn)力,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2018-05-05
  • Java中常見的文件拷貝方式小結(jié)

    Java中常見的文件拷貝方式小結(jié)

    這篇文章主要為大家詳細(xì)介紹了JAVA?四種拷貝文件的方式,分析一下他們對(duì)內(nèi)存使用的方式和各自應(yīng)用的場(chǎng)景,其實(shí)也是對(duì)之前學(xué)過的知識(shí)做一個(gè)回顧吧,快跟隨小編一起學(xué)習(xí)起來(lái)吧
    2024-03-03
  • 基于kafka實(shí)現(xiàn)Spring Cloud Bus消息總線

    基于kafka實(shí)現(xiàn)Spring Cloud Bus消息總線

    消息總線是一種通信工具,可以在機(jī)器之間互相傳輸消息、文件等,這篇文章主要介紹了如何利用kafka實(shí)現(xiàn)SpringCloud Bus消息總線,感興趣的可以學(xué)習(xí)一下
    2022-04-04
  • tomcat部署java web項(xiàng)目遇到的問題及解決方法

    tomcat部署java web項(xiàng)目遇到的問題及解決方法

    這篇文章主要介紹了tomcat部署java web項(xiàng)目遇到的問題及解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • SiteMesh如何結(jié)合Freemarker及velocity使用

    SiteMesh如何結(jié)合Freemarker及velocity使用

    這篇文章主要介紹了SiteMesh如何結(jié)合Freemarker及velocity使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Java實(shí)戰(zhàn)個(gè)人博客系統(tǒng)的實(shí)現(xiàn)流程

    Java實(shí)戰(zhàn)個(gè)人博客系統(tǒng)的實(shí)現(xiàn)流程

    讀萬(wàn)卷書不如行萬(wàn)里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+springboot+mybatis+redis+vue+elementui+Mysql實(shí)現(xiàn)一個(gè)個(gè)人博客系統(tǒng),大家可以在過程中查缺補(bǔ)漏,提升水平
    2022-01-01
  • SpringBoot整合Sa-Token實(shí)現(xiàn)登錄認(rèn)證的示例代碼

    SpringBoot整合Sa-Token實(shí)現(xiàn)登錄認(rèn)證的示例代碼

    本文主要介紹了SpringBoot整合Sa-Token實(shí)現(xiàn)登錄認(rèn)證的示例代碼,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 詳解如何在SpringBoot項(xiàng)目中使用統(tǒng)一返回結(jié)果

    詳解如何在SpringBoot項(xiàng)目中使用統(tǒng)一返回結(jié)果

    在一個(gè)完整的項(xiàng)目中,如果每一個(gè)控制器的方法都返回不同的結(jié)果,那么對(duì)項(xiàng)目的維護(hù)和擴(kuò)展都會(huì)很麻煩。因此,本文為大家準(zhǔn)備了SpringBoot項(xiàng)目中使用統(tǒng)一返回結(jié)果的方法,需要的可以參考一下
    2022-10-10
  • SpringBoot集成ECDH密鑰交換的方法

    SpringBoot集成ECDH密鑰交換的方法

    ECDH密鑰交換算法通過橢圓曲線和Diffie-Hellman方法生成共享密鑰,用于前端和后端之間的AES加密通信,前端使用elliptic.js生成密鑰對(duì),后端使用crypto-js.min.js進(jìn)行AES加密,本文給大家介紹SpringBoot集成ECDH密鑰交換的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2025-01-01
  • RabbitMQ消息拒絕如何解決

    RabbitMQ消息拒絕如何解決

    這篇文章主要介紹了RabbitMQ消息拒絕如何解決問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01

最新評(píng)論