使用struts注解,拦截器(Interceptor)配置方式

我们做开发访问的都是action类,所以添加过滤器就没添加拦截器简单、方便,因为拦截器只拦截action,而过滤器神马都拦截,从效率就可以看出拦截器的效率高

呵呵,废话不多说,现在开始配置:

拦截器配置步骤:

一、先写一个拦截器,因为我们重点在配置,这里我写了个登录拦截器(LoginInterceptor .java),继承AbstractInterceptor

package com.kaishengit.web.interceptor;

import java.util.Map;
import java.util.Set;


import com.kaishengit.pojo.Employee;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.opensymphony.xwork2.util.TextParseUtil;

public class LoginInterceptor extends AbstractInterceptor{

	private static final long serialVersionUID = 1L;
	private String excludeActionName;//剔除的拦截方法
	private String sessionName;//用户名在session中存放的key值
	
	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		String actionName = invocation.getProxy().getActionName();//获取当前访问的action名字
		
		Set<String> set = TextParseUtil.commaDelimitedStringToSet(excludeActionName);
		
		if(set.contains(actionName)){
			return invocation.invoke();
		}else{
			Map<String, Object> session = invocation.getInvocationContext().getSession();
			Employee employee = (Employee) session.get(sessionName);
			if(employee == null){
				return "login";//没有登录,跳转到登录页
			}else{
				return invocation.invoke();
			}
		}
	}
	
	
	//get set
	public String getExcludeActionName() {
		return excludeActionName;
	}
	public void setExcludeActionName(String excludeActionName) {
		this.excludeActionName = excludeActionName;
	}
	public String getSessionName() {
		return sessionName;
	}
	public void setSessionName(String sessionName) {
		this.sessionName = sessionName;
	}
	
	
	
}

 二、在struts.xml中配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
	"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
	<constant name="struts.convention.result.path" value="/WEB-INF/views"/>
	<!--配置Struts-convention注解的默认父包  -->
	<constant name="struts.convention.default.parent.package" value="myPackage"/>
	
	<!--继承Struts-convention注解插件的xml  -->
	<package name="myPackage" extends="convention-default">
	
		 <interceptors>
		    <!--配置自己写的登录拦截器  -->
			<interceptor name="loginInterceptor" class="com.kaishengit.web.interceptor.LoginInterceptor"/>
			
			<!-- 配置一个自己的拦截器栈 -->
			<interceptor-stack name="myStack">
				<interceptor-ref name="loginInterceptor">
					<param name="sessionName">employee</param>
					<param name="excludeActionName">index,login</param>
				</interceptor-ref>
				<interceptor-ref name="defaultStack"/>
			</interceptor-stack>
		</interceptors>
		
		<default-interceptor-ref name="myStack"/> 
		
		<global-results>
			<result name="login" type="redirectAction">index.action</result>
		</global-results>
	</package>
</struts>

--end---

猜你喜欢

转载自meigesir.iteye.com/blog/1493894