WebSecurityConfigurerAdapter被弃用Spring Security基于组件化的配置和使用

这篇具有很好参考价值的文章主要介绍了WebSecurityConfigurerAdapter被弃用Spring Security基于组件化的配置和使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在Spring Security 5.7及之后的版本中WebSecurityConfigurerAdapter将被启用,安全框架将转向基于组件的安全配置。

spring security官方文档

Spring Security without the WebSecurityConfigurerAdapter

如果使用的Spring Boot版本高于低于2.7.0、Spring Security版本高于5.7,就会出现如下的提示:

WebSecurityConfigurerAdapter被弃用Spring Security基于组件化的配置和使用

1、被启用的原因是官方推荐开发正使用组件的(component-based)的安全配置。Spring的IOC容器可以管理一切Bean,Spring boot也是基于自动配置的,要实现某个功能还需要实现继承配置类,实现配置类的方法再DL注入到IOC中,这样显然是不方便的。
2、在组件化配置中,需要实现某些功能直接生产一一个该类型的Bean通过@Bean注解注入到IOC容器,覆盖spring boot默认配置,这种方式更加方便不用实现接口在重写方法,还能尽可能的减少配置类的数量。

在了解组件化配置时首先需要了解Spring Security - Lambda DSL,该工程是释放包括对DSL的增强,允许使用lambda配置HTTP安全性。

