Java Spring-security@PreAuthorize-annoation的间歇性问题
我目前正在从事SpringBoot项目,该项目充当UI层的数据源,项目中的所有端点都使用OIDC进行保护 但是,当我试图通过放置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
@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放在哪里?在控制器端点上?或者在服务(方法)上?我认为这可能与云上的缓存机制有关。(考虑到它在您的本地计算机上运行良好)。我一直在努力解决这个问题