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. android操作通讯录的联系人

    界面配置文件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     and ...

  2. Android之线程终止

    Hanlder是线程与Activity通信的桥梁,利用handler接收到任务线程,放到任务队列里面派对执行. 1.初始化的时候,定义启动的线程为一个守护线程,这样当主线程消亡掉的时候,其他线程也会被 ...

  3. Unity3D项目实战笔记(5):延时功能的几种实现

    我所做过的系统,分单机版系统(2005年).CS系统(2010年).实时系统(2015年),各个系统均有“延时”功能:定时调度的: 本博客说的是实时系统中的延时功能(基于Unity3D游戏引擎). 在 ...

  4. Libcurl笔记一

    一:1,全局初始化及释放:CURLcode curl_global_init(long flags) flags: CURL_GLOBAL_ALL //初始化所有的可能的调用. CURL_GLOBAL ...

  5. CentOS 7学习笔记(二)之Nginx安装

    说明: 1.这篇学习记录的目的是如何在CentOS 7上面安装Nginx,包括两种安装方式,yum源安装和源代码编译安装: 2.CentOS 7初学者,某些观点带有猜测之意,文中不足之处,还请批评指正 ...

  6. plupload 限制上传数量 只能选择一张图片上传

    var files=[];var errors=[];            var chunk=<%=request.getParameter("chunk")%>; ...

  7. WCF、Web API、WCF REST、Web Service之区别

    http://www.dotnet-tricks.com/Tutorial/webapi/JI2X050413-Difference-between-WCF-and-Web-API-and-WCF-R ...

  8. ACE_linux:Reactor与Proactor两种模式的区别

    一.概念: Reactor与Proactor两种模式的区别.这里我们只关注read操作,因为write操作也是差不多的.下面是Reactor的做法: 某个事件处理器宣称它对某个socket上的读事件很 ...

  9. 一个不错的图片滑动展示插件 anythingslider

    一个不错的图片http://css-tricks.com/anythingslider-jquery-plugin/ DEMO演示: http://css-tricks.github.io/Anyth ...

  10. LAMP(Ubuntu+apache+mysql+php)+Zend Studio 新手の PHP的开发环境搭建

    因为工作需要,就从c#转型过来研究PHP.可是没想到从一开始就遇上了问题,环境配置方面的问题足足令我头疼了两天.因为博主本人对于linux的接触非常少,所以在解决这个问题的时候也学到了不少东西, 非常 ...