Spring Boot Web 安全应用程序,WebSecurityConfigurerAdapter 已弃用,我可以使用什么来使我的 WebSecurityConfig 类正常工作?

问题描述 投票:0回答:1

我对 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]
java spring spring-boot security
1个回答
0
投票

您可以修改现有的 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 的问题,并且人们在博客评论中提出了相同的问题,也许您也可以解决这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.