struts2拦截器
struts.xml
<package name="test" extends="struts-default,json-default" namespace="/">
<!-- 引入拦截器 =============================================-->
<interceptors>
<interceptor name="myinterceptor" class="com.ym.interceptor.MyInterceptor" ></interceptor>
<interceptor name="mymethodeinterceptor" class="com.ym.interceptor.MyMethodInterceptor"></interceptor>
<!-- 定义拦截栈 -->
<interceptor-stack name="myStack">
<!-- 引入默认拦截器和自定义拦截器 -->
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="myinterceptor">
<!-- 参数设置 -->
<param name="excludeActionName">login_login,switch_switchLanguage</param>
</interceptor-ref>
<!-- 拦截、不拦截的方法指定 -->
<interceptor-ref name="mymethodeinterceptor">
<!-- 不拦截的方法 -->
<param name="excludeMethods">login*,switch_*</param>
<!-- 拦截的方法 -->
<param name="includeMethods">update_*,fileUp_*,downfile_*</param>
</interceptor-ref>
<!-- 引入表单 重复提交阻止类 -->
<interceptor-ref name="token">
<!-- 阻止提交表单访问的方法 -->
<param name="includeMethods">update_pwd*</param>
</interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 启动拦截器 -->
<default-interceptor-ref name="myStack" />
自定义拦截类
import java.util.Map;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
import com.ym.model.UserEnt;
public class MyMethodInterceptor extends MethodFilterInterceptor {
/**
* 拦截逻辑处理,判断用户必须登录系统,并且用户的权限是经理级别以上的,才能访问指定方法
*/
@Override
protected String doIntercept(ActionInvocation arg0) throws Exception {
Map<String ,Object> session=arg0.getInvocationContext().getSession();
//取值
UserEnt user=(UserEnt)session.get("userEnt");
//这里判断条件只是测试,根据需求可重写
if(user!=null&&user.getLog_Grade().equals("5")){
//放行
return arg0.invoke();
}
//返回到提示界面
return "intercept";
}
}
import java.util.Map;
import java.util.Set;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.opensymphony.xwork2.util.TextParseUtil;
import com.ym.model.UserEnt;
public class MyInterceptor extends AbstractInterceptor{
private String excludeActionName; //剔除的拦截方法
private String sessionName; //存在session中 的key名称
get、set方法....
/*
* (重写父类方法)
*/
@Override
public String intercept(ActionInvocation arg0) throws Exception {
//获取当前访问的 action
String actionName=arg0.getProxy().getActionName();
String actionMethod=arg0.getProxy().getMethod();
//通过工具类获取拦截器 的初识化参数
Set <String> set=TextParseUtil.commaDelimitedStringToSet(excludeActionName);
//判断集合中的内容写拦截逻辑
if(set.contains(actionName)){
//放行
return arg0.invoke();
}else{
//获取session对象
Map<String ,Object> session=arg0.getInvocationContext().getSession();
//取值
UserEnt userEnt=(UserEnt)session.get("userEnt");
//判断
if(userEnt==null){
//跳转指定界面,没有登录
return "notPass";
}else{
//放行
return arg0.invoke();
}
}
}
}