В настоящее время я работаю над загрузочным проектом Spring, который выступает источником данных для уровня пользовательского интерфейса, и все конечные точки в проекте защищены с использованием OID C.
Однако все работает, как и ожидалось, когда я пытаюсь защитить любой Конечная точка контроллера, помещая аннотацию @PreAuthorize
, хорошо работает в локальной среде разработки (JDK 8), но когда все развертывается в облаке (PCF, OpenJDK), она ведет себя странным образом: 8 из 10 раз работает и 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();
}
}