2016-11-07 4 views
1

Я следовал this учебник для реализации функции mem-me с MongoDB.Весна помнить-меня с MongoDB не удаляет токены

Этикетки сохраняются в базе данных, когда я нажимаю флажок помнить на странице входа. Если я удалю запись db вручную и срок действия файла cookie JSESSIONID maxage истекает, я выхожу из системы, и если JSESSIONID истек, а cookie-файл-помнят - нет, я все равно зарегистрирован, и это замечательно.

Все работает хорошо, но у меня есть вопрос. Функция removeUserTokens никогда не вызывается, должен ли я вручную удалить запись маркера из базы данных? Если да, где я должен это реализовать?

спасибо.

ответ

0

После поиска это немного больше, я обнаружил, что, когда я выйти из системы и с этой моей конфигурации:

http.authorizeRequests().antMatchers("/signup", "/about").permitAll().antMatchers("/doctor/**") 
      .hasRole("DOCTOR").anyRequest().authenticated().and().rememberMe().rememberMeParameter("remember-me") 
      .tokenRepository(tokenRepository).tokenValiditySeconds(1209600).and().formLogin().loginPage("/login") 
      .failureUrl("/login?error=true").permitAll().and().logout().logoutUrl("/logout") 
      .deleteCookies("JSESSIONID").invalidateHttpSession(true).logoutSuccessUrl("/login").permitAll();.... 

метод removeUserTokens вызывается и связанный маркер удаляется из БД. Я думаю, что трюк сделан:

.logout().logoutUrl("/logout") 
      .deleteCookies("JSESSIONID").invalidateHttpSession(true) 

Кроме того, как было сказано выше notionquest я добавил работу Spring хрон для запуска каждую пятницу в 3 часа ночи, в случае чего-то остается в БД.

@Scheduled(cron = "0 0 3 * * FRI") 
public void doScheduledWork() { 
    Calendar calendar = Calendar.getInstance(); 
    calendar.add(Calendar.WEEK_OF_MONTH, -2); 

    tokenRepository.deleteBeforeDated(calendar.getTime()); 
    logger.info("INFO", "Cron job runed at " + new Date() + " until " + calendar.getTime() + " !"); 
} 
1

Он должен быть удален вручную (например, периодическим процессом) за Java doc.

PersistentTokenBasedRememberMeServices

Обратите внимание, что в то время как этот класс будет использовать дату знак был создан для проверки, является ли старше, чем настроенным tokenValiditySeconds собственности представленного печенья и отрицать аутентификации в данном случае, это не будут удалять эти токены из хранилища. Соответствующий пакетный процесс должен периодически запускаться для удаления истекших токенов из базы данных.

Абстракция (PersistentTokenRepository), используемая PersistentTokenBasedRememberMeServices для хранения постоянных токенов входа для пользователя.