在Lambda DSL中,不需要使用 .及()方法。该 HTTP安全性实例在调用lambda方法后自动返回以进行进一步配置。lambda表达式it ->{}的快捷方式。

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests(authorizeRequests ->
                authorizeRequests
                    .antMatchers("/blog/**").permitAll()
                    .anyRequest().authenticated()
            )
            .formLogin(formLogin ->
                formLogin
                    .loginPage("/login")
                    .permitAll()
            )
            .rememberMe(withDefaults());
    }
}
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/blog/**").permitAll()
                .anyRequest().authenticated()
                .and()
            .formLogin()
                .loginPage("/login")
                .permitAll()
                .and()
            .rememberMe();
    }
}

这样的好处是是配置更具有可读性,不需要再使用.and()返回初始对象再重新配置规则。Spring Security - Lambda DSL

如果读者仍然习惯于WebSecurityConfigurerAdapter的开发,也可以实现其父接口WebSecurityConfigurer,不过还是推荐组件化配置。
WebSecurityConfigurerAdapter被弃用Spring Security基于组件化的配置和使用

在Spring Security主要实现了两个个功能,身份认证,权限认证。在最新的组件化配置中两个功能都可以通过组件化配置完成。对应的组件类型分别是UserDetailsServicePasswordEncoderSecurityFilterChain

SecurityFilterChain这个新的类的作用是代替了WebSecurityConfigurerAdapterconfigure方法,因此不需要再去实现WebSecurityConfigurerAdapter类后再重写方法了,直接生产一个SecurityFilterChain的实例即可。

@Configuration
public class SecurityConfiguration {

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

}

配置也可旧版本的HttpSecurity配置一致,也支持Spring Security - Lambda DSL,小编还是熟悉.and()的过滤器链的配置方式,接下来也会以该方式演示。

组件化配置过滤器链:

@Configuration
public class WebSecurityConfig {


    //用户认证
    @Bean(name = "userDetailsService")
    UserDetailsService getUserService(){
        return new UserDetailsService() {
            @Override
            public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
                List<GrantedAuthority> auths = AuthorityUtils.commaSeparatedStringToAuthorityList("admin");
                return new User("admin",new BCryptPasswordEncoder().encode("123"),auths);
            }
        };

    }

    //过滤器链配置
    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .anyRequest().authenticated()
                .and()
                .formLogin()
                //会话状态代理接口
                .loginProcessingUrl("/doLogin")
                .successForwardUrl("/index")
                .permitAll()
                .and()
                .csrf().disable();
        return http.build();
    }



    //密码加密
    @Bean(name = "passwordEncoder")
    PasswordEncoder encoder(){
        return  new BCryptPasswordEncoder();
    }


}

SecurityFilterChain组件需要返回一个该类型的实例,在旧版本的配置中是无返回值的,如下
WebSecurityConfigurerAdapter被弃用Spring Security基于组件化的配置和使用

SecurityFilterChain组件中式有返回值的且返回值为HttpSecurity.build()类型,该类型肯定是前者的实现类了,如下,提供了三个方法返回实现类:

WebSecurityConfigurerAdapter被弃用Spring Security基于组件化的配置和使用

三个方法都是用来实现过滤器链的,小编还不清楚它们的关系哈,再去看看源码,这里使用build方法就可以实现功能了。

WebSecurityConfigurerAdapter被弃用Spring Security基于组件化的配置和使用

在WebSecurityConfigurerAdapter接口中还有众多的方法,如下:

WebSecurityConfigurerAdapter被弃用Spring Security基于组件化的配置和使用
在新的组件化配置中都有对应的实现方案,如WebSecurityCustomizer替代void configure(WebSecurity web)方法。

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

更多细节请移步官方文档Spring Security without the WebSecurityConfigurerAdapter文章来源地址https://www.toymoban.com/news/detail-431474.html

到了这里,关于WebSecurityConfigurerAdapter被弃用Spring Security基于组件化的配置和使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Security 替换WebSecurityConfigurerAdapter (Deprecated)的方法

    在本文中,我将提供一个解决方案来配置Spring 安全性,而无需 WebSecurityConfigurerAdapter 类。从 Spring Security 5.7 开始, WebSecurityConfigurerAdapter 类已被弃用,Spring 团队鼓励用户转向基于组件的安全配置。   在 WebSecurityConfigurerAdapter 类被弃用之前,我们正在编写这样的代码。我们创

    2024年02月19日
    浏览(26)
  • FragmentPagerAdapter被弃用后的代替方案

    网上搜了很多,都没有找到有关Java的完整解决方案。到处问也没有结果。自己瞎折腾,居然出结果啦!——不是科班出生小白太难了! 首先说,我要想的效果:底部一个导航栏,点击导航栏,可以实现翻页效果。也可以通过左滑、右滑实现翻页效果。 第一步:在gradle里添加

    2024年02月07日
    浏览(30)
  • Spring Security在6.0弃用WebSecurityConfigurationAdapter后该如何自定义配置介绍(新旧示例)

    在旧版的配置中,Security需要我们写一个类去继承他的WebSecurityConfigurerAdapter并把这个配置注入到容器中 在继承这个类后,我们可以在WebSecurityConfigurer里面去重写WebSecurityConfigurationAdapter类里面的一些方法来实现自定义过滤链等操作 实现自定义过滤链需要重写configure(HttpSecurit

    2024年02月08日
    浏览(32)
  • vscode | linux | c++ intelliense 被弃用解决方案

    每日一句,vscode用的爽是爽,主要是可配置太强了。如果也很会研究,可以直接去咸鱼接单了 废话少说,直接整。 用着用着说是c++ intelliense被弃用,很多辅助功能无法使用,像查看定义、查看引用、函数跳转、智能提示…… 归根结底,还是太菜了,但真的很需要这些辅助啊

    2024年02月12日
    浏览(28)
  • Resthighlevelclient被弃用后,ES 8.x 最新用法 java api

    一、ES 8.x 整合springBoot 1、导入依赖 2、创建 ElasticsearchClient 二、ES java api 1、搜索 2、单个插入(更新)文档 3、批量插入(更新)文档

    2024年02月14日
    浏览(30)
  • Android Handler被弃用,那么以后怎么使用Handler,或者类似的功能

    Android API30左右,Android应用在使用传统写法使用Handler类的时候会显示删除线,并提示相关的方法已经被弃用,不建议使用。 Android studio中的显示和建议: 看下官方API关于此处的解释:  简要说就是如果在实例化Handler的时候不提供Looper, 可能导致操作丢失(Handler 没有预估到新

    2023年04月21日
    浏览(32)
  • Unity打包APK错误:‘android.enableR8‘选项已被弃用,不应再使用

    Unity打包APK错误:\\\'android.enableR8’选项已被弃用,不应再使用 在Unity游戏开发中,我们经常需要将游戏打包成APK文件以在Android设备上进行测试或发布。然而,有时候在打包APK的过程中,可能会遇到一些错误。其中一个常见的错误是 “The option ‘android.enableR8’ is deprecated and sh

    2024年02月08日
    浏览(39)
  • Python错题集-7:DeprecationWarning: Conversion of an array with ndim(被弃用警告)

    DeprecationWarning: Conversion of an array with ndim 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.)   X[i] = np.random.normal(loc=Ex, scale=np.abs(Enn), size=1) DeprecationWarning: Conversion of an array with ndim  是一个警告,通常出

    2024年04月09日
    浏览(33)
  • iOS中获取MCC和MNC的方法及iOS 16中CTCarrier被弃用的替代方案

    一、使用公共API获取MCC和MNC 在iOS中,我们可以使用CoreTelephony框架来获取用户的移动国家代码(MCC)和移动网络代码(MNC)。具体操作步骤如下: 在Xcode项目中,点击项目目标,进入“General”选项卡,在“Frameworks, Libraries, and Embedded Content”下点击“+”按钮,搜索并添加 Cor

    2024年02月11日
    浏览(81)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包