开发者社区> 问答> 正文

Jfinal 拦截器 登录验证问题报错 Cannot forward after?400报错

    访问 action 的 方法时 ,未登录能验证跳转到登录 页面, 但是会下面的错误信息。

        上网查 了在 重定向 后面 家 return;加了以后还是会报错

        访问 action 时候 测试验证是否登录 ,未登录 时候跳转到 登陆 页面,报错如下;

        (不去管报错在登录 页面 进行登录 能正常跳转到登录 之前的页面。希望有人帮我解答下,我只是个刚入行的小菜。。)

2017 11:32:28 ERROR com.jfinal.core.ActionHandler - /Order/test
com.jfinal.render.RenderException: java.lang.IllegalStateException: Cannot forward after response has been committed
	at com.jfinal.render.JspRender.render(JspRender.java:69)
	at com.jfinal.core.ActionHandler.handle(ActionHandler.java:99)
	at com.jfinal.ext.handler.ContextPathHandler.handle(ContextPathHandler.java:48)
	at com.jfinal.core.JFinalFilter.doFilter(JFinalFilter.java:74)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:962)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1115)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.IllegalStateException: Cannot forward after response has been committed
	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:347)
	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:337)
	at com.jfinal.render.JspRender.render(JspRender.java:67)
	... 20 more

  这  是 action 测试 


	//测试
	public void test(){
			render("/test.jsp");
            return;
	}

  这是 拦截器 的内容

@Override
	public void intercept(Invocation inv) {
		
		//获取 response
		HttpServletResponse response =inv.getController().getResponse();
		HttpServletRequest request =  inv.getController().getRequest();
		//获取当前地址 用于传递跳转
		final String url = "http://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+inv.getActionKey();
		//登录 地址
		final String  loginurl = "/Passport/Account/login";
		//获取登录 cookie 
		String getCookieToken  = inv.getController().getCookie("loginid");
	
		//判断 
		if (Tools.isEmpty(getCookieToken)) {
				//跳转到 登录 
				try {
					response.sendRedirect(loginurl
                                          +"?returnUrl="
                                          +URLEncoder.encode(url, "UTF-8"));
					return;
				} catch (UnsupportedEncodingException e) {
					e.printStackTrace();
				} catch (IOException e) {
					e.printStackTrace();
				}
		}else{
			inv.invoke();
		}
	}

    

展开
收起
爱吃鱼的程序员 2020-06-08 13:52:46 612 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    折腾很久终于自己搞定,本来就请求一次了用response请求当相于在请求一次。改为

    inv.getController().redirect(xxxxxx);就可以了

    response.sendRedirect(loginurl+"?returnUrl="+URLEncoder.encode(url,"UTF-8"));

    如果整个请求流程已经接管了response,那么在最后来一句:renderNull()即可解决

    2020-06-08 13:53:03
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载