2013-12-14 2 views
0

내가 무엇을해도 로그 아웃 할 수 없습니다. 멤버 역할을 통해서만 볼 수있는 메뉴가 있습니다. 나는 세션의 무효화뿐만 아니라 Spring 문서를 통한/j_spring_security_logout을 시도했다 ... 홈 페이지로 앞으로 나아 갔지만 홈 페이지에는 메뉴와 자격 증명이 나타난다. 따라서 로그 아웃이 작동하지 않습니다. 여기에 내 Spring Security.xml 파일 항목이있다.Spring 3 보안을 통한 로그 아웃

<logout logout-url="/logout"/> 
<logout logout-url="/j_spring_security_logout" logout-success-url="/home" 
     delete-cookies="JSESSIONID" invalidate-session="true"/> 

자세히 알 수 있듯이 두 가지 모두를 시도했습니다. 다음은 로그 아웃 컨트롤러입니다.

@RequestMapping(value = "/logout", method=RequestMethod.GET) 
public String logout(HttpServletRequest request, HttpServletResponse response) { 
    logger.info("Logging out!"); 

    response.setHeader("pragma", "no-cache");    
    response.setHeader("Cache-control", "no-cache, no-store, must-revalidate"); 
    response.setHeader("Expires", "0"); 

    Cookie jSessionCookie = new Cookie("JSESSIONID", null); 
    jSessionCookie.setMaxAge(0); 
    response.addCookie(jSessionCookie); 
    Cookie activityIdCookie = new Cookie("activityId", null); 
    activityIdCookie.setMaxAge(0); 
    response.addCookie(activityIdCookie); 

    request.getSession().invalidate(); //Attempt to logout user.  

    return ("redirect://"); 
} 

도움을 주시면 대단히 감사하겠습니다.

<logout logout-url="/logout" logout-success-url="/home" /> 

그냥 사용자 요청에게 URL http://localhost/yourApp/logout을 보자

+0

* 로그 아웃 *은 보안 필터 체인에 의해 처리됩니다 (스프링 보안의 거의 모든 것처럼). 실제 * logout * 요청은 디스패처 서블릿으로 절대 전달하지 않습니다. 수동으로 로그 아웃 논리를 구현하지 마십시오 (세션 무효화 등). * Ralph의 * 대답을 참조하십시오 ... –

답변

1

당신은 하나의 로그 아웃 핸들러 및 추가 컨트롤러가 필요합니다.

+0

하지만 작동하지 않습니다 ... – user3103336

+0

내가 그랬어 .. 홈페이지로 데려다 .. 문제는 사용자가 여전히 로그인되어 있습니다. 신탁 계정이 아직 있습니다. – user3103336

+0

이것이 작동하지 않으면 문제가 다른 곳에서 발생해야합니다. 바람둥이를 사용합니까? Tomcat 관리자는 세션을 볼 수있는 기능이 있습니다. Spring Security는 사용자 정보를 세션에 저장합니다. Tomact 관리자를 사용하여 로그 아웃시 세션 ID가 변경되는지 확인하고 스프링 보안에 의해 저장된 정보를 살펴볼 수 있습니다. – Ralph

관련 문제