目前正在将我的Web应用程序从Sping Boot 2升级到版本3。由于Sping Boot 3使用Spring 6,我需要更新我的安全配置。在我的更改之后,我注意到我的自定义身份验证提供程序在每个请求中都被调用,这导致了沉重的数据库流量。如果我使用spring默认登录表单,但使用基本身份验证,则不会发生这种情况。
以下是我的示例安全配置:
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public AuthenticationManager authenticationManager() {
return new ProviderManager(new CustomAuthenticationProvider());
}
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.authorizeHttpRequests((authorize) -> authorize
.anyRequest().authenticated()
)
.httpBasic();
return http.build();
}
}
我的供应商看起来像:
public class CustomAuthenticationProvider implements AuthenticationProvider {
@Override
public Authentication authenticate(Authentication authentication)
throws AuthenticationException {
String username = authentication.getName();
String password = authentication.getCredentials().toString();
if ("admin".equals(username) && "admin".equals(password)) {
var user = User.withUsername("admin").password("admin").authorities(new ArrayList<>()).build();
return new UsernamePasswordAuthenticationToken(user.getUsername(), user.getPassword(), user.getAuthorities());
} else {
throw new
BadCredentialsException("system authentication failed");
}
}
@Override
public boolean supports(Class<?> auth) {
return auth.equals(UsernamePasswordAuthenticationToken.class);
}
}
行为简而言之:
| 安全配置|行为|
| --------------|--------------|
| .formLogin()
| 1x登录/提供商呼叫|
| .httpBasic()
|每次会话1x登录/每次请求1x提供商呼叫|
我可以做些什么来恢复Spring 5 / Sping Boot 2的旧行为?
1条答案
按热度按时间ttygqcqt1#
对于每个有相同问题的人,您可以通过在安全过滤器链中设置会话创建策略来恢复旧的会话行为: