2015-07-13 3 views
0

Я не могу использовать Spring Security LogoutSuccessHandler, но только в моем текущем проекте. Раньше все рабочие правильно, но теперь его не использовали.LogoutSuccessHandler не работает для Spring Security

Вот класс:

import org.springframework.security.core.Authentication; 
import org.springframework.security.web.authentication.logout.SimpleUrlLogoutSuccessHandler; 
import org.springframework.stereotype.Component; 

import javax.servlet.ServletException; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import java.io.IOException; 

@Component("customLogoutSuccessHandler") //or implements LogoutSuccessHandler 
public class CustomLogoutSuccessHandler extends SimpleUrlLogoutSuccessHandler { 
    @Override 
    public void onLogoutSuccess(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Authentication authentication) throws IOException, ServletException { 
     System.err.println("LOGOUT HANDLER HERE"); 
    } 
} 

А вот мой XML конфигурации

<security:http auto-config="false" >    
      <security:logout logout-url="/logout" success-handler-ref="customLogoutSuccessHandler"/> 
      <security:form-login login-page="/login" default-target-url="/"/> 
      <security:csrf/> 
</security:http> 

Что не так с кодом? метод onLogoutSuccess никогда не запускается, даже если я вышел из системы:

@RequestMapping(value = "/logout") 
public String logout(){ 
    SecurityContextHolder.clearContext(); 
    return "redirect:/"; 
} 

Почему?

+0

Возможный дубликат [сеанс сеанса Spring Security не отменен \ [SOLVED \]] (http://stackoverflow.com/questions/29811266/spring-security-logout-session-is -not-invalidated-solve) –

ответ

1

Вы не много разбираетесь в методе logout(), поэтому, возможно, его проще просто удалить - /logout является исходным кодом выхода по умолчанию в весенней безопасности, и он должен служить ему (контекст очистки) для вас. Вероятно, вы нарушаете цепочку фильтров, используя redirect:/

+0

Да, но проблема в том, что когда я удаляю метод сопоставления/выхода из системы (из контроллера), ничего не происходит, и я не могу выйти из системы. Я понятия не имею, почему. Добавление/logout mapped-метода - единственный способ, который я нашел для выхода из системы. Я также прокомментировал метод, и метод onLogoutSuccess все еще не был выполнен. – azalut

+0

/logout использует POST по умолчанию. Взгляните сюда http://stackoverflow.com/questions/24108585/spring-security-java-config-not-generating-logout-url – freakman

+0

О, мой бог, в этом была проблема. Спасибо @freakman btw ты знаешь, как настроить его с помощью xml? я могу, конечно, использовать форму, но он создал шаблонный код, используя GET было бы более удобно – azalut