当向其他人重定向(带拦截器)动作时,Struts2动作无法执行

编程入门 行业动态 更新时间:2024-10-24 19:26:25
本文介绍了当向其他人重定向(带拦截器)动作时,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动作无法执行

本文发布于:2023-10-10 22:39:36,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1479955.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:动作   向其   重定向   拦截器

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!