【问题标题】:Session Checking with Filter and Redirecting使用过滤器和重定向进行会话检查
【发布时间】:2013-03-25 05:17:33
【问题描述】:

我正在尝试进行登录操作,但是当我使用过滤器检查会话是否有效时,我得到了异常:-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 天以来一直卡在我的项目上。

【问题讨论】:

  • if (null == session) 这是什么?
  • if (null == session) { response.sendRedirect("Login.jsp"); return; } 之后。你能试试在response.sendRedirect("Login.jsp");后面加上return声明吗
  • 是的,我试过了,但我没明白
  • 但是当我在 response.sendRedirect("Login.jsp"); 之后使用 return 语句时然后我没有得到任何输出(我想重定向到 login.jsp) 无休止的处理继续我应该做什么.Viksh V

标签: servlets servlet-filters


【解决方案1】:

在执行sendRedirect 之后不要继续过滤。 sendRedirect 会将标头提交给客户端,之后您不应该写任何东西。

并将 login.jsp 设置为您允许的 url。

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

参考资料:

Cause of Servlet's 'Response Already Committed'

【讨论】:

  • 这个解决方案是在我的 cmets 中提供给 OP 的。但是,OP 说它不起作用。
猜你喜欢
  • 2012-12-04
  • 2019-06-04
  • 2015-10-02
  • 2013-04-06
  • 2012-02-03
  • 1970-01-01
  • 2015-11-16
  • 2014-09-29
  • 2016-10-14
相关资源
最近更新 更多