Struts2的拦截器使用

来源:互联网 发布:c语言调用cmd命令 编辑:程序博客网 时间:2024/04/29 21:31

在struts.xml文件里,配置拦截器使用如下:

<package name="default-dgpartybuild" extends="default">    <!-- 校验当前用户是否加入党建系统  -->    <interceptors><interceptor name="dgpartybuildAuthor"class="net.zdsoft.dgpartybuild.interceptor.AuthorizationIntegerceptor" /><interceptor-stack name="isPartyMemberStack"><interceptor-ref name="permissioncheckStack" /><interceptor-ref name="dgpartybuildAuthor" /></interceptor-stack></interceptors><default-interceptor-ref name="isPartyMemberStack" />    <global-results>    <result name="noauthority" type="freemarker">/dgpartybuild/common/nopermission.ftl</result></global-results></package>


在AuthorizationIntegerceptor拦截器类中使用如下:

public class AuthorizationIntegerceptor extends AbstractInterceptor {/** *  */private static final long serialVersionUID = -7438527351428709633L;private DgPbMemberInfoService dgPbMemberInfoService;@Overridepublic String intercept(ActionInvocation arg0) throws Exception {LoginInfo loginInfo = (LoginInfo) ActionContext.getContext().getSession().get(BaseConstant.SESSION_LOGININFO);DgPbMemberInfo dgPbMemberInfo = dgPbMemberInfoService.getDgPbMemberInfoById(loginInfo.getUser().getTeacherid());if(dgPbMemberInfo == null || (!dgPbMemberInfo.getPartyApplicationState().equals(DgPartyBuildConstant.APPLACTION_STATUS_PROBATIONARY) && !dgPbMemberInfo.getPartyApplicationState().equals(DgPartyBuildConstant.APPLACTION_STATUS_FORMAL))) {return "noauthority";}return arg0.invoke();}public void setDgPbMemberInfoService(DgPbMemberInfoService dgPbMemberInfoService) {this.dgPbMemberInfoService = dgPbMemberInfoService;}}

使用这个拦截器时,只有继承这个就行了,如下:

<!--入党申请人员管理 --><package name="dgpartybuild-joinparty" extends="default-dgpartybuild" namespace="/dgpartybuild/joinparty">    <!-- 推优登记 -->    <action name="memberPushExcellect" class="net.zdsoft.dgpartybuild.action.DgPbPushExcellectAction">        <result name="success" type="freemarker">memberPushExcellectAdmin.ftl</result>    </action></package>


拦截器的其它总结:

一、编写拦截器

1、  实现接口com.opensymphony.xwork2.Intercepter(或继承com.opensymphony.xwork2.AbstractInterceptor)

2、  在interceptor方法中加入如下代码:

    public String intercept(ActionInvocation arg0)throws Exception {

    System.out.println("Before");  //Action之前调用

       String result = arg0.invoke();  //如果此拦截器之后还有拦截器,则调用下个拦截器的intercept方法

                                       //如果之后没有了拦截器,则调用Actionexecute方法

       System.out.println("After");

        return result;   

    }

二、在Struts.xml中配置拦截器

1、  在struts.xml中声明拦截器和拦截器Stack,拦截器Stack可以包括多个拦截器和其他Stack。

<interceptors>

<!-- 拦截器 -->

<interceptorname="MyInterceptor"class="com.test.interceptor.MyInterceptor"></interceptor>

<!-- 拦截器Stack -->

<interceptor-stackname="validationWorkflowStack">

<interceptor-refname="basicStack"/>

     <interceptor-refname="validation"/>

    <interceptor-refname="workflow"/>

</interceptor-stack>

</interceptors>

2、  将拦截器配置到单个Action中,只拦截此Action中的execute方法。

<actionname="register"class="com.test.action.RegisterAction"method="test">

<resultname="success">/success.jsp</result>

<resultname="input">/register2.jsp</result>

<interceptor-refname="MyInterceptor"></interceptor-ref>

</action>

3、  将拦截器配置到所有Action中,拦截所有Action中的execute方法。

<default-interceptor-refname="MyInterceptor"></default-interceptor-ref>

对已经单独配置了拦截器的Action不起作用

三、拦截Action中指定的方法

1、 继承com.opensymphony.xwork2.interceptor.MethodFilterInterceptor。

2、 因为是针对某个Action的方法,所以只能配置在Action内部

<actionname="register"class="com.test.action.RegisterAction"method="test">

<resultname="success">/success.jsp</result>

<resultname="input">/register2.jsp</result>

<interceptor-refname="MyInterceptor">

<param name="includeMethod">test,execute</param><!--拦截textexecute方法,方法间用逗号分隔 -->

<paramname="excludeMethod">myfun</param><!--不拦截myfun方法 -->

</interceptor-ref>

</action>

四、struts2拦截器的interceptor方法中,参数ActionInvocation可用来获取页面用户输入的信息。

public String intercept(ActionInvocation arg0) throws Exception {

       Map map = arg0.getInvocationContext().getSession();

       if(map.get("user") == null) {

           return Action.LOGIN;

       } else {

           return arg0.invoke();

       }

    }

 


 

0 0
原创粉丝点击