进入SpringBoot2.7时代,有小伙伴发现一个常用的类突然过期了:在SpringSecurity时代,这个类太重要了。当然,过期的课程可以继续使用,但是如果你决定别扭了,你只需要稍微看一下评论,基本就明白怎么玩了。我们看一下WebSecurityConfigurerAdapter的注释:从这个注释中,我们大概明白是怎么回事了。以前我们的自定义类继承自WebSecurityConfigurerAdapter来配置我们的SpringSecurity。我们主要配置了两个东西:configure(HttpSecurity)configure(WebSecurity)。前者主要配置SpringSecurity中的过滤器链,后者主要配置一些Path清除规则。现在在WebSecurityConfigurerAdapter的注释中,大家已经把意思说的很清楚了:如果以后要配置过滤器链,可以通过自定义SecurityFilterChainBean来实现。如果以后要配置WebSecurity,可以通过WebSecurityCustomizerBean来完成。那么我们来看一个简单的例子。首先,我们新建一个SpringBoot项目,引入Web和SpringSecurity依赖。注意SpringBoot选择最新的2.7。接下来,我们提供一个简单的测试接口,如下:}}小伙伴们知道,在SpringSecurity中,默认情况下,只要添加依赖,我们项目的所有接口都已经被保护起来了。现在启动项目,访问/hello接口,需要先登录才能访问。登录用户名为user,密码在项目启动日志中随机生成。现在我们的第一个需求是使用自定义用户,而不是系统默认提供的用户。这很简单。我们只需要在Spring容器中注册一个UserDetailsS??ervice的实例,如下:@ConfigurationpublicclassSecurityConfig{@BeanUserDetailsS??erviceuserDetailsS??ervice(){users.createUser(User.withUsername("javaboy").password("{noop}123").roles("admin").build());用户。createUser(User.withUsername("江南小雨").password("{noop}123").roles("admin").build());回访用户;}}就是这样。当然,我当前的用户是存储在内存中的。如果你的用户是存储在数据库中的,你只需要提供UserDetailsS??ervice接口的实现类,注入到Spring容器中即可。这个在vhr视频中已经多次提到(公众号后台回复666有视频介绍),这里不再赘述。但是如果我想让接口/hello被匿名访问,并且希望这个匿名访问没有经过SpringSecurity的过滤链,如果是之前,我们可以重写configure(WebSecurity)方法Configure,但是现在,我们必须改变游戏:@ConfigurationpublicclassSecurityConfig{@BeanUserDetailsS??erviceuserDetailsS??ervice(){InMemoryUserDetailsManagerusers=newInMemoryUserDetailsManager();users.createUser(User.withUsername("javaboy").password("{noop}123").roles("admin").build());users.createUser(User.withUsername("江南小雨").password("{noop}123").roles("admin").build());回访用户;}@BeanWebSecurityCustomizerwebSecurityCustomizer(){returnnewWebSecurityCustomizer(){@Overridepublicvoidcustomize(WebSecurityweb){web.ignoring().antMatchers("/hello");}};}}原来在configure(WebSecurity)方法中的内容现在在WebSecurityCustomizerBean中,可以在这里写配置。如果我还想自定义登录页面、参数等怎么办?继续往下看:@ConfigurationpublicclassSecurityConfig{@BeanUserDetailsS??erviceuserDetailsS??ervice(){InMemoryUserDetailsManagerusers=newInMemoryUserDetailsManager();users.createUser(User.withUsername("javaboy").password("{noop}123").roles("admin").build());users.createUser(User.withUsername("江南小雨").password("{noop}123").roles("admin").build());回访用户;}@BeanSecurityFilterChainsecurityFilterChain(){List
