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

SpringSecurity的安全過(guò)濾器鏈功能詳解

 更新時(shí)間:2025年03月26日 09:49:04   作者:康小莊  
本文介紹了如何配置SpringSecurity的安全過(guò)濾器鏈,包括定義URL路徑的訪問(wèn)權(quán)限、用戶認(rèn)證和授權(quán)配置、自定義CSRF過(guò)濾器等內(nèi)容,通過(guò)這些配置,可以實(shí)現(xiàn)對(duì)不同URL路徑的訪問(wèn)控制以及用戶的登錄、注銷等功能,感興趣的朋友一起看看吧

主要是用于配置Spring Security的安全過(guò)濾器鏈(SecurityFilterChain),以及定義用戶認(rèn)證和授權(quán)的相關(guān)配置。具體來(lái)說(shuō),代碼實(shí)現(xiàn)了以下功能:

  • 配置安全過(guò)濾器鏈:定義了哪些URL路徑需要進(jìn)行認(rèn)證,哪些路徑可以匿名訪問(wèn),以及如何處理登錄、注銷和CSRF防護(hù)等。
  • 用戶認(rèn)證:使用內(nèi)存中的用戶詳情服務(wù)(InMemoryUserDetailsManager)來(lái)管理用戶信息,并使用BCrypt密碼編碼器(BCryptPasswordEncoder)對(duì)用戶密碼進(jìn)行加密
@Configuration(proxyBeanMethods = false)
public class SecuritySecureConfig {
    private final AdminServerProperties adminServer;
    private final SecurityProperties security;
    public SecuritySecureConfig(AdminServerProperties adminServer, SecurityProperties security) {
        this.adminServer = adminServer;
        this.security = security;
    }
    /**
     * 用于配置Spring Security的安全過(guò)濾器鏈,以及定義用戶認(rèn)證和授權(quán)的相關(guān)配置。
     * 通過(guò)這些配置,可以實(shí)現(xiàn)對(duì)不同URL路徑的訪問(wèn)控制,以及用戶的登錄、注銷和“記住我”等功能
     */
    @Bean
    protected SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        // 配置安全過(guò)濾器鏈:定義了哪些URL路徑需要進(jìn)行認(rèn)證,哪些路徑可以匿名訪問(wèn),以及如何處理登錄、注銷和CSRF防護(hù)
        SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();
        successHandler.setTargetUrlParameter("redirectTo");
        successHandler.setDefaultTargetUrl(this.adminServer.path("/"));
        http.authorizeHttpRequests((authorizeRequests) -> authorizeRequests //
                        .requestMatchers(new AntPathRequestMatcher(this.adminServer.path("/assets/**")))
                        .permitAll()
                        .requestMatchers(new AntPathRequestMatcher(this.adminServer.path("/actuator/info")))
                        .permitAll()
                        .requestMatchers(new AntPathRequestMatcher(adminServer.path("/actuator/health")))
                        .permitAll()
                        .requestMatchers(new AntPathRequestMatcher(this.adminServer.path("/login")))
                        .permitAll()
                        .dispatcherTypeMatchers(DispatcherType.ASYNC)
                        .permitAll()
                        .anyRequest()
                        .authenticated())
                /*
                formLogin:配置表單登錄。
                loginPage:指定自定義的登錄頁(yè)面。
                successHandler:指定認(rèn)證成功后的處理器。
                logout:配置注銷功能。
                httpBasic:?jiǎn)⒂肏TTP基本認(rèn)證。
                 */
                .formLogin(
                        (formLogin) -> formLogin.loginPage(this.adminServer.path("/login")).successHandler(successHandler))
                .logout((logout) -> logout.logoutUrl(this.adminServer.path("/logout")))
                .httpBasic(Customizer.withDefaults());
        /*
         * addFilterAfter:在指定的過(guò)濾器之后添加自定義的CSRF過(guò)濾器。
         * csrf:配置CSRF防護(hù)。
         * csrfTokenRepository:設(shè)置CSRF令牌的存儲(chǔ)方式。
         * csrfTokenRequestHandler:設(shè)置CSRF令牌的請(qǐng)求處理器。
         * ignoringRequestMatchers:忽略某些URL路徑的CSRF防護(hù)。
         */
        http.addFilterAfter(new CustomCsrfFilter(), BasicAuthenticationFilter.class)
                .csrf((csrf) -> csrf.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
                        .csrfTokenRequestHandler(new CsrfTokenRequestAttributeHandler())
                        .ignoringRequestMatchers(
                                new AntPathRequestMatcher(this.adminServer.path("/instances"), "POST"),
                                new AntPathRequestMatcher(this.adminServer.path("/instances/*"), "DELETE"),
                                new AntPathRequestMatcher(this.adminServer.path("/actuator/**"))
                        ));
        http.rememberMe((rememberMe) -> rememberMe.key(UUID.randomUUID().toString()).tokenValiditySeconds(1209600));
        return http.build();
    }
    /*
    rememberMe:配置“記住我”功能。
    key:設(shè)置“記住我”功能的密鑰。
    tokenValiditySeconds:設(shè)置“記住我”令牌的有效期。
     */
    @Bean
    public InMemoryUserDetailsManager userDetailsService(PasswordEncoder passwordEncoder) {
        UserDetails user = User.withUsername("macro")
                .password(passwordEncoder.encode("123456"))
                .roles("USER")
                .build();
        return new InMemoryUserDetailsManager(user);
    }
    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

