Я отключил управление сеансами в моей службе REST, потому что я использую Oauth2 для аутентификации клиентов + пользователей.Итак, у меня есть следующие конфигурации:
Сервер ресурсов
@Configuration
@EnableResourceServer
public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
@Override
public void configure( HttpSecurity http ) throws Exception {
http.sessionManagement().sessionCreationPolicy( SessionCreationPolicy.STATELESS );
//....
}
}
И базовая аутентификация:
@Configuration
@EnableWebSecurity
public class SecurityWebConfig extends WebSecurityConfigurerAdapter {
@Override
public void configure( HttpSecurity http ) throws Exception {
http.sessionManagement().sessionCreationPolicy( SessionCreationPolicy.STATELESS );
//....
}
}
Я не знаю, уместно ли это делать вобе конфигурации.
Теперь, когда я отправляю запрос на защищенный путь с аутентифицированным клиентом (включая токен доступа).Заголовки ответа содержат JSESSIONID
что-то вроде
set-cookie:JSESSIONID=A3E6E26C28916C5D95795E934F15C8F1
Это нормальное поведение?
Чтобы продолжить мои тесты, я сделал это (чтобы получить текущего подключенного пользователя):
@RestController
@RequestMapping( "/protected" )
@Slf4j
@AllArgsConstructor
public class ChicoweursToUIController {
private UIService service;
@GetMapping
public UserDTO findUser( OAuth2Authentication authentication, HttpSession session ) {
log.info( "Connected user: {}", authentication.getUserAuthentication().getName() );
log.info( "Is session null: {}", session==null );
return service.findUser(authentication.getUserAuthentication().getName() );
}
}
Результаты журнала:
Connected user: username@mail.com
Is session null: false
Так почемуHttpSession
не равно нулю?
На мой взгляд, я подумал, что Spring Security Context использует сеанс для получения аутентифицированного пользователя, т.е. если сеанс отключен, контекст безопасности не может найти текущего пользователя.Я ошибся?Может ли кто-нибудь разъяснить мне эти моменты, пожалуйста?
И, наконец, могу ли я ВСЕГДА положиться на OAuth2Authentication
, чтобы найти текущего подключенного клиента и пользователя, даже если сеанс отключен?
Большое спасибо