2015-12-08 8 views
0

У меня есть исследование в SE об этих проблемах и не найдено ответа на решение проблемы.Ожидаемый токен CSRF не найден. Срок действия вашей сессии истек?

Из моей проблемы с представлением, каждый раз, когда я выходим из сеанса в Интернете и открываем новую вкладку, эта ошибка всегда срабатывает. Я думаю, что управление сеансом не позволяет токен csrf отображаться на другой вкладке в браузере.

Когда я отслеживаю JSESSIONID в консоли хром-куки, он показывает, что никакого ответа не было получено по сравнению с обычным успешным логином, который дает ответ JSESSIONID.

Это моя страница Войти Форма:

<form name='loginForm' action="<c:url value='/login' />" method="post"> 
     <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" /> 
     <div id="username_input"> 
      <div id="username_inputleft"></div> 
      <div id="username_inputmiddle">     
       <input type="text" name="username" id="url" placeholder="<spring:message code="login.name" />" > 
       <img id="url_user" src="<c:url value="/resources/images/login/mailicon.png"/>" alt="">    
      </div> 
      <div id="username_inputright"></div> 
     </div> 
     <div id="password_input"> 
      <div id="password_inputleft"></div> 
      <div id="password_inputmiddle">     
       <input type="password" name="password" id="url" placeholder="<spring:message code="login.password" />" > 
       <img id="url_password" src="<c:url value="/resources/images/login/passicon.png"/>" alt="">    
      </div> 
      <div id="password_inputright"></div> 
     </div> 
     <div id="submit">    
      <input type="image" src="<c:url value="/resources/images/login/submit_hover.png"/>" id="submit1" value="Sign In" />     
      <input type="image" src="<c:url value="/resources/images/login/submit.png"/>" id="submit2" value="Sign In"/>    
     </div>   
     </form> 

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

.sessionManagement() 
     .sessionFixation() 
     .newSession() 
     .maximumSessions(1); 

но почему-то я не могу решить эту проблему. Я надеюсь, что кто-то может помочь.

Update:

I выход из системы по этой ссылке:

<a href="<c:url value="/logout" />"> 
<spring:url value="/resources/images/logout.jpg" var="logoutimg" /> 
<img src="${logoutimg}"> 
<spring:url value="/resources/images/logout_txt.jpg" var="logouttxtimg" /> 
<img class="hidden-xs" src="${logouttxtimg}" /> 
</a> 
+0

Другая вкладка ISN Новый сеанс - это тот же сеанс. Также КАК вы делаете выход? Покажите ссылку/форму, которую вы используете. –

+0

Я думаю, что новая вкладка также не влияет на сеанс, но она не работает, только когда я открываю та же ссылка на новой вкладке, она работает нормально на той же вкладке – FreezY

+0

Вам понадобится новый браузер, все будет общим. Таким образом, вам нужно использовать Chrome и Firefox, например (сначала выключить хром). Открытие новой вкладки или щелчка по ссылке - это то же самое, что это не новый браузер. –

ответ

0

По какой-то причине, мы должны использовать/выход из системы или/j_spring_security_logout для входа текущего пользователя из. Если мы будем использовать другой метод для выхода из системы программно, процесс выхода не будет завершен, если я не воспользуюсь предоставленным url. Спасибо за помощь. Если кто-то выйдет с выходом для выхода из программы полностью, не затрагивая безопасность весны, пожалуйста, скажите мне тогда. Благодаря

0

Попробуйте это в контроллере

@RequestMapping("/Logout") 
public ModelAndView processLogout(HttpServletRequest request, HttpServletResponse response) { 
    Authentication auth = SecurityContextHolder.getContext().getAuthentication(); 
    if (auth != null) { 
     new SecurityContextLogoutHandler().logout(request, response, auth); 
    } 
    mv = new ModelAndView(); 
    mv.setViewName("Login"); 
    return mv; 
} 

и на странице входа вставьте

<input type="hidden" name="${_csrf.parameterName}" 
        value="${_csrf.token}" /> 

Не забудьте добавить это в конфигурации системы безопасности

<security:logout delete-cookies="JSESSIONID" 
     logout-success-url='/login?logout' logout-url="/Logout" 
     invalidate-session="true" /> 
Смежные вопросы