日期:2014-05-20  浏览次数:20782 次

struts2.0拦截器问题
拦截器:
@Override
public String intercept(ActionInvocation arg0) throws Exception {
// TODO Auto-generated method stub
System.out.println("lanjieqi yunxing");
Map map=arg0.getInvocationContext().getSession();//获得session对象,并将其强制转化
if(map.get("user")==null)
{
return Action.LOGIN;
}
else
{
return arg0.invoke();
}


}
Action
public String execute() throws Exception
{ System.out.println("execute yunxing");

if("zhangsan".equals(user.getUsername()) && "1234".equals(user.getPassword()))
{
Map map=ActionContext.getContext().getSession();
map.put("user", "sdfsdf");
return SUCCESS;
}
else
{
return ERROR;
}
}

配置文件:
<struts>
<package name="default" extends="struts-default">
<interceptors>
<interceptor name="LoginInterceptor" class="org.sunxin.struts2.ch03.interceptor.LoginInterceptor">
</interceptor>
</interceptors>

<action name="login" class="org.sunxin.struts2.ch03.action.LoginAction">
  <result name="success" >/success.jsp</result>
  <result name="error">/error.jsp</result>
  <result name="login" type="redirect">/login2.jsp</result>
  <result name="input">/login.jsp</result>
  <interceptor-ref name="LoginInterceptor"/>
  <interceptor-ref name="defaultStack"/>

  </action>
</package>
</struts>
当不输入内容时,转到login2.jsp 但输入正确时,也转到login2.jsp,而不转到seccuess.jsp 。拦截器到底是怎么样工作的呀

------解决方案--------------------
顶一个
期待高手的到来
------解决方案--------------------
拦截器是运行在action之前吧!此时还没有往session中设置值,map.get("user")==null应该等于true的。
------解决方案--------------------
你看一下拦截器的排列顺序就知道了validate拦截器是排在你自定义的拦截器之前的,所以先执行!这样session就有东西了

而你放到action的execute中的话,是后于你自定义的拦截器执行,而这里每次都返回login.action,所以永远也执行不到你的execute
------解决方案--------------------
拦截器是运行在action之前吧!此时还没有往session中设置值,map.get("user")==null应该等于true的。
------解决方案--------------------
你看一下拦截器的排列顺序就知道了validate拦截器是排在你自定义的拦截器之前的,所以先执行!这样session就有东西了 

而你放到action的execute中的话,是后于你自定义的拦截器执行,而这里每次都返回login.action,所以永远也执行不到你的execute
------解决方案--------------------
探讨
但是我把我定义的拦截器放在默认的后面也还是一样execut()没有执行呀

------解决方案--------------------
<! DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd" > 
< struts > 
< include file ="struts-default.xml" />
< package name ="InterceptorDemo" extends ="struts-default" > 
< interceptors > 
< interceptor name ="auth" class ="tutorial.AuthorizationInterceptor" /> 
</ interceptors > 
< action name ="Timer" class ="tutorial.TimerInterceptorAction" >