セッション追跡クラスに次のコードがありますが、セッションが終了したか、ユーザーが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>
今後のJSFに関する質問では、[java]タグを使用しないでください。それはJSFについて何も知らない人を惹きつけるだけであり、あなたは分かりにくい紛らわしいコメントや答えを得るだけです。 – BalusC
ところで、あなたの 'enableRestoreView11Compatibility'の悪用については、ここにいくつかの考え方があります:http://stackoverflow.com/q/3642919 – BalusC