如何通过配置文件禁用Spring Security的@EnableWebSecurity和@EnableMethodSecurity功能?

disho6za  于 12个月前  发布在  Spring
关注(0)|答案(1)|浏览(295)

在某些情况下,例如故障排除,安全检查可能会给我们造成障碍,但我无法快速关闭它们。我必须删除@EnableWebSecurity和@EnableMethodSecurity,重新编译项目,并在故障排除之前将其放在服务器上。
在添加@EnableWebSecurity和@EnableMethodSecurity之后,我在配置文件中自定义了参数来禁用SpringSecurity。然而,SpringSecurity不再验证我的token,但@PreAuthorize仍然可以工作。下面是代码。

@Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http, JwtAuthenticationConverter converter) throws Exception {
        if (officeSecurityProperties.isEnable()) {
            http.authorizeHttpRequests(
                            authorize -> authorize
                                    .requestMatchers("/doc.html", "/webjars/**", "/v3/api-docs/**").permitAll()
                                    .anyRequest().authenticated()
                    )
                    .oauth2ResourceServer(
                            oauth2 -> oauth2.jwt(
                                    jwt -> jwt.jwtAuthenticationConverter(converter)
                            )
                    );
        } else {
            http.securityContext(AbstractHttpConfigurer::disable);
        }
        return http.build();
    }

字符串

xesrikrc

xesrikrc1#

有两件事你可以考虑。

不开启

最简单的方法是从一开始就不启用。您可以禁用Sping Boot 配置,然后发布自己的配置类,并使用@ConditionalOnProperty annotation,如下所示:

@SpringBootApplication(exclude=SecurityAutoConfiguration.class)
// ... main class

个字符

编程开启

关闭你已经打开的东西会更棘手。你似乎已经有了一些用于Web安全的东西。对于方法安全性,请将注解更改为:

@EnableMethodSecurity(prePostEnabled = false)
public SecurityConfig {
}


然后自己发布方法拦截器,如下所示:

@Bean
@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
@ConditionalOnProperty("office.security.property")
static MethodInterceptor preAuthorizeAuthorizationMethodInterceptor() {
    return AuthorizationManagerBeforeMethodInterceptor.preAuthorize();
}


这将发布@PreAuthorize支持。您将为您想要启用行为的每个注解发布一个方法拦截器。

相关问题