se c: authorize = "isAuthenticated ()" запускает "создание экземпляра SecureRandom" в веб-приложении Spring Boot без сохранения состояния - PullRequest
0 голосов
/ 13 февраля 2020

Веб-приложение 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 миллисекунду!

...