Добрый день!
Я создаю небольшой веб сервис для своего приложения на 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);
}
Подскажите, что я не так делаю, а то заставлять людей логиниться каждые пол часа в приложении, как то не очень хорошо.