访问 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();
}
}
折腾很久终于自己搞定,本来就请求一次了用response请求当相于在请求一次。改为
inv.getController().redirect(xxxxxx);就可以了
response.sendRedirect(loginurl+"?returnUrl="+URLEncoder.encode(url,"UTF-8"));
如果整个请求流程已经接管了response,那么在最后来一句:renderNull()即可解决
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。