2011-09-10 2 views
4

세션이 만료되면 사용자를 로그 오프하는 세션 유효성 검사 필터가 있습니다.세션이 만료되면 사용자를 로그 오프하는 세션 유효성 검사 필터

여기 코드 조각이 있지만 작동하지 않습니다. 작동하지 않는다는 것은 세션이 만료 되더라도 로그인 페이지로 리디렉션하지 않는다는 것을 의미합니다.

이 문제를 해결하는 데 도움을주십시오.

public void doFilter(ServletRequest request, ServletResponse response, 
     FilterChain chain) throws IOException, ServletException { 
    HttpServletResponse res = (HttpServletResponse) response; 
    HttpServletRequest req = (HttpServletRequest) request; 

    HttpSession s = req.getSession(false); 

    if (s==null) 
    { 
     //redirect to login page with session expiry message 
    } else { 
     chain.doFilter(request, response); 
    } 
} 
+0

리디렉션 블록에서 sesion ID를 확인 했습니까? 그것은 변화하고 있습니까? 소프트/프레임 워크가 getSession (true)을 어딘가에 호출 할 수 있습니까? – Osw

답변

9

나는 세션이 만료되어 사용자가 로그 오프 세션 검증 필터가 있습니다.

이것은 솔직히 말 그대로입니다. 로그인 한 사용자를 세션의 속성으로 저장하고 세션에서 로그인 한 사용자의 존재를 기반으로 "로그인 한"상태를 가로 채면 사용자를 수동으로 로그 아웃 할 필요가 없습니다. 세션이 만료되었습니다. 세션이 만료되면 모든 속성이 사라 지므로 사용자는 "자동으로"로그 아웃됩니다.

다음은 로그인 폼 JSP의 POST 제출에 의해 호출되는 servletdoPost()의 사용자를 로그인하는 방법의 예입니다.

String username = request.getParameter("username"); 
String password = request.getParameter("password"); 
User user = userService.find(username, password); 

if (user != null) { 
    request.getSession().setAttribute("user", user); // Login user. 
    response.sendRedirect("userhome"); // Redirect to user home page. 
} else { 
    request.setAttribute("errormessage", "Unknown login, try again"); // Set error message. 
    request.getRequestDispatcher("/WEB-INF/login.jsp").forward(request, response); // Redisplay login form. 
} 

로그인이 유효한 경우 사용자는 세션 속성으로 저장됩니다. 코드의 나머지 부분은 사용자가 로그인했는지 여부를 확인하기 위해 null인지 아닌지를 확인할 수 있습니다. 세션이 만료 될 때마다 자동으로 null이됩니다.


세션이

내가 초기 기능 요구 사항이 더 의미가 없기 때문에 일을하려고하는지 아무 생각이 만료 된 경우에도 로그인 페이지로 리디렉션되지 않는다 . 그러나 세션 만료 및 로그인 페이지와 관련된 두 가지 공통 기능 요구 사항이 있습니다.

  1. ? "그는-로그인에서 사용자로 제한되는 페이지를 요청하면 내가 로그인 페이지로 방문자를 리디렉션 어떻게"나는 당신이 실제로 역시 그들 중 하나가 필요하다고 생각

    filter을 만들어 제한된 페이지의 (일반적인) URL 패턴에 매핑해야합니다. 필터에서 사용자가 세션에 있는지 확인한 다음 체인을 계속 진행하고 로그인 페이지로 리디렉션합니다. "세션이 만료 될 때 자동으로 로그인 페이지로 현재 열려있는 페이지를 리디렉션 어떻게해야합니까?"

    @Override 
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { 
        HttpServletRequest request = (HttpServletRequest) req; 
        HttpServletResponse response = (HttpServletResponse) res; 
        HttpSession session = request.getSession(false); 
    
        if (session == null || session.getAttribute("user") == null) { 
         response.sendRedirect("login"); // No logged-in user found, so redirect to login page. 
        } else { 
         chain.doFilter(req, res); // Logged-in user found, so just continue request. 
        } 
    } 
    

  2. HttpSession#getMaxInactiveInterval()과 함께 <meta> 새로 고침을 사용하십시오.세션이 만료 될 때마다

    <meta http-equiv="refresh" content="${pageContext.session.maxInactiveInterval};url=sessionexpired.jsp"> 
    

    자동으로 주어진 url에 현재 페이지를 리디렉션합니다. ${pageContext.session.maxInactiveInterval} 표현식은 초 단위로 세션 만료 시간을 인라인합니다. 정확히 content 속성이 필요합니다.

+0

나는 태그를 가졌지 만, 즉각적으로 지정한 페이지로 리디렉션됩니다. – Makky

+0

@Makky : 분명히 '0'을 인쇄했습니다. – BalusC

+0

확인. 세션이 만료되면 자동으로 리디렉션하는 방법을 안내해 주시겠습니까? – Makky

관련 문제