Периодическая проблема с безопасностью Spring @PreAuthorize аннотация - PullRequest
0 голосов
/ 17 января 2020

В настоящее время я работаю над загрузочным проектом 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();
  }
}
...