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. CSS之perspective

    <!DOCTYPE html> <html> <head> <style> #div1 { position: relative; height: 15 ...

  2. 如何检查mysql中建立的索引是否生效的检测方法及相关参数说明

    所使用的mysql函数explain语法:explain < table_name >例如: explain select * from t3 where id=3952602;expla ...

  3. Oracle + Entity Framework 更新没有设置主键的表

    最近用Entity Framework 开发的时候,发现一个问题,在默认情况下,EF不能对一个没有主键的表进行更新.插入和删除的动作. 那么,应该怎么处理没有主键的表呢? 我们打开这个表的edmx文件 ...

  4. (转)Ehcache作为分布式缓存的研究

    ehcache支持两种拓扑结构,一种是Distributed Caching,另一种是Replicated Caching Distributed Caching 这和一般意义上的分布式缓存非常类似, ...

  5. new失败判断

    使用 malloc/calloc 等分配内存的函数时,一定要检查其返回值是否为空;但是C++ 里,如果 new 分配内存失败,默认是抛出bad_alloc异常,不会返回空:但是有些编译器对c++标准支 ...

  6. WiFi相关知识

    1. 无线路由器的覆盖范围和带机量 覆盖范围取决于发射功率.接收灵敏度,以及对端的发射功率和接收灵敏度.因为Wi-Fi设备在发出数据包后,一定要等待对方回ACK才会确认发送成功,所以,如果任意一方的发 ...

  7. Linux 信号量 生产者消费者小例题

    菜鸟偶遇信号量,擦出火花(只有不熟才会有火花).于是上网搜资料和看<Unix环境高级编程>实现了几个小例题,高手请勿喷!这几位写得非常好啊: 题目来源: http://www.it165. ...

  8. [java学习笔记]java语言核心----面向对象之static关键字

    static关键字用处 用于修饰成员变量和成员函数 被修饰后的成员具有以下特点: 随着类的加载而加载 优先于对象存在 被所有对象所共享 可以直接被类名调用 使用注意 静态方法只能访问静态成员:非静态方 ...

  9. 类似QQ的应用毗邻(Pilin)即时聊天源码

      这个应用是从安卓教程网分享过了的,个人觉得这个还是挺不错的,毗邻(Pilin)即时聊天应用源码,承诺的 基于xmpp openfire asmack 的即时聊天应用,继续完善,现在只完成了文字.表 ...

  10. android源码-安卓源码-Android源码下载-安卓游戏源码

    android源码   高仿精仿金山手机卫士应用源码V1.2 高仿精仿金山手机卫士应用源码,该应用的级别实现了金山卫士的级别功能了,可以说跟现实中我们使用的金山卫士应用的功能几乎差不 人气:9286  ...