首页 > 其他分享 >SpringSecurity解决WebSecurityConfigurerAdapter过时问题

SpringSecurity解决WebSecurityConfigurerAdapter过时问题

时间:2023-10-04 17:22:55浏览次数:38  
标签:过时 http web springframework SpringSecurity org import WebSecurityConfigurerAdapt

旧版通过继承WebSecurityConfiurerAdapter,但是新版本中该类已经被标注为@Deprecated

旧版代码

package com.lzx.config;

import com.lzx.filter.JwtAuthenticationTokenFilter;
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.WebSecurityConfigurerAdapter;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;

/**
 * @ClassName SecurityConfig
 * @Description TODO
 * @Author LiZhixiang
 * @Date 2023/10/3 17:32
 * @Version 1.0
 */
//@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

    @Autowired
    private JwtAuthenticationTokenFilter jwtAuthenticationTokenFilter;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                //关闭csrf
                .csrf().disable()
                //不通过Session获取SecurityContext
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                .and()
                .authorizeRequests()
                //对于登录接口 允许匿名访问
                .antMatchers("/user/login").anonymous()
                //除上面外的所有请求全部需要鉴权认证
                .anyRequest().authenticated();

        //把token校验过滤器添加到过滤器链中
        http.addFilterBefore(jwtAuthenticationTokenFilter, UsernamePasswordAuthenticationFilter.class);
    }

    @Bean
    @Override
    public AuthenticationManager authenticationManagerBean() throws Exception {
        return super.authenticationManagerBean();
    }

}

配置HttpSecurity

通过创建一个SecurityFilterChain bean来配置HttpSecurity

@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests((authz) -> authz
                .anyRequest().authenticated()
            )
            .httpBasic(withDefaults());
    }
}

新版中通过构建一个SecurityFilterChain bean来做这件事:

@Configuration
public class SecurityConfiguration {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests((authz) -> authz
                .anyRequest().authenticated()
            )
            .httpBasic(withDefaults());
        return http.build();
    }
}

配置WebSecurity

下面是使用WebSecurityConfigurerAdapter忽略匹配/ignore1或/ignore2的请求的实例配置

@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
    @Override
    public void configure(WebSecurity web) {
        web.ignoring().antMatchers("/ignore1", "/ignore2");
    }
}

新版建议注册一个WebSecurityCustomizer bean来做这件事:

@Configuration
public class SecurityConfiguration {
    @Bean
    public WebSecurityCustomizer webSecurityCustomizer() {
        return (web) -> web.ignoring().antMatchers("/ignore1", "/ignore2");
    }
}

配置AuthenticationManager

旧版通过重写authenticationManagerBean调用父类方法实现AuthenticationManager的注入

@Bean
    @Override
    public AuthenticationManager authenticationManagerBean() throws Exception {
        return super.authenticationManagerBean();
    }

新版建议这样注入:

    @Bean
    public AuthenticationManager authenticationManager(
            AuthenticationConfiguration authenticationConfiguration
    ) throws Exception {
        return authenticationConfiguration.getAuthenticationManager();
    }

 

标签:过时,http,web,springframework,SpringSecurity,org,import,WebSecurityConfigurerAdapt
From: https://www.cnblogs.com/lzx-cm/p/17742487.html

相关文章

  • springsecurity 6.x
    springboot+springsecurity6.x的配置securityConfig.java登录页面的DIY@BeanpublicSecurityFilterChainsecurityFilterChain(HttpSecurityhttp)throwsException{http.authorizeHttpRequests(author->author.requestMatchers("/......
  • [SpringSecurity5.6.2源码分析十三]:LogoutFilter
    前言• SpringSecurity默认提供了登录的页面以及登录的接口,与之对应的也提供了登出页和登出请求• 登出请求对应的过滤器是LogoutFilter• 登出页对应的是DefaultLogoutPageGeneratingFilter、1.LogoutConfigurer• LogoutConfigurer是LogoutFilter对应的配置类,先看其主要方法......
  • SpringSecurity用户登录限制
    本次给你介绍只允许用户在一个地方登录,也就是说每个用户只允许有一个Session。他有两种场景如果同一个用户在第二个地方登录,则将第一个登录下线如果同一个用户在第二个地方登录,则不允许二次的登录同一个用户在第二个地方登录,则将第一个登录退出具体步骤如下:重构com.security.learn.......
  • [SpringSecurity5.6.2源码分析十二]:CsrfFilter
    前言• Csrf(跨站伪造请求):指的是用户在A网站认证完成后,A网站Cookie保存在了浏览器中,然后用户在B网站点击了钓鱼链接,使其让钓鱼请求带有了A网站的Cookie,从而让A网站认为这是一次正常的请求• 而SpringSecurity采用的是同步令牌模式(SynchronizerTokenPattern)来预防Csrf攻击•......
  • SpringSecurity
     1.什么是SpringSecurity进入移动互联网时代,大家每天都在刷手机,常用的软件有微信、支付宝、头条等,下边拿微信来举例子说明认证相关的基本概念,在初次使用微信前需要注册成为微信用户,然后输入账号和密码即可登录微信,输入账号和密码登录微信的过程就是认证。系统为什么要认证?......
  • [SpringSecurity5.6.2源码分析十一]:CorsFilter
    前言• 跨域:两个域名的(协议、域名/ip、端口)有任意一个不同即视为跨域• 跨域资源共享(Cors):即浏览器允许访问其他跨域的资源• 而CorsFilter就是SpringSecurity用来处理Cors的过滤器1.CorsConfigurer• CorsConfigurer是CorsFilter对应的配置类,其中就只有一个重要方法• co......
  • [SpringSecurity5.6.2源码分析十]:HeaderWriterFilter
    前言• 为了安全考虑,添加启用浏览器保护的某些头是很有用的,比如X-Frame-Options,X-XSS-Protection和X-Content-Type-Options• 而HeaderWriterFilter就支持往响应头写入各种响应头1、HeadersConfigurer• HeadersConfigurer是HeaderWriterFilter对应的配置类,是在获取HttpSecur......
  • [SpringSecurity5.6.2源码分析八]:SecurityContextPersistenceFilter
    前言• 当我们不在其他线程而就在容器创建的线程中使用SecurityContextHolder.getContext()获取SecurityContext的时候,正常都能获取到• SecurityContext默认是放在线程中的,所以说在某个地方一定将SecurityContext放到线程中,而这个类就是SecurityContextPersistenceFilter1、Secu......
  • [SpringSecurity5.2.2源码分析七]:WebAsyncManagerIntegrationFilter
    1、作用• 是为了接口返回异步对象,然后执行异步任务也能通过SecurityContextHolder获取SecurityContext• 比如说返回值是WebAsyncTask的时候2、WebAsyncManagerIntegrationFilter• 源码很短就是在WebAsyncManager中注册了SecurityContextCallableProcessingInterceptorpublic......
  • [SpringSecurity5.6.2源码分析六]:ChannelProcessingFilter
    1、基础用法• ChannelProcessingFilter是SpringSecurity的第一个过滤器,具体排序规则见FilterComparator,image.png• 主要作用:可限制服务端接受的安全协议,比如说仅支持Https或者Http1.1开启配置类:• 首先我们注册到容器中的WebSecurityConfigurerAdapter是针对于WebSecurity的......