2

ログイン操作を行おうとしていますが、セッションが有効かどうかを確認するためにフィルターを使用していると、次のような例外が発生しました:- java.lang.IllegalStateException、応答がコミットされた後、セッションを作成できません。

Myservletフィルターコードは:-

 public class SessionFilter implements javax.servlet.Filter 
    {

private ArrayList<String> urlList;

     public void destroy() {

}

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

HttpServletRequest request = (HttpServletRequest) req;
    HttpServletResponse response = (HttpServletResponse) res;
    String url = request.getServletPath();
    boolean allowedRequest = false;


    if(urlList.contains(url)) {
        allowedRequest = true;

    }

    if (!allowedRequest) {
        HttpSession session = request.getSession(false);
        if (null == session) {
            response.sendRedirect("Login.jsp");
        }
    }

  chain.doFilter(req, res);



}


public void init(FilterConfig fConfig) throws ServletException {

    String urls = fConfig.getInitParameter("avoid-urls");

    //StringTokenizer token = new StringTokenizer(urls, ",");

    StringTokenizer token = new StringTokenizer(urls);

    urlList = new ArrayList<String>();

    urlList.add(token.nextToken());

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

    }*/
}

}



  Filter mapping in web.xml is :-

<filter>
   <filter-name>SessionFilter</filter-name>
   <filter-class>Filter.SessionFilter</filter-class>

    <init-param>
      <param-name>avoid-urls</param-name>
      <param-value>Login.jsp,</param-value>
    </init-param>
</filter>

<filter-mapping>

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

</filter-mapping>

今、私がlogin.jspそれを要求すると、私はこの例外を受け取りました。ここで過去2日間からプロジェクトに行き詰まっているのを手伝ってください。

4

1 に答える 1

3

を実行した後、フィルターを続行しないでくださいsendRedirectsendRedirectヘッダーをクライアントにコミットし、その後は何も書き込まないようにします。

そして、login.jspを許可されたURLに設定します。

  if (!allowedRequest) {
    HttpSession session = request.getSession(false);
    if (null == session || ) {
        response.sendRedirect("Login.jsp");
        return;
    }
}

参照:

サーブレットの「応答はすでにコミットされています」の原因

于 2013-03-25T10:37:10.733 に答える