Size: a a a

Spring Framework and more

2019 July 31

RS

Rostyslav Shevtsiv in Spring Framework and more
Привет народ. Написал свой PersistentTokenRepository, только на JPA, так как дефолтного нет.
И вот проблема:
Если залогинится и инвалидейтнуть сессию(с помощью закрытия браузера, например), а потом опять зайти на сайт, то получаю такую ошибку:
Invalid remember-me token (Series/token) mismatch. Implies previous cookie theft attack.
НО: Если перед заходом на сайт, предварительно нажать F12 в Chrome, то есть открыть DevTools, то всё работает как надо! Почему такой цирк происходит, есть у кого идеи?
У меня была такая идея:
Почти одновременно отсылаются 2 запроса, один на логин, а второй на какой-нибудь ресурс и вот из-за этого второго спринг ругается, а F12 тут при том, что поскольку он трекает все запросы, то он их "замедляет", получается они отправляются не одновременно и спринг успевает обработать первый запрос, поэтому ошибки нет. Но исключил из конфига ВСЕ ссылки, а проблема не исчезла. Помогите, пожалуйста.
источник

RS

Rostyslav Shevtsiv in Spring Framework and more
Rostyslav Shevtsiv
Привет народ. Написал свой PersistentTokenRepository, только на JPA, так как дефолтного нет.
И вот проблема:
Если залогинится и инвалидейтнуть сессию(с помощью закрытия браузера, например), а потом опять зайти на сайт, то получаю такую ошибку:
Invalid remember-me token (Series/token) mismatch. Implies previous cookie theft attack.
НО: Если перед заходом на сайт, предварительно нажать F12 в Chrome, то есть открыть DevTools, то всё работает как надо! Почему такой цирк происходит, есть у кого идеи?
У меня была такая идея:
Почти одновременно отсылаются 2 запроса, один на логин, а второй на какой-нибудь ресурс и вот из-за этого второго спринг ругается, а F12 тут при том, что поскольку он трекает все запросы, то он их "замедляет", получается они отправляются не одновременно и спринг успевает обработать первый запрос, поэтому ошибки нет. Но исключил из конфига ВСЕ ссылки, а проблема не исчезла. Помогите, пожалуйста.
А вот так выглядит репозиторий, вроде ничего особенного и ошибок не замечаю:
https://pastebin.com/2d0YBW9u
источник

G

Grigori in Spring Framework and more
Rostyslav Shevtsiv
Привет народ. Написал свой PersistentTokenRepository, только на JPA, так как дефолтного нет.
И вот проблема:
Если залогинится и инвалидейтнуть сессию(с помощью закрытия браузера, например), а потом опять зайти на сайт, то получаю такую ошибку:
Invalid remember-me token (Series/token) mismatch. Implies previous cookie theft attack.
НО: Если перед заходом на сайт, предварительно нажать F12 в Chrome, то есть открыть DevTools, то всё работает как надо! Почему такой цирк происходит, есть у кого идеи?
У меня была такая идея:
Почти одновременно отсылаются 2 запроса, один на логин, а второй на какой-нибудь ресурс и вот из-за этого второго спринг ругается, а F12 тут при том, что поскольку он трекает все запросы, то он их "замедляет", получается они отправляются не одновременно и спринг успевает обработать первый запрос, поэтому ошибки нет. Но исключил из конфига ВСЕ ссылки, а проблема не исчезла. Помогите, пожалуйста.
JdbcTokenRepositoryImpl не подходит?
источник

RS

Rostyslav Shevtsiv in Spring Framework and more
Grigori
JdbcTokenRepositoryImpl не подходит?
Нет, в проекте везде JPA, поэтому использовать хочу только его.
источник

G

Grigori in Spring Framework and more
я вот что-то не уловил чем jdbc не устраивает? при чем тут JPA?
источник

RS

Rostyslav Shevtsiv in Spring Framework and more
Jpa тут для того, что бы использовать hibernate для работы с базой.
источник

RS

Rostyslav Shevtsiv in Spring Framework and more
А не JDBC, соответственно.
источник

G

Grigori in Spring Framework and more
а вам обязательно нужна прослойка хиберовская?
источник

RS

Rostyslav Shevtsiv in Spring Framework and more
Да. Если бы проблему можно было решить переключением на JDBC - я бы так и сделал.
источник

G

Grigori in Spring Framework and more
я ж не возражаю, мне просто интересно. По сути вопроса мне нечего сказать.
источник

RS

Rostyslav Shevtsiv in Spring Framework and more
Ну и не в JPA же тут проблема, так как в базу всё пишется как надо, из базы вытаскивается тоже. Вот с F12 работает, а без него - нет. И вот этот последний пункт мне вообще непонятен.
источник

RS

Rostyslav Shevtsiv in Spring Framework and more
Grigori
я ж не возражаю, мне просто интересно. По сути вопроса мне нечего сказать.
Да я учусь просто, вот поэтому и не вариант.
источник

RS

