2012-09-06 2 views
0

사용자 세션에 시간 초과가 있고 다시 로그인하려고하면 마지막으로 방문한 페이지로 리디렉션해야하는 웹 응용 프로그램이 있습니다. 세션 시간 초과의 경우에만 사용자가 로그 아웃 한 경우이 매핑이 필요하지 않습니다.Struts2 인터셉터는 세션 타임 아웃 전에 마지막 페이지를 추적합니다.

인터셉터와 응용 프로그램 범위 매핑을 사용하여 수행 할 수 있음을 알고 있습니다. 하지만 현재 사용자 URL을 업데이트하는 요격기에 대한 코드 샘플을 제공 할 수 있습니까? 또한 내 응용 프로그램 범위 개체 .. 어떻게 말하지 않으면 5 시간 relogin 그 사용자에 대한 마지막 페이지에 대한 참조를 제거 말합 ???

답변

1

HttpSessionListener (answer)을 등록하는 방법은 무엇입니까? 이렇게하면 세션이 파괴 될 때 알림을 받게되므로 마지막으로 방문한 페이지에 대한 정보를 데이터베이스에 저장할 수있는 완벽한 시간입니다.

세션 리스너는 다음과 같아야합니다

package com.rr87; 

import javax.servlet.http.HttpSessionEvent; 
import javax.servlet.http.HttpSessionListener; 

public class YourSessionListener implements HttpSessionListener { 
    @Override 
    public void sessionDestroyed(HttpSessionEvent event) { 
    // Implement logic to save last visited page to database... 
    } 
    . 
    . 
    . 
} 

의 Web.xml에 아래 코드를 추가, 세션 리스너를 등록하려면 : 답변의

<web-app ...> 
    <listener> 
      <listener-class>com.rr87.YourSessionListener</listener-class> 
    </listener> 
</web-app> 

그리고 마지막 부분. sucesfull 로그 아웃시 데이터베이스에서 마지막으로 방문한 페이지 참조를 지울 수 있습니다.

컨테이너가 입력에 호출하는 javax.servlet.http.HttpSessionEvent 객체 를 만듭니다 세션 개체에 액세스 할 트로프 HttpSessionEvent에 관한 공식 문서에서

[편집]

, HttpSessionListener 메소드. HttpSessionEvent 클래스는 리스너가 호출 할 수있는 다음과 같은 방법을 포함

HttpSession에 대해 getSession()

사용하면 같은 정보를 얻을 수있는 만들거나 가 파괴 된 세션 객체를 검색하는이 방법 원하는. javax.servlet.http.HttpSession 인터페이스에 대한 자세한 내용은 "서블릿 세션 소개"를 참조하십시오.

내가 생각하기에, 당신은 여전히 ​​'파괴 된'세션에서 데이터를 얻을 수 있다고 생각합니다.

+0

인터셉터에서 마지막으로 방문한 페이지 정보를 얻으려면 어떻게해야합니까? – rr87

+0

요청합니다 .getRequestURL() 나에게 현재 페이지 URL 정보 제공 ?? – rr87

+0

당신은 저를 잘못 이해합니다. 'YourSessionListener'는 인터셉터가 아니고 리스너입니다 ... 각 요청에 대해 발생 된 인터셉터 또는 서블릿 필터에서 마지막으로 방문한 URL을 가져 와서 세션에 저장하여 YourSessionListener에서 검색해야합니다. – PrimosK

관련 문제