在struts2如何实现拦截器和配置过程
来源:互联网 发布:视频广告过滤大师 mac 编辑:程序博客网 时间:2024/05/16 01:30
//在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中的方法 svaeSystem.out.println("invocation.getProxy().getMethod() "+invocation.getProxy().getMethod());//访问的action所在的命名空间 /aopSystem.out.println("invocation.getProxy().getNamespace() "+invocation.getProxy().getNamespace());//获取sessionMap 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"/> * 测试运行