Spring Security 如何关闭Spring安全自动配置?

7vhp5slm  于 12个月前  发布在  Spring
关注(0)|答案(2)|浏览(264)

我有一个应用程序.yml像这样:

spring:
    security:
      oauth2:
        resourceserver:
          jwt:
            issuer-uri: http://localhost:8180/auth/realms/dev
            
spring-security:
  provider: 
    default

个字符
所以我在后台使用了一个keycloak,但我有一个spring-security.provider属性,可以是defaultkeycloak
如果我使用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);
    }
}

的字符串
先谢了。

ghg1uchk

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。

fiei3ece

fiei3ece2#

创建配置,例如在src/main/resources中:application-no-security.yml:

spring:
  autoconfigure:
    exclude: >
      org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration,
      org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration

字符串
激活它,例如:

@ActiveProfile("no-security")
class SomeTest {
...
}

相关问题