Struts2的拦截器使用

本文详细介绍了在Struts框架中配置拦截器的方法,包括编写拦截器的步骤、Struts.xml文件中配置拦截器的细节以及拦截器的其他总结,帮助开发者更好地理解和应用拦截器。

在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;

	@Override
	public 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>

<!-- 拦截器 -->

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

<!-- 拦截器Stack -->

<interceptor-stack name="validationWorkflowStack">

<interceptor-ref name="basicStack"/>

     <interceptor-ref name="validation"/>

    <interceptor-ref name="workflow"/>

</interceptor-stack>

</interceptors>

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

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

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

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

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

</action>

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

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

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

三、拦截Action中指定的方法

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

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

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

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

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

<interceptor-ref name="MyInterceptor">

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

<param name="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();

       }

    }

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值