我有一个这样的application.yml:
spring:
security:
oauth2:
resourceserver:
jwt:
issuer-uri: http://localhost:8180/auth/realms/dev
spring-security:
provider:
defaultspring-security:
provider:
keycloak所以我在后台使用了一个键罩,但是我有一个可以是default和keycloak的spring-security.provider属性。
如果我使用default,我不希望spring安全机制起作用,所以我甚至不会启动密钥罩。但是,如果设置了spring.security.oauth2.resourceserver.jwt.issuer-uri,它会尝试建立到我的密钥罩的连接,而不应该这样做。
如果spring-security.provider设置为‘spring.security.oauth2.resourceserver.jwt.issuer-uri’,我希望应用程序忽略默认。
目前,我有两个基于spring-security.provider的配置类
@Configuration
@ConditionalOnProperty(prefix = "spring-security", value = "provider", havingValue = "default", matchIfMissing = true)
public class DefaultSecurityConfigurer {
@Bean
public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {
http.csrf()
.disable();
return http.build();
}
}@EnableWebFluxSecurity
@EnableReactiveMethodSecurity
@RequiredArgsConstructor
@ConditionalOnProperty(prefix = "spring-security", value = "provider", havingValue = "keycloak", matchIfMissing = false)
@Configuration
public class KeycloakSecurityConfigurer {
private final SpringSecurity springSecurity;
private final RolesConverter authoritiesExtractor;
// @formatter:off
@Bean
public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {
http
.authorizeExchange()
.pathMatchers(springSecurity.getApiMatcher())
.authenticated()
.pathMatchers("/**")
.permitAll()
.and()
.oauth2ResourceServer()
.jwt()
.jwtAuthenticationConverter(grantedAuthoritiesExtractor());
return http.build();
}
@Bean
public Converter<Jwt, Mono<AbstractAuthenticationToken>> grantedAuthoritiesExtractor() {
return new ReactiveJwtAuthenticationConverterAdapter(authoritiesExtractor);
}
}提前谢谢。
发布于 2021-04-09 22:11:39
您可以通过在main类(包含main方法)上使用@SpringBootApplication(exclude = { SecurityAutoConfiguration.class })注释或通过将此配置添加到application.properties文件中来禁用spring安全自动配置:spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration在某些特殊情况下,此设置还不够。例如,几乎每个Spring Boot应用程序都是在类路径中使用Actuator启动的。这会导致问题,因为另一个自动配置类需要我们刚才排除的那个,因此应用程序将无法启动。为了解决这个问题,我们需要排除这个类;并且,根据执行器的具体情况,我们需要排除ManagementWebSecurityAutoConfiguration。
https://stackoverflow.com/questions/67020215
复制相似问题