Spring Security Oauth2 JWT работает для .properties, но не для .yml - PullRequest
0 голосов
/ 24 августа 2018

Я использую SpringBoot, и у меня возникла довольно странная проблема.У меня есть сервер ресурсов, и он отлично работает с application.properties, но когда я пытался перенести .properties в .yml, я получаю ошибку UNATHORIZED, когда отправляю запрос с токеном JWT на один из моих контроллеров.

application.yml

security:
  oauth2:
    resource:
      id: ouath2_id

application.properties

security.oauth2.resource.id=oauth2_id

ResourceConfig class

@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
@EnableResourceServer
public class ResourceConfig extends ResourceServerConfigurerAdapter {

    @Value("${security.oauth2.resource.id}")
    private String resourceId;

    private String publicKey = "xxx";

    @Override
    public void configure(ResourceServerSecurityConfigurer resources) {
        System.out.println("RESORCEID: " + resourceId); //IT IS LOADING CORRECTLY
        resources
                .resourceId(resourceId)
                .tokenServices(tokenServices())
                .tokenStore(tokenStore())
        .authenticationEntryPoint(customAuthEntryPoint())
        .accessDeniedHandler(customDeniedHandler());
    }
    @Bean
    public AuthenticationEntryPoint customAuthEntryPoint(){
        return new AuthFailureHandler();
    }

    @Bean
    public AccessDeniedHandler customDeniedHandler(){
        return new AccessDeniedHandlerImpl();
    }


    @Override
    public void configure(HttpSecurity http) throws Exception {
        http
                .csrf().disable()
                .anonymous().disable()
                .authorizeRequests()
                .antMatchers(HttpMethod.OPTIONS).permitAll()
        .antMatchers("/api/**").authenticated();
    }


    @Bean
    public TokenStore tokenStore() {
        return new JwtTokenStore(accessTokenConverter());
    }


    @Bean
    public JwtAccessTokenConverter accessTokenConverter() {
        JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
        converter.setVerifierKey(publicKey);
        return converter;
    }
    @Bean
    @Primary
    public DefaultTokenServices tokenServices() {
        DefaultTokenServices defaultTokenServices = new DefaultTokenServices();
        defaultTokenServices.setTokenStore(tokenStore());
        defaultTokenServices.setSupportRefreshToken(true);
        defaultTokenServices.setTokenEnhancer(accessTokenConverter());
        return defaultTokenServices;
    }
}

Я проверил, и единственное свойство, которое язагрузка формы poperties является resourceId, и он получает желаемое значение.

Так что единственное отличие - это .yml вместо .properties

Понятия не имею, в чем проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...