Веб-приложение My Spring Boot не имеет состояния. Вместо сеансового повара ie я создаю JWT-повара ie после проверки подлинности и проверяю его при каждом последующем запросе. Реализация работает. Для справки, в его пользовательском классе WebSecurityConfigurerAdapter
вы найдете конфигурацию, подобную следующей:
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS) // Disable the default session cookie; we'll be using a JWT authentication cookie instead.
.and()
.addFilter(new JWTAuthenticationFilter(authenticationManager())) // This filter intercepts the login, authenticates the user, and creates a JWT token in a cookie to authorize subsequent requests..
.addFilterBefore(new JWTAuthorizationFilter(), UsernamePasswordAuthenticationFilter.class) // This filter reads the JWT token from the cookie on subsequent requests, and authorizes the user (or not).
.formLogin()
.and()
// etc...
Я продолжал замечать WARN в журналах, когда пользователь впервые зашел на домашнюю страницу (или любой другой page кроме страницы входа).
2020-02-13 09:15:34.697 WARN 7956 --- [nio-8080-exec-1] o.a.c.util.SessionIdGeneratorBase : Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [541] milliseconds.
Поскольку у меня нет идентификаторов сеансов, мне не нужен этот экземпляр SecureRandom. Похоже, я также получаю нового повара JSESSIONID ie, прикрепленного к ответам! Избирательно комментируя материал, я обнаружил, что кнопка «Выход» в нижнем колонтитуле страницы запускает создание сеанса. Вот виновник:
<footer>
<form sec:authorize="isAuthenticated()" th:action="@{/logout}" method="post">
<input type="submit" value="Sign Out"/>
</form>
</footer>
Вот вопрос: Как я могу проверить в моих шаблонах Thymeleaf, аутентифицирован ли пользователь, без , инициировавшего случайное создание сеанса ? Я хочу вернуть свои 541 миллисекунду!