自定義CSRF過(guò)濾器

public class CustomCsrfFilter extends OncePerRequestFilter {
    public static final String CSRF_COOKIE_NAME = "XSRF-TOKEN";
    /**
     * 它是一個(gè)過(guò)濾器(Filter)的內(nèi)部實(shí)現(xiàn)。
     * 該過(guò)濾器的主要功能是處理跨站請(qǐng)求偽造(CSRF)防護(hù),確保每個(gè)請(qǐng)求都包含有效的CSRF令牌
     */
    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
            throws ServletException, IOException {
        CsrfToken csrf = (CsrfToken) request.getAttribute(CsrfToken.class.getName());
        if (csrf != null) {
            Cookie cookie = WebUtils.getCookie(request, CSRF_COOKIE_NAME);
            String token = csrf.getToken();
            if (cookie == null || token != null && !token.equals(cookie.getValue())) {
                cookie = new Cookie(CSRF_COOKIE_NAME, token);
                cookie.setPath("/");
                response.addCookie(cookie);
            }
        }
        filterChain.doFilter(request, response);
    }
}

用于配置Spring Security的安全過(guò)濾器鏈,以及定義用戶認(rèn)證和授權(quán)的相關(guān)配置。通過(guò)這些配置,可以實(shí)現(xiàn)對(duì)不同URL路徑的訪問(wèn)控制,以及用戶的登錄、注銷和“記住我”等功能。

