세션이 만료되면 로그인 페이지의 인스턴스 코드로 자동 이동

최근 프로젝트에 대한 수요가 있습니다. 자동 로그인 기능을 실현하려면 관련 자료를 조회하여 session 감청으로 하려고 합니다. 다음은 감청기를 설정하는 방법을 보여 줍니다.
1. 프로젝트의 웹에서xml 파일에 다음 코드를 추가합니다.

<!-- Session -->
<listener>
<listener-class>   </listener-class>
</listener>
2. 자바 클래스를 작성합니다.

public class SessionListener implements HttpSessionListener {
public void sessionCreated(HttpSessionEvent arg0) {
// session 
SimpleDateFormat simpleFormat = new SimpleDateFormat("mm-ss-ms");
String nowtimes = simpleFormat.format(new Date());
User u=null;
//System.out.println(" 。。  :"+nowtimes+"_"+u);
HttpSession ses= arg0.getSession();
String id=ses.getId()+"_"+ses.getCreationTime();
}
public void sessionDestroyed(HttpSessionEvent arg0) {
// session 
SimpleDateFormat simpleFormat = new SimpleDateFormat("mm-ss-ms");
String nowtimes = simpleFormat.format(new Date()); 
//System.out.println("session 。。  : "+nowtimes);
}
}
설정이 끝난 후session이 효력을 상실한 후sessionDestroyed 방법에 성공적으로 들어가서 페이지 이동 조작을 하려고 합니다. 갑자기 점프를 어떻게 쓰는지 깜짝 놀랐습니다. 계속 인터넷에 접속해서 신에게 가르침을 청했습니다. 이 감청은 백그라운드 통계 처리를 한 것이기 때문에 페이지 이동 기능을 실현할 수 없습니다.
이 방법을 포기할 수밖에 없어요. 필터로 실현하기 시작했어요.
1、web.xml에 필터 설정 추가

<filter>
<filter-name>sessionFilter</filter-name>
<filter-class>com.orchestrall.web.helper.session.SessionFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>sessionFilter</filter-name>
<url-pattern>/actions/*</url-pattern>
</filter-mapping>
2. 새 SessionFilter 클래스로 Filter 인터페이스를 구현합니다.

public class SessionFilterimplements Filter {
public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpServletResponse httpResponse = (HttpServletResponse) response;
HttpSession session = httpRequest.getSession();
//  url
String loginUrl = httpRequest.getContextPath() + "/admin/login.jsp";
String url = httpRequest.getRequestURI();
String path = url.substring(url.lastIndexOf("/"));
//  ,ajax , 
if (path.indexOf(".action") != -1
&& session.getAttribute("LOGIN_SUCCESS") == null) {
//  ajax 
if (httpRequest.getHeader("x-requested-with") != null
&& httpRequest.getHeader("x-requested-with")
.equalsIgnoreCase("XMLHttpRequest")) {
httpResponse.addHeader("sessionstatus", "timeOut");
httpResponse.addHeader("loginPath", loginUrl);
chain.doFilter(request, response);//  , 
} else {
String str = "<script language='javascript'>alert(' , ');"
+ "window.top.location.href='"
+ loginUrl
+ "';</script>";
response.setContentType("text/html;charset=UTF-8");//  
try {
PrintWriter writer = response.getWriter();
writer.write(str);
writer.flush();
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
} else {
chain.doFilter(request, response);
}
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
3, 클라이언트 JS, ajax 요청 세션 시간 초과에 사용
jquery

<script type="text/javascript">
$(document).ajaxComplete(function(event, xhr, settings) { 
if(xhr.getResponseHeader("sessionstatus")=="timeOut"){ 
if(xhr.getResponseHeader("loginPath")){
alert(" , !");
window.location.replace(xhr.getResponseHeader("loginPath")); 
}else{ 
alert("  !"); 
} 
} 
}); 
</script>
extjs에 대한 aax 요청

Ext.Ajax.on('requestcomplete',checkUserSessionStatus, this);
function checkUserSessionStatus(conn,response,options){
if(response.getResponseHeader("sessionstatus") == 'timeout'){
if(response.getResponseHeader("loginPath")){
alert(" , !");
window.top.location.href = response.getResponseHeader("loginPath");
}else{
alert("  !");
}
}
}
만약 aax 요청이 전역적인 방법의 영향을 받지 않도록 한다면, $를 사용할 수 있습니다.ajax () 방법을 사용할 때 매개 변수의 global을false로 설정합니다. jquery 코드는 다음과 같습니다.

$.ajax({
url:"test.html",
global:false// ajax 
})
상기 서술한 것은 여러분께 소개해 드린 Session이 만료되면 자동으로 로그인 페이지로 넘어가는 실례 코드입니다. 여러분께 도움이 되었으면 합니다. 더 많은 내용을 알고 싶으시면 저희 사이트를 주목해 주십시오!

좋은 웹페이지 즐겨찾기