Я использую Spring Security Oauth2 с JWT для входа / авторизации клиентского приложения в приложении сервера авторизации, оба построены с использованием Spring Boot 2.
В клиентском приложении я делаю вход в систему вручную, получаю токен JWT с сервера авторизации и затем выполняю код
OAuth2Authentication authentication = tokenStore.readAuthentication(token);
SecurityContextHolder.getContext().setAuthentication(authentication);
Проблема, с которой я столкнулся, заключается в том, что я хочу получить токен позже в потоке приложения, но SecurityContextHolder.getContext (). GetAuthentication () возвращает ноль. Это говорит мне, что SecurityContext очищается в какой-то момент к весне.
Как я могу сделать так, чтобы SecurityContext был постоянным на протяжении всего сеанса? Или что я делаю не так?
Некоторые фрагменты конфигурации, которые у меня есть:
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
...
@Override
public void configure(HttpSecurity http) throws Exception {
http.csrf()
.disable()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED)
.and()
.authorizeRequests()
.antMatchers("/login")
.permitAll()
.anyRequest()
.authenticated();
}
...
}
Затем я хочу получить токен позже в потоке клиентского приложения:
SecurityContext securityContext = SecurityContextHolder.getContext();
OAuth2Authentication oauth = (OAuth2Authentication)securityContext.getAuthentication();
String token = (String) oauth.getCredentials();
но объект oauth нулевой.