Сериализация и десериализация проблемы SimpleGrantedAuthority в разностной версии Spring Security - PullRequest
0 голосов
/ 15 июня 2019

Некоторые микросервисы проходят проверку подлинности Spring Security OAuth2. Версия Spring Security некоторых из них 4.2.3.release, а остальные - 5.1.2.release, а Сервер авторизации (UAA) защищен spring security 5.1.2.release так же, как и шлюз Zuul, как клиент OAuth2. Поток типа предоставления - authorization_code поток. Конфигурация сервера ресурсов выглядит следующим образом:

@Configuration
@EnableResourceServer
public class OAuth2ResourceConfig extends ResourceServerConfigurerAdapter {

    @Autowired
    private DataSource dataSource;

    @Bean
    @Primary
    public DefaultTokenServices tokenServices() {
        DefaultTokenServices defaultTokenServices = new DefaultTokenServices();
        defaultTokenServices.setTokenStore(tokenStore());
        return defaultTokenServices;
    }

    @Override
    public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
        resources.tokenStore(tokenStore()).tokenServices(tokenServices());
    }

    @Override
    public void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .antMatchers("/Content/**").permitAll()
                .antMatchers("/j-captcha.jpg*").permitAll()
                .antMatchers("/View/ScriptHeader/**").permitAll()
                .antMatchers("/Scripts/**").permitAll()
                .antMatchers("/download/**").permitAll()
                .antMatchers("/NewTheme/**").permitAll()
                .antMatchers("/ErrorPages/**").permitAll()
                .antMatchers("/api/**").permitAll()
                .antMatchers("/landing/**").permitAll()
                .antMatchers("/h2-console/**").permitAll()
                .antMatchers("/rest/api/**").permitAll()
                .antMatchers("/View/**").authenticated()
                .antMatchers("/rest/**").authenticated();
    }

    @Bean
    public TokenStore tokenStore() {
        return new JdbcTokenStore(dataSource);
    }

}

После аутентификации и авторизации на серверах ресурсов возникает следующее исключение, в котором версия весенней защиты имеет вид 4.2.3.release

Причина: java.io.InvalidClassException: org.springframework.security.core.authority.SimpleGrantedAuthority; несовместимый локальный класс: stream classdesc serialVersionUID = 510, локальный класс serialVersionUID = 420 при java.io.ObjectStreamClass.initNonProxy (ObjectStreamClass.java:616) в java.io.ObjectInputStream.readNonProxyDesc (ObjectInputStream.java:1630)

Из-за этой ошибки я увидел содержимое класса SimpleGrantedAuthority в обоих версиях Spring Security 5.1.2.

private static final long serialVersionUID = 510L;

и Spring Security 4.2.3.релиз: есть следующая строка:

private static final long serialVersionUID = 420L;

Из-за некоторых причин я не могу обновить 4.2.3.release до 5.1.2.release и из-за накладных расходов UAA для получения Pricipal я не использую RemoteTokenServices вместо DefaultTokenServices .

Как мне исправить мою проблему?

В целом, что является стандартным способом преодоления этой проблемы?

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