我对 Spring Boot 非常陌生,我正在学习有关 Spring Boot Web 安全的教程,该教程应该演示如何设置和配置他们让我们创建的 WebSecurityConfig 类。我遇到的问题是双重的。
首先,他们让我用 WebSecurityConfigurerAdapter 扩展我的 WebSecurityConfig 类,该类已被弃用,而且我似乎找不到任何与如何更新它相关的任何内容。我尝试使用 WsCongfigurerAdapter insdead,但这似乎并没有做得更好。
第二个是文件底部的configure方法,似乎所有的http方法,例如.authorizeHttpRequest()、.authorizeRequest()、.antMatchers()、.requestMatchers()都已被弃用或不正确。
如何更新我的 WebSecurityConfig 类来解决这几个问题?我已将代码以及我收到的消息的图像包含在 WebSecurityConfig.java 类文件中。
最后,当我使用 WsConfigurerAdapter 或者如果我按照他们告诉我设置的文件保留文件时发生的情况是,我无法导航到除 /login 路由之外的任何路由。我尝试的所有其他路线都会将我重定向回此。
请帮忙。
WebSecurityConfig.java:
package com.securewebapp;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.ws.config.annotation.WsConfigurerAdapter;
import com.securewebapp.auth.MySQLUserDetailsService;
import io.netty.handler.codec.http.HttpMethod;
@Configuration
@EnableWebSecurity
@EnableMethodSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private MySQLUserDetailsService mySQLUserDetailsService;
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth
.userDetailsService(mySQLUserDetailsService)
.passwordEncoder(passwordEncoder());
}
protected void configure(HttpSecurity http) throws Exception {
http.authorizeHttpRequests()
.antMatchers(HttpMethod, "/", "/home", "/register", "/css/**.css", "/js/**").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.logout()
.permitAll();
}
}
[WebSecurityConfigurerAdapter][1]
[![authorizeHttpRequest][2]][2]
[![HttpMethod][3]][3]
[![antMathers][4]][4]
您可以修改现有的 SecurityConfig 以创建 Bean,而不是扩展适配器。
@Configuration
@EnableWebSecurity
@EnableMethodSecurity
public class SecurityConfig {
@Autowired
private MySQLUserDetailsService mySQLUserDetailsService;
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth
.userDetailsService(mySQLUserDetailsService)
.passwordEncoder(passwordEncoder());
}
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.authorizeHttpRequests(auth -> auth
.requestMatchers("/", "/home", "/register", "/css/**.css", "/js/**").permitAll()
.anyRequest().authenticated())
.formLogin(config -> config.loginPage("/login").permitAll())
.logout(LogoutConfigurer::permitAll);
return http.build();
}
}
您可以阅读 Spring.io 上的这篇博文以获得更好的理解。 https://spring.io/blog/2022/02/21/spring-security-without-the-websecurityconfigureradapter
您可能会遇到 AuthenticationManagerBuilder 的问题,并且人们在博客评论中提出了相同的问题,也许您也可以解决这个问题。