//在struts2如何实现拦截器
* 定义需求
* 如果用于已经登陆,可以访问action中的save()方法
* 如果用户没有登陆,则不能访问action中的save方法
模拟:session.setAttriute("user","user")
* 定义拦截器
/*
* struts2中的拦截器是单实例运行
*/
@SuppressWarnings("serial")
public class PerssionInterceptor implements Interceptor {
public PerssionInterceptor(){
System.out.println("PerssionInterceptor 拦截器的构造方法");
}
//初始化方法,在拦截器的声明周期中,该方法执行一次
public void init() {
System.out.println("PerssionInterceptor init");
}
/**
* 在拦截器的声明周期中,该方法执行多次
* ActionInvocation: 代表一个给定动作的执行状态, 拦截器可以从该类的对象里获得与该动作相关联的 Action 对象和 Result 对象
* * 由struts2创建,在运行时注入
*/
public String intercept(ActionInvocation invocation) throws Exception {
//请求的UserAction对象
System.out.println("invocation.getAction() "+invocation.getAction());
//请求的UserAction对象的代理对象
System.out.println("invocation.getProxy().getAction() "+invocation.getProxy().getAction());
//访问的action中的方法 svae
System.out.println("invocation.getProxy().getMethod() "+invocation.getProxy().getMethod());
//访问的action所在的命名空间 /aop
System.out.println("invocation.getProxy().getNamespace() "+invocation.getProxy().getNamespace());
//获取session
Map sessionMap=invocation.getInvocationContext().getSession();
//从session中获取user
Object user=sessionMap.get("user");
//如果user==null
if(user==null){
//转到没有权限的页面
return "error";
}
//真正调用action的save方法
String resultValue=invocation.invoke();
System.out.println("resultValue "+resultValue);
return resultValue;
}
//销毁方法,在拦截器的声明周期中,该方法执行一次
public void destroy() {
System.out.println("PerssionInterceptor destroy");
}
}
* 让拦截器运行
* 在struts_aop.xml文件配置拦截器
<interceptors>
<!-- 声明自定义的拦截器 -->
<interceptor name="perssionInterceptor" class="cn.itcast.aop.PerssionInterceptor" />
<!-- 定义新的拦截器栈 -->
<interceptor-stack name="perssionStack">
<!-- 引用默认栈-->
<interceptor-ref name="defaultStack"/>
<!-- 增加自定义的拦截器 -->
<interceptor-ref name="perssionInterceptor"/>
</interceptor-stack>
</interceptors>
<!--struts2执行时,真正要执行的拦截器栈-->
<default-interceptor-ref name="perssionStack"/>
* 测试运行
在struts2如何实现拦截器和配置过程
最新推荐文章于 2021-02-12 20:38:11 发布