论坛首页 Java版 Struts

谅讶!Struts2 interceptor cookie问题

浏览 1336 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
最后更新时间:2007-11-04 关键字: struts2
项目中用cache缓存了用户session。在做登录校验的时候interceptor来拦截cookie
java 代码
  1. Cookie[] cookies = ServletActionContext.getRequest().getCookies();
  2. boolean flag=false;
    if (cookies != null) {
    for (int i = 0; cookies != null && i < cookies.length; i++) {
    System.out.println(cookies[i].getName());
    if (Constants.COOKIE_NAME.equals(cookies[i].getName())) {
    flag=true;
    return actionInvocation.invoke();
    }
    }
    }
    if(flag==false){
    return Action.LOGIN;
    }

程序登录成功,并且cache与cookie都写入正常。但发现还跳到登录页,追踪下登录拦截发现cookies已经有值。招待到for循环中。去死活就是打印不出来cookie的值。watch一下cookie[i]内存堆栈中却有值 .但用log.info或者system.out都输不出值。同样的下面那个if判断语句直接就执行else中的语句。还有一个奇怪的现象。我用登录拦截器。用一个包下面。如。
拦截堆栈在struts.xml中配置片段如下:
java 代码
java 代码
  1. < interceptor-stack name="spaceStack" >
  2. < interceptor-ref name="isLogin" />
  3. < interceptor-ref name="cacheSession" />
  4. < interceptor-ref name="defaultStack" />
  5. < /interceptor-stack >
  6. java 代码
  7. < pack age name="group" extends="default" namespace="/space">
  8. < interceptor - ref name="spaceStack"/>
  9. < action name="member" class="memberAction">
  10. < result name="input ">/WEB-INF/pages/space/1.jsp
  11. < result name="create" >/WEB-INF/pages/space/2.jsp
  12. < result name="view">/WEB-INF/pages/space/3.jsp
  13. < result name="save" type="redirect-action">initHome.action< /action >
  14. < interceptor - ref name="fileUpload"/>
  15. < interceptor ref name="defaultStack"/>
  16. < action>
  17. < action name="groups" class="groupsAction">
  18. < result name="input">smember.action
  19. < result name="view">/WEB-INF/pages/space/1.jsp
  20. < /action>

但发现程序执行过程中。groupsAction能拦截判断用户是否登录。而memberAction却不能通过用户登录拦截到。直接就执行memberAction.请问各位有经验的朋友。指点一下.谢谢
   
最后更新时间:2007-11-04
问题出在这句:ServletActionContext.getRequest().getCookies();

请用invocation去获取request。
   
0 请登录后投票
最后更新时间:2007-11-04
downpour 写道
问题出在这句:ServletActionContext.getRequest().getCookies();

请用invocation去获取request。

谢谢。确实应该用invocation去取,现在正常了。但是奇怪的。有些action拦截不到的问题还是存在
   
0 请登录后投票
最后更新时间:2007-11-06
[code] 1. 2. [/code] 二者取其一。 要么将 stack 设为 package 内缺省拦截;要么对 action 单独配置拦截
   
0 请登录后投票
最后更新时间:2007-11-06

 1. <default-interceptor-ref name="spaceStack" />

 2. <action ...>
      <interceptor-ref name="spaceStack"/> 
    </action>
 
 




二者取其一。 要么将 stack 设为 package 内缺省拦截;要么对 action 单独配置拦截
   
0 请登录后投票
论坛首页 Java版 Struts

跳转论坛:
JavaEye推荐