Некоторые микросервисы проходят проверку подлинности 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
.
Как мне исправить мою проблему?
В целом, что является стандартным способом преодоления этой проблемы?