Spring-Security
配置代码
package magnus.configuration;
import com.fasterxml.jackson.databind.ObjectMapper;
import jakarta.ws.rs.core.MediaType;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.AuthenticationProvider;
import org.springframework.security.authentication.ProviderManager;
import org.springframework.security.authentication.dao.DaoAuthenticationProvider;
import org.springframework.security.config.Customizer;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
import org.springframework.security.config.annotation.web.configurers.LogoutConfigurer;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Configuration
@EnableWebSecurity
public class MagnusSecurityConfiguration {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity httpSecurity,
ObjectMapper objectMapper) throws Exception {
httpSecurity.authorizeHttpRequests(request -> request.anyRequest().authenticated());
httpSecurity.formLogin(Customizer.withDefaults());
httpSecurity.logout(LogoutConfigurer::permitAll);
httpSecurity.csrf(AbstractHttpConfigurer::disable);
return httpSecurity.build();
}
@Bean
public UsernamePasswordAuthenticationFilter magnusUsernamePasswordFilter(ObjectMapper objectMapper) {
MagnusUsernamePasswordFilter magnusUsernamePasswordFilter = new MagnusUsernamePasswordFilter();
magnusUsernamePasswordFilter.setAuthenticationManager(providerManager());
magnusUsernamePasswordFilter.setObjectMapper(objectMapper);
magnusUsernamePasswordFilter.initialize();
return magnusUsernamePasswordFilter;
}
@Bean
public UserDetailsService userDetailsService() {
UserDetails build = User.withUsername("username").password("{noop}password").roles("user").build();
return new InMemoryUserDetailsManager(build);
}
@Bean
public AuthenticationManager providerManager() {
List<AuthenticationProvider> providers = new ArrayList<>();
DaoAuthenticationProvider provider = new DaoAuthenticationProvider();
provider.setUserDetailsService(userDetailsSe