欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Struts2 拦截器—拦截action

程序员文章站 2022-05-28 17:06:58
...

        对于拦截器的基本使用这里我就懒得打字了,我这里就讲下如何用 Struts2 拦截器 拦截action。这是我个人的想法,如果有什么不对的,或者你们有什么更好的方法。请多多留言!

    

       拦截器的默认拦截的方法参数是:includeMethods(要拦截的方法) 和 excludeMethods(不需要拦截的方法),多个的时候,用逗号分开;

       但,现实中,有些时候。我们还是需要设置有3 个类的所有方法都不需要拦截和4个方法不需要拦截,那么如果使用excludeMethods 的话,就得把 3 个类中的所有方法都列出来。当然如果少就列列就算了,如果多呢。不就麻烦了。所以。下面我们将讨论如何拦截 类 这个级别的请求。

 

一、在配置文件中修改下:

		<interceptors>
 			<interceptor name="mainSession" class="net.zy.interceptor.MainSessionInterceptor"></interceptor>
 			<interceptor-stack name="mainSessionStack">
 				<interceptor-ref name="mainSession">
 					<param name="excludeMethods">login,logOut</param>
 					<!-- 自定义参数 excludeActions -->
 					<param name="excludeActions">sms_,main_</param>
 				</interceptor-ref>
 				<!-- 默认拦截器 -->
 				<interceptor-ref name="defaultStack"></interceptor-ref>
 			</interceptor-stack> 
 		</interceptors>
 		<!-- 设置未默认的拦截器 -->
 		<default-interceptor-ref name="mainSessionStack"></default-interceptor-ref>

 在配置文件中,添加自定义参数。excludeActions

 

二、在拦截器类中,添加 excludeActions  成员变量,并且提供get,set方法,struts2会自定给我们set参数进来。

  

package net.zy.interceptor; 

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession; 
import net.zy.models.SysUsers;
import net.zy.models.VipBean; 
import org.apache.struts2.ServletActionContext; 
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;

/**
 * 拦截器
 * 
 * @author 妞见妞爱
 */
public class MainSessionInterceptor implements Interceptor{

	private String excludeActions;
	private String excludeMethods;  
	 
	
	public String getExcludeMethods() {
		return excludeMethods;
	}

	public void setExcludeMethods(String excludeMethods) {
		this.excludeMethods = excludeMethods;
	}

	public String getExcludeActions() {
		return excludeActions;
	}

	public void setExcludeActions(String excludeActions) {
		this.excludeActions = excludeActions;
	}

	public void destroy() {
		// TODO Auto-generated method stub
		
	}

	public void init() {
		// TODO Auto-generated method stub
		
	}

	 
	public String intercept(ActionInvocation invocation) throws Exception { 
		
		HttpServletRequest request = ServletActionContext.getRequest();
		HttpSession session = request.getSession();
		 
		// 获取请求的action名称
		String actionName = invocation.getInvocationContext().getName();    
		// 获取action后附带参数    
        //Map parameters = invocation.getInvocationContext().getParameters();    

		//配置文件中 排除的 action
		String [] excludeAction = excludeActions.split(",");
		for (int i = 0; i < excludeAction.length; i++) {
			if (actionName.startsWith(excludeAction[i])) {
				return invocation.invoke(); 
			}
		}
		
		//配置文件中 排除的 Method
		String [] excludeMethod = excludeMethods.split(",");
		for (int i = 0; i < excludeMethod.length; i++) {
			if (actionName.endsWith(excludeMethod[i])) {
				return invocation.invoke(); 
			}
		}
		
		SysUsers  users = (SysUsers) session.getAttribute("user");
		if (users != null) {
			return invocation.invoke();
		}
		 
		 		
		return "Timeout";
	}

	 

}

 

 

 

 

   嘿嘿。。。就这样了....简单点。。。。。

相关标签: Struts2 拦截器