2017-03-06 2 views
0

사용자가 브라우저를 새로 고침 할 때 홈 세션을 활성 상태로 유지하려면 어떻게해야합니까?페이지를 새로 고친 후 세션을 유지하는 방법

로그인 후에 홈 페이지 세션이 살아 있기 때문에. 그러나 브라우저를 새로 고침하면 다시 로그인 페이지로 돌아갑니다.

import java.io.IOException; 
    import javax.servlet.Filter; 
    import javax.servlet.FilterChain; 
    import javax.servlet.FilterConfig; 
    import javax.servlet.ServletException; 
    import javax.servlet.ServletRequest; 
    import javax.servlet.ServletResponse; 
    import javax.servlet.annotation.WebFilter; 
    import javax.servlet.http.HttpServletRequest; 
    import javax.servlet.http.HttpServletResponse; 

    /** 
    * 
    * @author Maxwell 
    */ 
    @WebFilter(filterName = "sessionFilter", urlPatterns = {"/*"}) 
    public class sessionFilter implements Filter { 

     @Override 
     public void init(FilterConfig filterConfig) throws ServletException { 

     } 

     @Override 
     public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 
      HttpServletRequest req1 =(HttpServletRequest)request; 
      HttpServletResponse res1 =(HttpServletResponse)response; 

      String session = (String)req1.getSession().getAttribute("pnumber"); 
      String currentPath = req1.getRequestURL().toString(); 

      if(session != null) 
      { 
       if(currentPath.contains("login.xhtml")) 
       { 
        res1.sendRedirect(req1.getContextPath()+"/home.xhtml"); 
        System.out.println("it is nt empty"); 
       } 
       else 
       { 
        chain.doFilter(request, response); 
       } 
       //System.out.println("it is nt empty"); 
      } 
      else 
      { 
       if(currentPath.contains("home")) 
       { 
        res1.sendRedirect(req1.getContextPath()+"/login.xhtml"); 
        System.out.println("somefin is wrong"); 
       } 
       else 
       { 
        chain.doFilter(request, response); 
       } 
       //System.out.println("somefin is wrong"); 
      } 

     } 

     @Override 
     public void destroy() { 

     } 

    } 

사용자가 브라우저를 새로 고침 할 때 홈 세션을 유지하려면 어떻게해야합니까?

로그인 후에 홈 페이지 세션이 살아 있기 때문에. 그러나 브라우저를 새로 고침하면 다시 로그인 페이지로 돌아갑니다.

+0

게시 된 코드에 ** ** ** jsf가 있습니다. 단지 서블릿 필터 – Kukeltje

답변

1

페이지를 새로 고칠 때 콘솔에 경고 또는 오류가 있습니까? 음, JSF에서 세션 관리를 위해, 내가 할 줄 다음

1) 내가 한 번 그/그녀가 로그인 s의 SessionMap에 사용자 정보를 유지거야 ManagedBean은 @SessionScoped을 사용하십시오 :

FacesContext fc = FacesContext.getCurrentInstance(); 
fc.getExternalContext().invalidateSession(); 

: 로그 아웃 사용자가 클릭, 당신은 세션을 무효화해야

public void login(){ 
    //your code 
    if(validations){ 
    FacesContext fc = FacesContext.getCurrentInstance(); 
    fc.getExternalContext().getSessionMap().put("loggedUser", User); 
    //User is the entity which contains the current user info. 
    //You can use any data to keep in the SessionMap ;-) 
    } 
} 

2) 3) 이제 로그인 페이지에서 로그인없이 사용자 유형 직접 URL 때 세션의 유효성을 검사하려면 :

<f:event type="preRenderView" listener="#{loginBean.validateSession()}" /> 
: 다음

public void validateSession(){ 
    FacesContext fc = FacesContext.getCurrentInstance(); 
    User currentUser = (User) fc.getExternalContext().getSessionMap().get("loggedUser"); 
    if(currentUser==null){ 
     //shows a message 'Session has caducated' 
     fc.getExternalContext().redirect("./login.xhtml"); 
    } 
} 

방금 ​​뷰를 렌더링하기 전에 메소드를 호출 어떤 ManagedBean은에서 현재 사용자의 데이터를 얻을하려는 경우

4), 당신은 SessionMap에서 그것을 얻을 수 있습니다

FacesContext fc = FacesContext.getCurrentInstance(); 
User user = (User) fc.getExternalContext().getSessionMap().get("loggedUser"); 

희망이 도움이 ;-)

+0

고맙습니다 ;-), 나는 모든 것을했습니다. 그러나 사용자가 로그인하여 사용자 페이지에있을 때 브라우저를 새로 고치기로 결정하면 자동으로 다시 로그인 페이지로 리디렉션됩니다. 나는 여전히 사용자가 브라우저를 새로 고친 후에도 사용자 페이지를 유지하기를 원한다. – Maxwell

관련 문제