Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring-security@PreAuthorize-annoation的间歇性问题_Java_Spring_Spring Security_Spring Aop - Fatal编程技术网

Java Spring-security@PreAuthorize-annoation的间歇性问题

Java Spring-security@PreAuthorize-annoation的间歇性问题,java,spring,spring-security,spring-aop,Java,Spring,Spring Security,Spring Aop,我目前正在从事SpringBoot项目,该项目充当UI层的数据源,项目中的所有端点都使用OIDC进行保护 但是,当我试图通过放置@PreAuthorize注释来保护任何控制器端点时,它在本地开发环境(JDK 8)中运行良好,但当通过云部署时(PCF、OpenJDK)它有奇怪的行为,10次中有8次正常工作,2次允许用户绕过方法级别的安全性并获得所需的输出。不确定如何修复此问题,我怀疑与AOP代理有关,但不确定。 任何指针都将不胜感激 @Configuration @EnableWebSecurit

我目前正在从事SpringBoot项目,该项目充当UI层的数据源,项目中的所有端点都使用OIDC进行保护

但是,当我试图通过放置
@PreAuthorize
注释来保护任何控制器端点时,它在本地开发环境(JDK 8)中运行良好,但当通过云部署时(PCF、OpenJDK)它有奇怪的行为,10次中有8次正常工作,2次允许用户绕过方法级别的安全性并获得所需的输出。不确定如何修复此问题,我怀疑与AOP代理有关,但不确定。 任何指针都将不胜感激

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true, proxyTargetClass = true, jsr250Enabled = true)
public class MethodSecurityConfig extends GlobalMethodSecurityConfiguration {

    @Override
    protected MethodSecurityExpressionHandler createExpressionHandler() {
        return new OAuth2MethodSecurityExpressionHandler();
    }

}
安全配置类以供参考

@Configuration
@EnableWebSecurity(debug = true)
public class SecurityConfig extends ResourceServerConfigurerAdapter {

  @Value("${jwt-token.audience}")
  private String resourceId;

  @Value("${jwt-token.issuer-uri}")
  private String issuer;

  @Override
  public void configure(ResourceServerSecurityConfigurer resources) {
    resources.resourceId(resourceId).stateless(false);
  }

  @Override
  public void configure(final HttpSecurity http) throws Exception {
    // @formatter:off
    http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
    http.authorizeRequests().antMatchers("/swagger-ui/**", "/v3/api-docs", "/swagger-ui.html").permitAll().anyRequest()
        .authenticated().and().oauth2ResourceServer().jwt().decoder(jwtDecoder())
        .jwtAuthenticationConverter(new CustomJwtAuthenticationConverter());
    // @formatter:on
  }

  @Bean
  JwtDecoder jwtDecoder() {    
    //omitted for brevity    
    return jwtDecoder;
  }

  @Bean
  public RequestContextListener requestContextListener() {
    return new RequestContextListener();
  }
}

您有多少个集群(实例)?@MehrdadHosseinNejad感谢您的快速响应,目前我们只有一个实例。您能否对您的安全配置提出疑问?还有一个问题,您将@PreAuthorize放在哪里?在控制器端点上?或者在服务(方法)上?我认为这可能与云上的缓存机制有关。(考虑到它在您的本地计算机上运行良好)。我一直在努力解决这个问题