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. React-Native的基本控件属性方法

    对React-Native的学习,从熟悉基本控件开始. View 属性方法 序号 名称 属性Or方法 类型 说明 1 accessibilityLabel 属性 string   2 accessib ...

  2. Objective-C中一个方法如何传递多个参数的理解

    原来如此 Objective-C语法中多参数传递方法经常是初学者最容易犯困的地方.我自己也是刚刚悟出来与大家分享. 分析 由于我们已有的语言经验告诉我们定义方法都是: 一个类型匹配一个参数(动态语言甚 ...

  3. TSQL基础(二)

    over() 开窗函数 排名函数必须和over()一起使用,所以先了解over(). OVER 子句定义查询结果集内的窗口或用户指定的行集. 然后,开窗函数将计算窗口中每一行的值. 您可以将 OVER ...

  4. 了解下SoftReference

    昨天同事看到别人一段关于实现缓存功能的代码,看完之后他有点不明觉厉,哈哈,然后就给周围同事也看了下,可能之前大家都没用过SoftReference,所以并不明白是如何实现的. 于是我就把代码要了过来, ...

  5. Cocos2d-x实例:设置背景音乐与音效-HelloWorld场景实现

    HelloWorld场景就是游戏中的主菜单场景.HelloWorld.h文件代码如下: #define __HELLOWORLD_SCENE_H__ #include "cocos2d.h& ...

  6. @override

    目录 用处 作用 注意   用处: 继承抽象类,必须实现抽象方法,方法上要加@override 实现接口时,必须实现接口里定义的方法,方法上要加@override         作用: 可以检查方法 ...

  7. TransparentBlt函数的使用注意事项

    今天客户需要在软件上需要添加一个自己公司的Logo,要求使用镂空透明的形式展现,本来以为很简单的工作没想到在MFC下这么复杂.Logo为BMP格式,白色背景. 以为和在按钮上显示控件差不多,先导入BI ...

  8. Tomcat虚拟目录的设置

    在学习JSP/Servlet的过程中,配置Tomcat的虚拟目录可能是我们遇到的第一个比较麻烦的问题,说是麻烦是针对我们初学者而言,对于高手那都不是问题.反正我是弄了一天才配置好,发现网上给出的很多配 ...

  9. 简单使用packetbeat

    简单使用packetbeat 标签:packetbeat elasticsearch 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在前面两篇文章中记录了使用logstash来收集mysql的慢 ...

  10. 排序,求几个最值问题,输入n个整数,输出其中最小的k个元素。

    看完两个求最大值算法之后的一些感想. 如果想直接看算法的可以跳过.但是我觉得我这些想法还是比较有用的,至少对我将来的算法设计是这样的. 算法的功能越强大,必然意味着速度慢,因为根据丛林法则,那种慢又功 ...