我有一个应用程序.yml像这样:
spring:
security:
oauth2:
resourceserver:
jwt:
issuer-uri: http://localhost:8180/auth/realms/dev
spring-security:
provider:
default
个字符
所以我在后台使用了一个keycloak,但我有一个spring-security.provider
属性,可以是default
和keycloak
。
如果我使用default
,我不希望spring安全工作,所以我甚至不启动keycloak。但如果设置了spring.security.oauth2.resourceserver.jwt.issuer-uri
,它会尝试建立一个连接到我的keycloak,而它不应该。
我希望应用程序忽略spring.security.oauth2.resourceserver.jwt.issuer-uri
,如果spring-security.provider
设置为“default”。
目前我有两个基于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);
}
}
的字符串
先谢了。
2条答案
按热度按时间ghg1uchk1#
你可以通过在你的main类(包含main方法)上面使用
@SpringBootApplication(exclude = { SecurityAutoConfiguration.class })
annotation来禁用spring安全自动配置,或者通过将此配置添加到application.properties文件中:spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration
还有一些特殊情况下,这种设置是不够的。例如,几乎每个Sping Boot 应用程序都是通过类路径中的Actuator启动的。这会导致问题,因为另一个自动配置类需要我们刚刚排除的类,因此应用程序将无法启动。为了解决这个问题,我们需要排除该类;并且,特定于Actuator情况,我们需要排除ManagementWebSecurityAutoConfiguration。fiei3ece2#
创建配置,例如在
src/main/resources
中:application-no-security.yml:
字符串
激活它,例如:
型