到此這篇關(guān)于SpringSecurity的安全過(guò)濾器鏈的文章就介紹到這了,更多相關(guān)SpringSecurity的安全過(guò)濾器鏈內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java最簡(jiǎn)潔數(shù)據(jù)結(jié)構(gòu)之冒泡排序快速理解

    Java最簡(jiǎn)潔數(shù)據(jù)結(jié)構(gòu)之冒泡排序快速理解

    冒泡排序是編程中數(shù)據(jù)結(jié)構(gòu)繞不過(guò)的一個(gè)基礎(chǔ)點(diǎn),有關(guān)于冒泡排序的文章也有很多,但可能會(huì)比較繚亂未能理解,本章將一子u為簡(jiǎn)潔明了的例圖帶你通關(guān)冒泡排序
    2021-11-11
  • RocketMQ順序消息的原理與特點(diǎn)

    RocketMQ順序消息的原理與特點(diǎn)

    RocketMQ作為一款純java、分布式、隊(duì)列模型的開源消息中間件,支持事務(wù)消息、順序消息、批量消息、定時(shí)消息、消息回溯等,本篇我們了解如何實(shí)現(xiàn)順序消息的原理與特點(diǎn)
    2023-02-02
  • Java基礎(chǔ)教程之HashMap迭代刪除使用方法

    Java基礎(chǔ)教程之HashMap迭代刪除使用方法

    這篇文章主要給大家介紹了關(guān)于Java基礎(chǔ)教程之HashMap迭代刪除使用方法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Java合并區(qū)間的實(shí)現(xiàn)

    Java合并區(qū)間的實(shí)現(xiàn)

    本文主要介紹了Java合并區(qū)間的實(shí)現(xiàn),通過(guò)合理使用集合類和排序算法,可以有效地解決合并區(qū)間問(wèn)題,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-08-08
  • Android圖片轉(zhuǎn)換器代碼分享

    Android圖片轉(zhuǎn)換器代碼分享

    本文給大家總結(jié)了下在安卓程序中進(jìn)行圖片轉(zhuǎn)換的方法,非常的實(shí)用,小伙伴們可以參考下。
    2015-10-10
  • BigDecimal divide除法除不盡報(bào)錯(cuò)的問(wèn)題及解決

    BigDecimal divide除法除不盡報(bào)錯(cuò)的問(wèn)題及解決

    這篇文章主要介紹了BigDecimal divide除法除不盡報(bào)錯(cuò)的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 如何解決TCP?socket的阻塞問(wèn)題

    如何解決TCP?socket的阻塞問(wèn)題

    這篇文章主要介紹了如何解決TCP?socket的阻塞問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Springboot工具類FileCopyUtils使用教程

    Springboot工具類FileCopyUtils使用教程

    這篇文章主要介紹了Springboot內(nèi)置的工具類之FileCopyUtils的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2022-12-12
  • 關(guān)于servlet向mysql添加數(shù)據(jù)時(shí)中文亂碼問(wèn)題的解決

    關(guān)于servlet向mysql添加數(shù)據(jù)時(shí)中文亂碼問(wèn)題的解決

    最近在工作中遇到一個(gè)小問(wèn)題,出現(xiàn)了中文亂碼的問(wèn)題,無(wú)奈只能想辦法解決,下面這篇文章主要給大家介紹了關(guān)于servlet向mysql添加數(shù)據(jù)時(shí)中文亂碼問(wèn)題的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-08-08
  • Java語(yǔ)言實(shí)現(xiàn)對(duì)MySql數(shù)據(jù)庫(kù)中數(shù)據(jù)的增刪改查操作的代碼

    Java語(yǔ)言實(shí)現(xiàn)對(duì)MySql數(shù)據(jù)庫(kù)中數(shù)據(jù)的增刪改查操作的代碼

    這篇文章主要介紹了Java語(yǔ)言實(shí)現(xiàn)對(duì)MySql數(shù)據(jù)庫(kù)中數(shù)據(jù)的增刪改查操作的代碼,實(shí)現(xiàn)了連接數(shù)據(jù)庫(kù),和數(shù)據(jù)庫(kù)的增刪改查操作,有興趣的可以了解一下。
    2016-12-12

最新評(píng)論

边坝县| 丰县| 台湾省| 西宁市| 泾川县| 丹巴县| 灌云县| 宽甸| 海口市| 策勒县| 德州市| 米泉市| 海原县| 梁河县| 林周县| 隆回县| 隆昌县| 修水县| 武义县| 南汇区| 民丰县| 盐城市| 顺平县| 安泽县| 资源县| 神农架林区| 江西省| 保靖县| 双城市| 禄丰县| 广饶县| 运城市| 四川省| 桦甸市| 北碚区| 西青区| 古丈县| 鄯善县| 阜宁县| 泸溪县| 达州市|