from:http://www.cnblogs.com/huzx/archive/2011/06/09/2076328.html

今天在做用户的登陆认证的时候出现的问题。

在传参数的时候,发现参数丢失,导致页面出错 。

<interceptors>

<interceptor name="checkLogin" class="com.topsoft.interceptor.LoginInterceptor" />
</interceptors>

<action name="login" class="com.action.LoginAction">
    <result name="success">/admin/list.jsp</result> 
    <interceptor-ref name="checkLogin" />
</action>

在网上找了一下,说struts-default中,默认的拦截器引用是defaultstack,这个拦截器包传说是经过精心设计的。。所以会把所有的参数注入!。。。

因此要更改默认拦截器,需要加上这个defaultstack.

修改如下

<interceptors>
   <interceptor name="checkLogin" class="com.topsoft.interceptor.LoginInterceptor" />
   <interceptor-stack name="checkLoginStack">
          <interceptor-ref name="checkLogin"></interceptor-ref>
          <interceptor-ref name="defaultStack"></interceptor-ref>
     </interceptor-stack> 
</interceptors>

这里的action的拦截器就引用这个checkLoginStack

<action name="login" class="com.action.LoginAction">
    <result name="success">/admin/list.jsp</result> 
    <interceptor-ref name="checkLoginStack" />
</action>

下面贴出我自己的struts.xml的配置信息

<package name="administrator" extends="struts-default" namespace="/admin" >
    <!-- Interceptors -->
       <interceptors>
         <interceptor name="checkLogin" class="com.interceptor.LoginInterceptor" />
         <interceptor-stack name="checkLoginStack">

                   <interceptor-ref name="checkLogin"></interceptor-ref>
                  <interceptor-ref name="defaultStack"></interceptor-ref>
        </interceptor-stack> 
     </interceptors>
     <!--
注意下面的绿色字的部分,我把登陆的action也放在了这个包下面,所以如果指定这个默认的拦截器的话,那登陆那里就登陆不了了,因为这个拦截器会对这
个包里的所有Action进行拦截。当登陆的时候,也会进行拦截,对session里的User对象进行是否为空的验证,而这个时候session里的
User对象肯定是空的,那么就被拦截下来了,不会跳转到LoginAction进行登陆操作。
所以说这里最好把登陆的Action放在别的包里,这样下面这一句就可以对该包的所有Action进行拦截,进行登陆认证,判断用户是否登陆,如果没有登
陆,那好,对不起,请你出去,登陆再来操作。所有在我的源配置文件里,下面这一句是没有的,不要弄错了。-->

<!--这一句会对该包里的所有Action进行拦截,而不需要在Action里具体指定该拦截器-->
     <default-interceptor-ref name="checkLoginStack"></default-interceptor-ref>

<global-results>
         <result name="login">/admin/login.jsp</result>
    </global-results>

<action name="adminList" class="com.action.ArticleList">
           <result name="success">/admin/list.jsp</result>
         <interceptor-ref name="checkLoginStack"></interceptor-ref>
    </action>
    <!-- Login -->        
    <action name="loginn" class="com.action.LoginAction">

        <result name="success">/admin/index.html</result>  
        <result name="login">/admin/login.jsp</result>

    </action>
    <!-- get All User list -->
   <action name="userList" class="com.action.UserListAction">
          <result name="success">/admin/Users.jsp</result> 
         <interceptor-ref name="checkLoginStack"></interceptor-ref>
  </action>
</package>

这是登陆验证的拦截器

public class LoginInterceptor extends AbstractInterceptor {
    @Override
    public String intercept(ActionInvocation ai) throws Exception {
         // TODO Auto-generated method stub
         System.out.println("------------------Check Login----------------------------");

         Map<String,Object> session=(Map<String,Object>)ai.getInvocationContext().getSession();

         Admin user=(Admin)session.get("user");
         if(user==null)
        {    return Action.LOGIN; } else {    return ai.invoke(); }  
    }
}

