@andrew_d

Как увеличить продолжительность сесси в Spring Security?

Добрый день!
Я создаю небольшой веб сервис для своего приложения на spring-boot.
У меня возникла проблема с продолжительностью сессии авторизованных пользователей.
Устанавливал в properties
server.session.timeout=2678400
Но это не помогает. Через 30 минут бездействия пользователь получает 403 и снова необходимо логиниться.

Пытался реализовать remember-me.
Мой конфиг
http
                .csrf().disable()
                .rememberMe()
                    .tokenRepository(persistenceTokenRepository)
                    .rememberMeCookieName("time_manager_remember_me")
                    .tokenValiditySeconds(60 * 60 * 24 * 3)
                    .alwaysRemember(true)
                    .useSecureCookie(true)
                    .and()
                .authorizeRequests()
                    .antMatchers("/", "/home").permitAll()
                    .antMatchers("/static/").hasRole("USER")
                    .antMatchers("/service/users").hasRole("ADMIN")
                    .antMatchers("/api/**").hasRole("USER")
                    .antMatchers("/public/**").permitAll()
                    .antMatchers("/login").permitAll()
                    .anyRequest().authenticated()
                    .and()
                .logout()
                    .permitAll();

Но оно не работает. Сессии создаются.
Пользователь получает две cookie "JSESSIONID" и "remember-me".
Таблица "persistent_logins" наполняется, но вот только сессия не продлевается. Пользователя разлогинивает через пол часа, как и раньше.

Пользователей авторизую таким способом:

@RequestMapping(value = "/login", method = RequestMethod.POST)
	public ResponseEntity<?> loginUser(@RequestParam("email") String userName,
                                        @RequestParam("password") String password,
                                       HttpServletRequest request,
                                       HttpServletResponse servletResponse){

	    User user = usersService.loadUserByUsername(userName);
	    if (user != null){
	        if (new BCryptPasswordEncoder().matches(password, user.getPassword())){
                Authentication auth = new UsernamePasswordAuthenticationToken(user, null, user.getAuthorities());
                SecurityContextHolder.getContext().setAuthentication(auth);
                persistentTokenBasedRememberMeServices.loginSuccess(request, servletResponse, auth);
                return new ResponseEntity<>(user, HttpStatus.OK);
            }
        }
        return new ResponseEntity<>(HttpStatus.FORBIDDEN);
    }


Подскажите, что я не так делаю, а то заставлять людей логиниться каждые пол часа в приложении, как то не очень хорошо.
  • Вопрос задан
  • 1420 просмотров
Пригласить эксперта
Ответы на вопрос 1
jaxtr
@jaxtr
JavaEE/Spring-разработчик
Если ты разворачиваешь приложение в сервлет-контейнере, то в web.xml нужно дополнительно указать время жизни сессии:
<session-config>
        <session-timeout>60</session-timeout>
</session-config>


Пример для 60 минут, если нужна бесконечная сессия, то -1
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
22 нояб. 2024, в 03:54
1500 руб./за проект
22 нояб. 2024, в 02:56
10000 руб./за проект
22 нояб. 2024, в 00:55
500 руб./за проект