2016-05-02 15 views
0

セッション追跡クラスに次のコードがありますが、セッションが終了したか、ユーザーがnullの場合はログインページにリダイレクトされません。 助けてもらえますか?ログインページへのリダイレクトはJava Webアプリケーションでは機能しません

SessionTrackingFilter.java:

package com.canaldigital.tsi.security; 

import java.io.IOException; 

import javax.servlet.Filter; 
import javax.servlet.FilterChain; 
import javax.servlet.FilterConfig; 
import javax.servlet.RequestDispatcher; 
import javax.servlet.ServletException; 
import javax.servlet.ServletRequest; 
import javax.servlet.ServletResponse; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.HttpSession; 

import com.canaldigital.framework.logging.CDLogger; 
import com.canaldigital.framework.logging.CDLoggerInterface; 
import com.canaldigital.tsi.utils.WorklistUtils; 

public class SessionTrackingFilter implements Filter { 

    private FilterConfig filterConfig = null; 

    private static final CDLoggerInterface logger = CDLogger 
      .getLogger(SessionTrackingFilter.class); 

    public SessionTrackingFilter() { 

    } 

    /* 
    * @see javax.servlet.Filter#init(javax.servlet.FilterConfig) 
    */ 
    public void init(FilterConfig filter) throws ServletException { 
     this.filterConfig = filter; 
    } 

    /* 
    * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, 
    * javax.servlet.ServletResponse, javax.servlet.FilterChain) 
    */ 
    public synchronized void doFilter(ServletRequest request, 
      ServletResponse response, FilterChain chain) throws IOException, 
      ServletException { 

     if (request instanceof HttpServletRequest) { 

      HttpServletRequest httpRequest = (HttpServletRequest) request; 
      HttpServletResponse httpRes = (HttpServletResponse) response; 

      HttpSession session = httpRequest.getSession(true); 

      String uri = httpRequest.getRequestURI(); 

      uri = uri.replaceFirst(httpRequest.getContextPath(), ""); 

      try { 
       if (WorklistUtils.isDebugEnabled()) 
        logger.debug("session user is " 
          + session.getAttribute("user")); 
       String loggedUser = (String) session.getAttribute("user"); 
       if (WorklistUtils.isDebugEnabled()) 
        logger.debug("uri is ::" + uri); 
       if (loggedUser == null && !uri.endsWith("login.xhtml")) {  
        httpRes.sendRedirect("/WorklistWeb/faces/general/logins/login.xhtml");          
       }else{ 
        RequestDispatcher dispatcher = filterConfig.getServletContext() 
          .getRequestDispatcher(uri); 
        dispatcher.forward(request, response); 
       } 

      } catch (Exception exception) { 
       exception.printStackTrace(); 
      } 
     } 
    } 

    /* 
    * @see javax.servlet.Filter#destroy() 
    */ 
    public void destroy() { 
     this.filterConfig = null; 
    } 
} 

のWeb.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    id="WebApp_ID" version="2.5"> 
    <display-name>CsR Worklist Web Application</display-name> 

    <context-param> 
     <param-name>javax.faces.CONFIG_FILES</param-name> 
     <param-value>/WEB-INF/faces-config.xml</param-value> 
    </context-param> 

    <context-param> 
     <param-name>javax.faces.PROJECT_STAGE</param-name> 
     <param-value>Development</param-value> 
    </context-param> 

    <context-param> 
     <param-name>com.sun.faces.enableRestoreView11Compatibility</param-name> 
     <param-value>true</param-value> 
    </context-param> 

    <context-param> 
     <param-name>primefaces.THEME</param-name> 
     <param-value>redmond</param-value> 
    </context-param> 

    <servlet> 
     <servlet-name>Faces Servlet</servlet-name> 
     <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>Faces Servlet</servlet-name> 
     <url-pattern>/faces/*</url-pattern> 
    </servlet-mapping> 

    <session-config> 
     <session-timeout>120</session-timeout> 
    </session-config> 

    <filter> 
     <description>For ensuring that user accesses the application after proper login.</description> 
     <display-name>sessionTrackingFilter</display-name> 
     <filter-name>sessionTrackingFilter</filter-name> 
     <filter-class>com.canaldigital.tsi.security.SessionTrackingFilter</filter-class> 
    </filter> 

    <filter-mapping> 
     <filter-name>sessionTrackingFilter</filter-name> 
     <url-pattern>*.xhtml</url-pattern> 
    </filter-mapping> 


    <mime-mapping> 
     <extension>xml</extension> 
     <mime-type>application/xml</mime-type> 
    </mime-mapping> 

    <welcome-file-list> 
     <welcome-file>index.html</welcome-file> 
    </welcome-file-list> 

    <error-page> 
     <exception-type>javax.faces.application.ViewExpiredException</exception-type> 
     <location>/faces/general/logins/sessionExpired.xhtml</location> 
    </error-page> 

</web-app> 
+0

今後のJSFに関する質問では、[java]タグを使用しないでください。それはJSFについて何も知らない人を惹きつけるだけであり、あなたは分かりにくい紛らわしいコメントや答えを得るだけです。 – BalusC

+0

ところで、あなたの 'enableRestoreView11Compatibility'の悪用については、ここにいくつかの考え方があります:http://stackoverflow.com/q/3642919 – BalusC

答えて

-2

は、あなたがセッションでのユーザー属性を設定されているコードを投稿することができます。このコードをログに記録することだけでなく

loggedUser == null && !uri.endsWith("login.xhtml") 
-1

あなたSessionTrackingFilterマッピングをコメントアウトしているようです。以下の行を修正してください。

<url-pattern>/faces/*</url-pattern> 

適切な位置にアスタリスクを使用してください。

関連する問題