我有一个 Spring MVC 项目和一个 Spring WebFlux 项目连接同一个 redis 服务器。使用 spring security
spring-boot-starter-security
和 spring-session-data-redis
作为身份验证系统。从 MVC 项目登录和 webflux 禁用登录,但 webflux 离开返回 401 错误代码。请问我该如何解决。
代码如下:
MVC
@Configuration
@EnableRedisHttpSession
public class SpringSecurityConfigur {
@Bean
@Order(1)
public SecurityFilterChain appSecurityFilterChain(HttpSecurity http) throws Exception {
return http.antMatcher("/app/**")
.authorizeHttpRequests((auth) -> auth.anyRequest().authenticated())
.exceptionHandling((auth) -> auth.authenticationEntryPoint(errorAuthenticationEntryPoint))
.formLogin()
.and().addFilterAt(appUsernamePasswordProcessingFilter,
UsernamePasswordAuthenticationFilter.class)
.logout().logoutUrl("/app/logout")
.and().csrf().disable().build();
}
}
WebFlux
@EnableWebFluxSecurity
@EnableRedisWebSession
@AllArgsConstructor
public class SecurityConfig {
private final DefaultSecurityContextRepository defaultSecurityContextRepository;
private final SessionFilter sessionFilter;
@Bean
public SecurityWebFilterChain filterChain(ServerHttpSecurity http) {
final var permitAll = new String[]{""};
return http.csrf().disable()
.formLogin().disable()
.authorizeExchange()
.anyExchange().authenticated()
.and()
.exceptionHandling()
.accessDeniedHandler(new TokenServerAccessDeniedHandler())
.authenticationEntryPoint(new DefaultAuthenticationEntryPoint())
.and()
.build();
}
}
我试过定义:
@Bean
public WebSessionIdResolver webSessionIdResolver() {
CookieWebSessionIdResolver sessionIdResolver = new CookieWebSessionIdResolver();
sessionIdResolver.setCookieName("SESSION");
return sessionIdResolver;
}
和
LettuceConnectionFactory
但它仍然不起作用,我该如何解决这个问题;