최근 자동 로그인 기능을 구현해야 하는 프로젝트를 진행했습니다. 관련 정보를 상담한 후 세션 모니터링을 사용하여 이를 수행할 계획이었습니다.
1. 프로젝트의 web.xml 파일에 다음 코드를 추가합니다.
<!--添加Session监听器--> <listener> <listener-class> 监听器路径 </listener-class> </listener>
2. Java 클래스를 작성합니다.
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); } }
설정이 완료되고 세션이 만료된 후 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 클래스를 생성하고 필터 인터페이스를 구현합니다.
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. Ajax 요청 세션 시간 초과에 사용되는 클라이언트 JS
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 ajax 요청의 경우
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("请求超时请重新登陆 !"); } } }
Ajax 요청이 전역 메서드의 영향을 받지 않는 경우 $.ajax() 메서드를 사용할 때 매개 변수의 전역을 false로 설정할 수 있습니다. jquery 코드는 위에서 언급한
$.ajax({ url:"test.html", global:false//不触发全局ajax事件 })
입니다. 세션이 만료된 후 자동으로 로그인 페이지로 이동하기 위해 편집기에서 소개하는 예제 코드입니다. 자세한 내용을 알고 싶으시면 PHP 중국어 웹사이트를 주목해 주세요.
세션이 만료된 후 자동으로 로그인 페이지로 이동하는 예제 코드에 대한 더 많은 관련 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는
