세션이 만료되면 로그인 페이지의 인스턴스 코드로 자동 이동
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이 만료되면 자동으로 로그인 페이지로 넘어가는 실례 코드입니다. 여러분께 도움이 되었으면 합니다. 더 많은 내용을 알고 싶으시면 저희 사이트를 주목해 주십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
redis-rails의 세션 만료 거동을 확인하고 플레이로컬로 사이트에 액세스하는 것으로 3개월의 기한 첨부 세션 데이터가 생성되는 설정을 하고 있다. redis 시작 command DB1 선택(설정에 따라 다름) redis-commands 사이트에 접속, 키 일람을 취...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.