Struts2--拦截器
来源:互联网 发布:linux编译安装mysql 编辑:程序博客网 时间:2024/06/06 15:41
1 action拦截器
拦截器整体流程:
1.1 基于配置文件方式配置拦截器
请求到达后台后,可以通过配置执行方法的拦截器来达到比如权限控制,日志一系列功能。
写一个Demo,来计算一个处理请求使用了多长时间。
请求处理类及方法:
public class HelloAction { public String execute(){ System.out.println("execute"); return Action.SUCCESS; }}
自定义拦截器:
<struts> <package name="default" extends="struts-default" namespace="/"><!-- 配置拦截器 --> <interceptors><!-- 配置拦截器 --> <interceptor name="time" class="cn.sxt.interceptor.TimeInterceptor"></interceptor> </interceptors> <action name="hello" class="cn.sxt.action.HelloAction"> <result>/hello.jsp</result><!-- 引用拦截器,将拦截器和action关联--> <interceptor-ref name="time"/> </action> </package></struts>
struts.xml配置文件:
<struts> <package name="default" extends="struts-default" namespace="/"><!-- 配置拦截器 --> <interceptors><!-- 配置拦截器 --> <interceptor name="time" class="cn.sxt.interceptor.TimeInterceptor"></interceptor> </interceptors> <action name="hello" class="cn.sxt.action.HelloAction"> <result>/hello.jsp</result><!-- 引用拦截器,将拦截器和action关联--> <interceptor-ref name="time"/> </action> </package></struts>
将action和拦截器关联。
可以配置一个拦截器栈:
<struts> <package name="default" extends="struts-default" namespace="/"><!-- 配置拦截器 --> <interceptors><!-- 依次配置拦截器 --> <interceptor name="time" class="cn.sxt.interceptor.TimeInterceptor"></interceptor><!-- 定义一个拦截器栈 ,可以包含多个拦截器的引用,栈的引用和拦截器一致--> <interceptor-stack name="myStack"> <interceptor-ref name="time"/> <!-- 引入默认的拦截器栈 --> <interceptor-ref name="defaultStack"/> </interceptor-stack> </interceptors> <!-- 将定义的栈设置为默认的拦截器--> <default-interceptor-ref name="myStack"/> <action name="hello" class="cn.sxt.action.HelloAction"> <result>/hello.jsp</result> <interceptor-ref name="myStack"/> </action> </package></struts>
1.2 基于注解方式的拦截器
package com.example.actions;import com.opensymphony.xwork2.ActionSupport;import org.apache.struts2.convention.annotation.Action;import org.apache.struts2.convention.annotation.Actions;@InterceptorRefs({ @InterceptorRef("interceptor-1"), @InterceptorRef("defaultStack")})public class HelloWorld extends ActionSupport { @Action(value="action1", interceptorRefs=@InterceptorRef("validation")) public String execute() { return SUCCESS; } @Action(value="action2") public String doSomething() { return SUCCESS; }}
2 方法拦截器
自定义方法拦截器需要继承MethodFilterInterceptor,重写doIntercept()方法。
自定义方法拦截器:
//方法拦截器public class ListInterceptor extends MethodFilterInterceptor{ @Override protected String doIntercept(ActionInvocation invocation) throws Exception { // TODO Auto-generated method stub System.out.println("方法拦截器被执行"); return invocation.invoke(); }}
两个测试请求类:
public class HelloAction { public String add(){ System.out.println("add"); return Action.SUCCESS; }}public class LoginAction { public String login() { System.out.println("login"); return Action.SUCCESS; }}
struts.xml配置
<struts> <package name="default" extends="struts-default" namespace="/"><!-- 配置拦截器 --> <interceptors><!-- 依次配置拦截器 --> <interceptor name="methodInterceptor" class="cn.sxt.interceptor.ListInterceptor"></interceptor><!-- 定义一个拦截器栈 ,可以包含多个拦截器的引用,栈的引用和拦截器一致--> <interceptor-stack name="myStack"> <interceptor-ref name="methodInterceptor"><!-- 配置被拦截的方法,中间用,号隔开。 --> <param name="includeMethods">add</param><!-- 配置不被拦截的方法 --> <param name="excludeMethods">login</param> </interceptor-ref> <!-- 引入默认的拦截器--> <interceptor-ref name="defaultStack"/> </interceptor-stack> </interceptors><!-- 定义默认的拦截器/栈 --> <default-interceptor-ref name="myStack"/> <action name="add" class="cn.sxt.action.HelloAction" method="add"> <result name="success">/success.jsp</result> </action> <action name="login" class="cn.sxt.action.LoginAction" method="login"> <result name="success">/success.jsp</result> </action> </package></struts>
当执行add方法时拦截,执行,执行login方法时不拦截。如果一个方法配置在excludeMethods,同时又配置在includeMethods 中,将会被拦截,
阅读全文
0 0
- 【Struts2】Struts2中拦截器
- struts2拦截器
- Struts2拦截器
- struts2.0拦截器
- struts2.0 拦截器
- struts2拦截器学习
- struts2 拦截器
- Struts2拦截器(Interceptor)
- struts2.0拦截器
- 用上struts2拦截器
- struts2拦截器简介
- Struts2:拦截器概述
- Struts2拦截器(Interceptor)
- struts2 拦截器
- 关于struts2拦截器
- Struts2的拦截器
- struts2拦截器
- Struts2拦截器总结
- 推荐算法的回顾总结
- iOS 通过协议提供匿名对象
- C++程序员学Java系列之三: 从Hello World! 开始
- 微信运动修改步数方法
- JS实现unicode和UTF-8互转
- Struts2--拦截器
- 数据类型:Undefined,Null——JavaScript知识小结05
- kmp深入
- 在Python结构体中存储值
- 多外部中断的优先级配置
- LeetCode系列之Add Two Numbers
- 美团编程大赛 数学题 拓展欧几里得和解是否存在
- vuejs路由使用的问题Error in render function: "TypeError: Cannot read property 'matched' of undefined"
- 快递实名制遭遇滑铁卢,背后原因在这里