JFinal的Interceptor和Handler
来源:互联网 发布:郑钧灰姑娘 知乎 编辑:程序博客网 时间:2024/05/04 19:10
Interceptor是JFinal中的拦截器,它只拦截action请求,对静态资源比如css,image等是不拦截的,且它不能重写改变请求参数
Handler则像servlet中的Filter拦截一切请求响应,不管是action请求,还是访问静态资源都会进行拦截,并且可以对拦截的参数,进行重写,重写URL
Inteceptor 拦截器通常写法判断是否登录:
public void intercept(ActionInvocation ai) {
Controller c = ai.getController();
UserModel u = c.getSessionAttr("user");
System.out.println(ai.getControllerKey());
if(ai.getControllerKey().equals("/")||ai.getControllerKey().contains("pic")||ai.getActionKey().contains("login/login")){
ai.invoke();
}else{
if(u==null){
try {
//在JFinal中直接使用c.getResponse().getWriter().print("脚本");是不会有效果的,须使用renderHtml
c.renderHtml("<script>alert('未登录');location.href='../xmgl_login.html'</script>");
// c.redirect("/xmgl_login.html");
} catch (Exception e) {
e.printStackTrace();
}
}else{
ai.invoke();
}
}
// ai.invoke();
}
在Class或者action(只有参数为空且为public的方法才是action)中添加拦截器,用注解@Before,@Clear是清楚当前位置以上的所有拦截器
例如 :
@Before(AAA.Class)
Class A{
@Before(testInteceptor.Class)
@Clear//对该拦截器testInteceptor不起作用,因为clear只清除Class A (AAA.class)以及它上层的拦截器
public void b(){
}
}
拦截器分为全局拦截器在config初始化java文件配置,第二种是注入拦截器Inject,第三种是class类拦截器,第四种是action 方法拦截器。(四个优先顺序也是从高到低)
如果业务方法想使用拦截器可以使用Ehancer.ehance 或者Duang.duang或者是Controller.ehance方法进行加强强化之后就可以使用拦截器了
例如:
Class OrderService{
@Before(AA.class)
public void service(String aa,String bb){
}
}
class test extend Controller{
public void t(){
OrderService os = enahce(OrderService.class);//对业务层进行加强
os.service(aa,bb);//在ehance加强之后 拦截器才起效果
}
}
使用enhance还有使用inject注入方法,通过注入可以给JAR包中的类 注入拦截器,因为我们无法修改JAR包添加@Before,
Inject用法, OrderService os = Enhancer.enhance(TestXX.class,Tx.class);给TestXX注入TX事务拦截器,通过注入的拦截器
将拦截目标文件的所有action
还有要注意的是直接renderJavascript("<script>alert('xx')</script>") 只会在页面输出<script>alert('xx')</script">这段文字, 正确的使用方法是,在页面脚本中
<script src="/app/js"></script> src中的地址即为action的地址 public void js(){ renderJavascript(" function test(){ alert(' test') } ")}
- JFinal的Interceptor和Handler
- ws的interceptor和handler
- jfinal中Interceptor拦截器的使用
- JFinal拦截器Interceptor
- JFinal学习--03Interceptor
- jfinal interceptor初试
- JFinal 如何进行XSS过滤(JFinal 的简单介绍到利用JFinal 的handler实现)
- interceptor 模式和webwork interceptor 的应用
- JFinal学习笔记-Interceptor详解
- JFinal学习--04Handler
- jfinal和freemaker的分页
- Spring MVC Handler Interceptor
- filter和interceptor的区别
- interceptor和filter的区别
- AbstractInterceptor和Interceptor的区别
- interceptor和listener的比较
- Jfinal学习和环境的搭建
- 关于jsp servlet和jfinal的基础知识
- 欢迎使用CSDN-markdown编辑器
- 加油
- 银行运维手记---2016-10-18-问题整理
- 时间复杂度
- ThreadPoolExecutor一些小结
- JFinal的Interceptor和Handler
- 微信小程序例子——使用input组件实现密码框
- Cocos2d-导演、场景、层、精灵
- HDU 2977 Color Squares BFS
- cocos-2dx中对字符串逻辑长度的简单处理
- HDU-2136-Largest prime factor(素数筛法)
- Java中Map集合详解
- Linux 下使用 objdump 反汇编
- Vundle常用命令