当前位置: 首页 > 知识库问答 >
问题:

java.lang.IllegalStateExcture:在servletfilter中提交响应后无法转发

漆雕昊天
2023-03-14

我使用过滤器来确定请求的页面是否具有有效的会话。

这是我的密码<代码>网络。xml:

    <filter>
    <filter-name>SessionFilter</filter-name>
    <filter-class>
        com.imagemanagementutility.filter.SessionFilter
    </filter-class>
    <init-param>
        <param-name>avoid-urls</param-name>
        <param-value>index.jsp</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>SessionFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

过滤器类别:

    public class SessionFilter implements 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;
        System.out.println(url.replace("/",""));
        if (urlList.contains(url)) {
            allowedRequest = true;
        }

        if (!allowedRequest) {
            HttpSession session = request.getSession(false);
            if (null == session) {
                System.out.println("redirect in servlet session filter");
                RequestDispatcher dispatcher = request
                        .getRequestDispatcher("//index.jsp");
                dispatcher.forward(request, response);
            }
        }

            chain.doFilter(req, res);

        System.out.println("end");
    }

    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());

        }
    }
}

我有一个登录页面,用于检查用户是否有效。如果用户有效,则将控制转移到此servlet。

    public class MainService extends HttpServlet {
    private static final long serialVersionUID = 1L;
    static Logger log = Logger.getLogger(MainService.class.getName());

    /**
     * @see HttpServlet#HttpServlet()
     */
    public MainService() {
        super();
    }
/*
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {

    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        HttpSession session = request.getSession(true);
        response.setContentType("text/html;charset=UTF-8");
        LogUtil.logInfo("i m here");
        List<Images> imageList = null;
        response.setContentType("text/html");
        try {
            UserDataService userDataService = new UserDataImpl();



            String userId = null;
            String username = null;
            String password = null;
            username = request.getParameter("user");
            password = request.getParameter("password");

            userId = userDataService.checkUser(username, password);

            if (userId!=null) {

            System.out.println(userId);
            session.setAttribute("userId", userId);

                imageList = userDataService.getImages(userId);
                session.setAttribute("imageList", imageList);


            /*response.sendRedirect("//showUserImages.jsp");*/

                RequestDispatcher dispatcher = request
                        .getRequestDispatcher("//showUserImages.jsp");
                dispatcher.forward(request, response);


            } else {

                /*response.sendRedirect("//index.jsp");*/

                RequestDispatcher dispatcher = request
                        .getRequestDispatcher("//index.jsp");
                dispatcher.forward(request, response);

            }
        } catch (ImageException e) {

            e.getMessage();
            e.printStackTrace();
        }
    }

}

这在没有过滤器的情况下可以工作,但是当我将控件转发到“//showuserImages.jsp”时,过滤器会显示一个错误。

共有1个答案

袁成化
2023-03-14

将调用doFilter放在else块中:

if (!allowedRequest) {
    HttpSession session = request.getSession(false);
    if (null == session) {
        System.out.println("redirect in servlet session filter");
        RequestDispatcher dispatcher = request
                .getRequestDispatcher("//index.jsp");
        dispatcher.forward(request, response);
    }
}else{
    chain.doFilter(req, res);
}
 类似资料:
  • 我知道这里已经讨论过至少一百万次了,但是每个servlet在调用forward()之前都会重定向或刷新输出。我有同样的问题,但我没有做任何与输出。我的servlet只接受请求参数并提交到数据库,并在请求上设置一个属性。然后,它将请求转发给jsp,jsp显示属性。我在Tomcat7上使用Servlet3.0。下面是我的servlet doPost方法,后面是转发到的jsp: JSP: 我相信我可能错

  • 在我的应用程序中执行一些操作时,我得到了 Java . lang . illegalstateexception无法调用sendError() 当我再次重新加载页面时,它会正常工作一段时间,但一段时间后它再次显示相同的异常。我如何克服这个异常? 以下是例外: 支柱.xml

  • 你好,Hibernate和Jackson有问题。有两个POJO 为Spring Security集成而设计的用户及其角色。 还有一个控制器,通过Jackson从用户Json生成。With方法 当此方法返回不带null字段的用户时,将抛出: 当我添加@OneTo很多时,这个问题就出现了(mep dBy="user", cascade=CascadeType. ALL, fetch=FetchType

  • 问题内容: 我是JSF的新手,正在构建使用Facelets创建的应用程序。 这是我的模板 master.xhtml MasterSearch.xhtml MasterSearch.java这是一个bean faces-config.xml 现在,当我运行此代码(实际上是masterp.xhtml)时,它显示出完美的输出并加载了Accuratley,但它在控制台中引发了异常,即 而且我认为由于这个原

  • 问题内容: 我正在尝试使用以下代码将值从servlet传递到jsp页面: 当我运行页面时,我得到: 错误: 我尝试使用: 但是我遇到了同样的错误。 如何解决这个错误? 问题答案: 您已经在catch代码块中转发了响应: 因此,您不能再次调用: 因为它已经转发(提交)。 因此,您可以做的是:保留一个字符串以分配需要转发响应的位置。