(转)关于Struts 2 拦截器参数丢失问题的更多相关文章

  1. Struts 2 拦截器

    什么是Struts 2 拦截器  拦截器就是当用户请求后台Action类时在Action的Excute()方法执行前和Result返回魔板试图之后(将页面(数据)发送给浏览器渲染之前)所需要的一些通用 ...

  2. Struts的拦截器

    Struts的拦截器 1.什么是拦截器 Struts的拦截器和Servlet过滤器类似,在执行Action的execute方法之前,Struts会首先执行Struts.xml中引用的拦截器,在执行完所 ...

  3. Struts加入拦截器后取不到页面参数

    在Struts2的demo项目中添加了一个简单的拦截器,突然发现,Action中取不到页面的参数了 这也是很蛋疼的事情,还好这个比较简单,稍微一查就发现问题: Struts2中很多的功能是用拦截器实现 ...

  4. java框架篇---struts实现拦截器

    Struts2的拦截器和Servlet过滤器类似.在执行Action的execute方法之前,Struts2会首先执行在struts.xml中引用的拦截器,在执行完所有引用的拦截器的intercept ...

  5. struts自定义拦截器配置

    配置自己的拦截器可以先参照下系统的拦截器是怎么配置的,首先打开struts-default.xml搜索下interceptor:系统里的拦截器有很多,拦截器都是放在堆栈里的,系统引用的是默认堆栈, & ...

  6. struts 用拦截器进行用户权限隔离,未登录用户跳到登录界面 *** 最爱那水货

    一般,我们的web应用都是只有在用户登录之后才允许操作的,也就是说我们不允许非登录认证的用户直接访问某些页面或功能菜单项.对于个别页面来说,可能不需要进行拦截,此时,如果项目采用struts view ...

  7. struts自定义拦截器

    第01步:配置web.xml,启动struts框架 <?xml version="1.0" encoding="UTF-8"?> <web-a ...

  8. struts中拦截器的开发

    1.开发Interceptor类 用户自定义的拦截器一般需要继承AbstractInterceptor类,重写intercept方法 public class UserInterceptor exte ...

  9. struts之拦截器

    拦截器是为了让一些自己不希望发生的事情进行预防.以下我说一下struts自己定义拦截器. 以下我贴下struts.xml里的自定义的拦截器: <package name="my&quo ...

随机推荐

  1. C#算法基础之冒泡排序

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  2. JqGrid 使用方法详解

    JQGrid JQGrid是一个在jquery基础上做的一个表格控件,以ajax的方式和服务器端通信. JQGrid Demo 是一个在线的演示项目.在这里,可以知道jqgrid可以做什么事情. 下面 ...

  3. 解决oracle归档日志写满了(ORA-00257)的问题

    解决ORA-00257: archiver error. Connect internal only, until freed 此问题属于归档日志满了. 解决办法: SQL> select * ...

  4. jquery学习全面总结

    本文仅针对jquery的部分知识点做总结,更为全面的可以去官网看中文文档.可以更为详细的了解jquery及其特性. window.onload 和$(document).ready() 我 windo ...

  5. 《QQ欢乐斗地主》山寨版

    使用Cocos2d-x编写,模仿<QQ欢乐斗地主>的界面实现了一个具有简单AI的单机版斗地主游戏. 游戏的详细说明请查看游戏目录下的help.txt文件. 下载地址: http://dow ...

  6. 利用AVL树实现搬箱问题的best fit策略

    //my.h //定义两个数据类型,货物Goods,箱子Box #include <vector> #include <cstddef> #include <iostre ...

  7. 一种简单的权限管理ER图设计

    权限管理支持动态地管理用户的角色和权限.权限代表用户可以在什么对象上进行什么操作:角色是一组权限的集合. PS:当增加或删除某个用户的角色时,系统自动将该角色对应的权限(角色 -权限关联表)增加或删除 ...

  8. ie支持CSS3标签

    让IE6/IE7/IE8浏览器支持CSS3属性 by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/w ...

  9. sql语句分组统计出年月日下数据记录数目

    把时间设置date类型,其中 select count(*),year(b.date),month(b.date) ,day(b.date) from person as b group by yea ...

  10. ThinkPHP图片上传

    ThinkPHP是国内比较流行的轻量级的PHP框架,它在国内流行的一个最主要的因素在于它的说明文档非常健全完善,以及它源码内的注释都是中文的,方便于英语能力较差的程序员学习. 图片上传在网站里是很常用 ...