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()はtrueです。ログアウト時 - false。フィルターの交換方法は? どこにエラーがありますか?

4

2 に答える 2

1

私はあなたが試してみるべきだと思います:

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

それ以外の :

response.sendRedirect("index.jsf"); 

ただし、以下の例を確認してください。

ログインメソッドで、現在のユーザーをセッションに入れて、ユーザーが接続されたときにnullでないオブジェクトを取得できると仮定します!

メソッド ログイン :

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

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

 sessionMap.put("User", wantConnect);   

ここで、ユーザーがhttp://www.domain.com/member/ ....などのurl-pattern メンバーを使用していくつかのページにアクセスしようとすると、次のフィルターが呼び出されます。

@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>

それが助けになることを願っています:)!

于 2013-07-09T07:28:45.967 に答える
0

response.sendRedirect("index.jsf") に注意してください

引数として相対パスを取ります。そのため、index.jsf が Web アプリのルートにあると仮定すると、値 "/index.jsf" (スラッシュで始まる) を使用して、すべてのレベルでリダイレクトを処理することをお勧めします。そうでない場合は、次のような URL:

/folder1/folder2/somePage.jsf

にリダイレクトされます

/folder1/folder2/index.jsf

それ以外の

 /index.jsf
于 2013-07-02T13:39:21.743 に答える