我们做开发访问的都是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---