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

disho6za  于 2024-01-06  发布在  Spring
关注(0)|答案(1)|浏览(433)

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

  1. @Bean
  2. public SecurityFilterChain securityFilterChain(HttpSecurity http, JwtAuthenticationConverter converter) throws Exception {
  3. if (officeSecurityProperties.isEnable()) {
  4. http.authorizeHttpRequests(
  5. authorize -> authorize
  6. .requestMatchers("/doc.html", "/webjars/**", "/v3/api-docs/**").permitAll()
  7. .anyRequest().authenticated()
  8. )
  9. .oauth2ResourceServer(
  10. oauth2 -> oauth2.jwt(
  11. jwt -> jwt.jwtAuthenticationConverter(converter)
  12. )
  13. );
  14. } else {
  15. http.securityContext(AbstractHttpConfigurer::disable);
  16. }
  17. return http.build();
  18. }

字符串

xesrikrc

xesrikrc1#

有两件事你可以考虑。

不开启

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

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

个字符

编程开启

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

  1. @EnableMethodSecurity(prePostEnabled = false)
  2. public SecurityConfig {
  3. }


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

  1. @Bean
  2. @Role(BeanDefinition.ROLE_INFRASTRUCTURE)
  3. @ConditionalOnProperty("office.security.property")
  4. static MethodInterceptor preAuthorizeAuthorizationMethodInterceptor() {
  5. return AuthorizationManagerBeforeMethodInterceptor.preAuthorize();
  6. }


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

展开查看全部

相关问题