Ruslan Stelmachenko in Spring Framework and more
Rostyslav Shevtsiv
Привет народ. Написал свой PersistentTokenRepository, только на JPA, так как дефолтного нет.
И вот проблема:
Если залогинится и инвалидейтнуть сессию(с помощью закрытия браузера, например), а потом опять зайти на сайт, то получаю такую ошибку:
Invalid remember-me token (Series/token) mismatch. Implies previous cookie theft attack.
НО: Если перед заходом на сайт, предварительно нажать F12 в Chrome, то есть открыть DevTools, то всё работает как надо! Почему такой цирк происходит, есть у кого идеи?
У меня была такая идея:
Почти одновременно отсылаются 2 запроса, один на логин, а второй на какой-нибудь ресурс и вот из-за этого второго спринг ругается, а F12 тут при том, что поскольку он трекает все запросы, то он их "замедляет", получается они отправляются не одновременно и спринг успевает обработать первый запрос, поэтому ошибки нет. Но исключил из конфига ВСЕ ссылки, а проблема не исчезла. Помогите, пожалуйста.
проверьте галочку Disable Cache в F12. возможно она установлена, и тогда различие поведения можно объяснить этим.
источник

RS

Rostyslav Shevtsiv in Spring Framework and more
Ruslan Stelmachenko
проверьте галочку Disable Cache в F12. возможно она установлена, и тогда различие поведения можно объяснить этим.
Она выключена. Но только когда DevTools открыт(Так в popup пишет). Но да, этим можно попробовать обьяснить такое поведение. Сейчас попробую пощелкать её и протестировать.
источник

RS

Rostyslav Shevtsiv in Spring Framework and more
Rostyslav Shevtsiv
Она выключена. Но только когда DevTools открыт(Так в popup пишет). Но да, этим можно попробовать обьяснить такое поведение. Сейчас попробую пощелкать её и протестировать.
Попереключал, но поведение такое же, как и раньше. То есть, важно только то, что DevTools-окно открыто, тогда работает, вне зависимости от галочки на Disable Cache. А если зайти на сайт без F12, то тут же перестает работать.
Возможно, мне стоит поискать подобные галочки в DevTools.
источник

RS

Rostyslav Shevtsiv in Spring Framework and more
Rostyslav Shevtsiv
Попереключал, но поведение такое же, как и раньше. То есть, важно только то, что DevTools-окно открыто, тогда работает, вне зависимости от галочки на Disable Cache. А если зайти на сайт без F12, то тут же перестает работать.
Возможно, мне стоит поискать подобные галочки в DevTools.
Галочки потыкал, но ничего не изменилось. У меня есть еще такая идея:
Продебажить класс спринга, в том месте, где кидается этот ексепшн:
// We have a match for this user/series combination
if (!presentedToken.equals(token.getTokenValue())) {
 // Token doesn't match series value. Delete all logins for this user and throw
 // an exception to warn them.
 tokenRepository.removeUserTokens(token.getUsername());

 throw new CookieTheftException(
   messages.getMessage(
     "PersistentTokenBasedRememberMeServices.cookieStolen",
     "Invalid remember-me token (Series/token) mismatch. Implies previous cookie theft attack."));
}

Там есть обьект реквеста и я смогу посмотреть, что за реквест и сравнить их, при F12 и без него, верно? Вот только брейкпоинт в IntelliJ IDEA не срабатывает, хоть и исходники прикреплены. Наверное, так происходит из-за того, что спринг ранится внутри апликейшн сервера?
источник

AT

Arqin T in Spring Framework and more
Rostyslav Shevtsiv
Галочки потыкал, но ничего не изменилось. У меня есть еще такая идея:
Продебажить класс спринга, в том месте, где кидается этот ексепшн:
// We have a match for this user/series combination
if (!presentedToken.equals(token.getTokenValue())) {
 // Token doesn't match series value. Delete all logins for this user and throw
 // an exception to warn them.
 tokenRepository.removeUserTokens(token.getUsername());

 throw new CookieTheftException(
   messages.getMessage(
     "PersistentTokenBasedRememberMeServices.cookieStolen",
     "Invalid remember-me token (Series/token) mismatch. Implies previous cookie theft attack."));
}

Там есть обьект реквеста и я смогу посмотреть, что за реквест и сравнить их, при F12 и без него, верно? Вот только брейкпоинт в IntelliJ IDEA не срабатывает, хоть и исходники прикреплены. Наверное, так происходит из-за того, что спринг ранится внутри апликейшн сервера?
можно сделать временный интерсептор, чтобы эти самые реквесты перехватывать
источник

RS

Rostyslav Shevtsiv in Spring Framework and more
Arqin T
можно сделать временный интерсептор, чтобы эти самые реквесты перехватывать
Вот такое сделал:
    @Bean
   public CommonsRequestLoggingFilter logFilter() {
       CommonsRequestLoggingFilter filter
               = new CommonsRequestLoggingFilter();
       filter.setIncludeQueryString(true);
       filter.setIncludePayload(true);
       filter.setMaxPayloadLength(10000);
       filter.setIncludeHeaders(false);
       filter.setAfterMessagePrefix("REQUEST DATA : ");
       return filter;
   }
источник

AT

Arqin T in Spring Framework and more
или какой-нить @ControllerAdvice
источник

RS

Rostyslav Shevtsiv in Spring Framework and more
Rostyslav Shevtsiv
Вот такое сделал:
    @Bean
   public CommonsRequestLoggingFilter logFilter() {
       CommonsRequestLoggingFilter filter
               = new CommonsRequestLoggingFilter();
       filter.setIncludeQueryString(true);
       filter.setIncludePayload(true);
       filter.setMaxPayloadLength(10000);
       filter.setIncludeHeaders(false);
       filter.setAfterMessagePrefix("REQUEST DATA : ");
       return filter;
   }
Но ничего полезного не извлек, потому что запрос в базу persitent_logins идет прежде всего, а потом загружается бутстрап, жквери и вылетает ошибка.
источник