2013-07-02 3 views
1

세션을 열거 나 닫지 않아도 시작 페이지로 리디렉션하고 싶습니다. Servlet Filter를 추가했지만 작동하지 않습니다. 서블릿 필터가 작동하지 않습니다.

SessionFilter 클래스 :

public class SessionFilter implements Filter { 

    private ArrayList<String> urlList; 

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException { 
     HttpServletRequest request = (HttpServletRequest) req; 
     HttpServletResponse response = (HttpServletResponse) resp; 
     String url = request.getServletPath(); 
     HttpSession session = request.getSession(false); 

     if (new Bean().getLoggedIn() || urlList.contains(url) || session != null){ 
      chain.doFilter(req, resp); 
     } 
     else{ 
      response.sendRedirect("index.jsf"); 
     } 
    } 

    public void init(FilterConfig config) throws ServletException { 
     String urls = config.getInitParameter("avoid-urls"); 
     StringTokenizer token = new StringTokenizer(urls, ","); 

     urlList = new ArrayList<String>(); 

     while (token.hasMoreTokens()) { 
      urlList.add(token.nextToken()); 

     } 
    } 

    public void destroy() { 
    } 

} 


web.xml에 :

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://java.sun.com/xml/ns/javaee" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
      http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
      version="2.5"> 
    <filter> 
     <filter-name>SessionFilter</filter-name> 
     <filter-class>com.tsystems.demail.SessionFilter</filter-class> 
     <init-param> 
      <param-name>avoid-urls</param-name> 
      <param-value>/index.jsf, /registration.jsf</param-value> 
     </init-param> 
    </filter> 

    <filter-mapping> 
     <filter-name>SessionFilter</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 

    <welcome-file-list> 
     <welcome-file>index.jsf</welcome-file> 
    </welcome-file-list> 
</web-app> 

내가 new Bean().getLoggedIn()이 참 로그인

. 로그 아웃 할 때 - 거짓. 내 필터를 변경하는 방법? 어디에서 오류가 있습니까?

위해 response.sendRedirect ("index.jsf")는

는 인수로서 상대 경로를 사용하는 것으로

+3

'콩 '이란 무엇입니까? 매번 새로운 시간을 새로 만들려고하십니까? –

+1

"작동하지 않습니다."어떻게 작동하지 않습니까, 전혀 리디렉션하지 않거나, 잘못된 페이지로 리디렉션되거나, HTTP 500이 발생하거나 아무 일도 일어나지 않습니다. 디버거에 의해 결정된 것처럼 else 블록의 코드가 전혀 실행되지 않습니까? 좀 더 자세히 설명해주세요. – Keith

+0

@DaveNewton my Bean 클래스 : http://pastebin.com/EKU1d0EY – rubaka

답변

0

. 따라서 index.jsf가 웹 응용 프로그램의 루트에 있다고 가정하면 모든 레벨에서 리디렉션을 처리하기 위해 "/index.jsf"값 (슬래시로 시작)을 사용하는 것이 좋습니다. 되지 않은 경우,이 같은 URL이 :

/folder1/folder2/somePage.jsf 

나는 당신이 시도해야한다고 생각

/folder1/folder2/index.jsf 

대신

/index.jsf 
+0

동일한 결과가 나타납니다. – rubaka

+0

else 블록의 리디렉션 라인에 실제로 도달했는지 확인 했습니까? 디버거 또는 로그 문을 사용하여? – Keith

+0

나는 괜찮아 – rubaka

0

로 리디렉션됩니다와 대신

response.sendRedirect(request.getContextPath() + "/index.jsf"); 

of :

response.sendRedirect("index.jsf"); 

그러나 아래의 예를 확인하십시오 : 사용자가 연결되어있는 경우는 null이 아닌 객체를 얻을 수 있도록 내가 로그인 방법 가정

, 나는 세션에서 현재 사용자를 넣어!

방법 로그인 : 사용자의 응답 시도가 URL 패턴 멤버 같은 http://www.domain.com/member/ 같은 ....와 일부 페이지에 액세스하는 경우

ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext(); 

Map<String, Object> sessionMap = externalContext.getSessionMap(); 

sessionMap.put("User", wantConnect); 

는 이제, 아래의 필터가

라고합니다.

@WebFilter("/member/*") 
public class RequestInterceptor implements Filter { 

public void init(FilterConfig filterConfig) throws ServletException { 

} 

@Override 
public void doFilter(ServletRequest req, ServletResponse res, 
     FilterChain chain) throws ServletException, IOException { 

     HttpServletRequest request = (HttpServletRequest) req; 
     HttpServletResponse response = (HttpServletResponse) res; 
     HttpSession session = request.getSession(); 

     if (session == null || session.getAttribute("User") == null) { 
      response.sendRedirect(request.getContextPath() + "/index.xhtml"); // No logged-in user found, so redirect to login page. 
     } else { 
      chain.doFilter(req, res); // Logged-in user found, so just continue request. 
     } 




} 

@Override 
public void destroy() { 
    // Cleanup global variables if necessary. 
} 

은} 여기

내 web.xml을

<filter> 
    <description>Requires user to log in as a member</description> 
    <filter-name>RequestInterceptor</filter-name> 
    <filter-class>fr.atoswg.peu.security.RequestInterceptor</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>RequestInterceptor</filter-name> 
    <url-pattern>/member/*</url-pattern> 
</filter-mapping> 

는 :)이 도움의 희망!

관련 문제