本文介绍了当向其他人重定向(带拦截器)动作时,Struts2动作无法执行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我向 ActLand 发送请求,然后 intercept(),如果没有登录,则重定向到 Login.jsp 。
I send a request to the ActLand, then intercept(), if not logged in then redirect to Login.jsp.
struts.xml :
The struts.xml:
<struts> <package name="default" extends="struts-default"> <interceptors> <interceptor name="login" class="com.interceptor.LoginInterceptor"/> <interceptor-stack name="loginStack"> <interceptor-ref name="login"/> </interceptor-stack> </interceptors> <default-interceptor-ref name="loginStack"/> <global-results> <result name="loginRedirect" type="redirect">/login.jsp</result> </global-results> <action name="ActLand" class="com.action.ActLand"> <result name="ok">/index.jsp</result> </action> <action name="ActLogin" class="com.action.ActLogin"> <result name="ok">/index.jsp</result> <result name="fail">/login.jsp</result> </action> </package> </struts>
拦截器:
public class LoginInterceptor extends AbstractInterceptor { @Override public String intercept(final ActionInvocation invocation) throws Exception { Map<String, Object> session = ActionContext.getContext().getSession(); int userId = -1; if (session.get("userId") != null) { userId = Integer.parseInt(session.get("userId").toString()); } Object action = invocation.getAction(); if (userId < 0) { return "loginRedirect"; } else if (!(action instanceof ActLogin)) { return "loginRedirect"; } return invocation.invoke(); }错误:
SEVERE: Could not execute action: /ActLand java.lang.IllegalStateException at org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:473) at javax.servlet.http.HttpServletResponseWrapper.sendRedirect(HttpServletResponseWrapper.java:138) at org.apache.struts2.dispatcher.ServletRedirectResult.sendRedirect(ServletRedirectResult.java:217) at org.apache.struts2.dispatcher.ServletRedirectResult.doExecute(ServletRedirectResult.java:197) at org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSupport.java:186) at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:362) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:266) at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52) at org.apache.struts2ponents.ActionComponent.executeAction(ActionComponent.java:289) at org.apache.struts2ponents.ActionComponent.end(ActionComponent.java:172) at org.apache.struts2.views.jsp.ComponentTagSupport.doEndTag(ComponentTagSupport.java:42) at org.apache.jsp.index_jsp._jspx_meth_s_005faction_005f0(index_jsp.java:152) at org.apache.jsp.index_jsp._jspx_meth_s_005fif_005f0(index_jsp.java:120) at org.apache.jsp.index_jsp._jspService(index_jsp.java:83) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:419) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333) at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:88) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at orgbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:399) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:317) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:204) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:182) at org.apache.tomcat.util.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:311) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) at java.lang.Thread.run(Thread.java:722)对不起,我相信我做的每一件事我被指示,但事情很复杂......
I'm sorry, I believe I did every thing that I had been instructed to, but things are complicated...
推荐答案添加<拦截器 - 在登录拦截器之后,ref name =defaultStack/> 到 loginStack 。 这将有助于解决重定向结果的问题,而不仅仅是。
Add <interceptor-ref name="defaultStack"/> to the loginStack after login interceptor. It will help to solve the problem with redirect result and not only.
更多推荐
当向其他人重定向(带拦截器)动作时,Struts2动作无法执行
发布评论