2014-08-29 4 views
0

세션 고정을 수정하기 위해 로그인 후에 새 세션을 만들어야하는 필터를 작성했습니다.로그인 후 새 세션 생성

//variables 
public class GenerteNewSessionFilter implements Filter { 

    public static final String NEW_SESSION_INDICATOR = "cab"; 

    // destroy 
    public void destroy() { 
     // TODO Auto-generated method stub 

    } 

    @SuppressWarnings({ "unchecked", "rawtypes" }) 
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 

     HttpServletRequest httpRequest = (HttpServletRequest) request; 
     if (httpRequest.getSession(false) != null && httpRequest.getSession(false).getAttribute(NEW_SESSION_INDICATOR) != null) { 

      // copy session attributes from new session to a map. 
      HttpSession session = httpRequest.getSession(); 

      // HashMap old = new HashMap(); 
      HashMap<String, Object> old = new HashMap<String, Object>(); 
      Enumeration keys = (Enumeration) session.getAttributeNames(); 
      while (keys.hasMoreElements()) { 
       String key = (String) keys.nextElement(); 
       if (!NEW_SESSION_INDICATOR.equals(key)) { 
        old.put(key, session.getAttribute(key)); 
        session.removeAttribute(key); 
       } 
      } 

      // invalidation session and create new session. 
      session.invalidate(); 
      session = httpRequest.getSession(true); 

      // copy key value pairs from map to new session. 
      for (Map.Entry entry : old.entrySet()) { 
       session.setAttribute((String) entry.getKey(), entry.getValue()); 
      } 
     } 
    } 

    // initiatiliazion 
    public void init(FilterConfig filterConfig) throws ServletException { 

    } 
} 

하지만 난 한 번만 응용 프로그램에 사용자 로그인이 나를 인도하십시오 때 그것을 달성 할 수있는 방법을 실행할 : 시스템에 사용자 로그인이 경우에만 호출해야합니다.

감사합니다.

+0

사용자의 자격 증명 게시를 처리하는 장소에 코드를 삽입하면 어떻게 될까요? 기본적으로 사용자가 자신이 누구라고 생각하는지 확인한 후에 세션을 무효화하십시오. –

답변

1

특정 서블릿에 필터를 적용 할 수 있습니다. 따라서 LoginAction을 처리하는 서블릿에만이 메소드를 적용하면 사용자가 로그인 한 경우에만 실행됩니다.

web.xml에서 필터 경로 만 변경하십시오.
<url-pattern>을 서블릿의 동일한 경로로 변경하십시오.

<filter> 
    <display-name>SessionFilter</display-name> 
    <filter-name>SessionFilter</filter-name> 
    <filter-class>com.session.SessionFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>NewSessionFilter</filter-name> 
    <url-pattern>/your/path/LoginAction</url-pattern> 
</filter-mapping> 

또는 당신은 또한 당신의 JSP에 <ulr-pattern>을 적용 할 수 있습니다 <servlet-name> 오히려 주

<filter-mapping> 
    <filter-name>SessionFilter</filter-name> 
    <servlet-name>LoginAction</servlet-name> 
</filter-mapping> 

<url-pattern>보다 사용.
<url-pattern>/your/path/login.jsp</url-pattern>

+0

로그인 응용 프로그램에 서블릿이 없습니다. loginsubmit.jsp – aru

+0

로그인을 확인하는 방법은 무엇입니까? 사용자가 존재하는지 여부를 확인하기 위해 데이터베이스에 액세스 할 때 무엇을 사용합니까? 또한 서블릿에 태그가 붙어 있습니다. – user23123412

+0

사용자가 login.jsp를 제출하면이 jsp 내 userloginsubmt.jsp로 사용자가 리디렉션됩니다. db 액세스 및 유효성 검사를위한 java 메소드가 호출되었습니다. – aru

관련 문제