2017-05-20 15:20

可以额外定义一个 annotation,然后在 AuthInterceptor 中读取出来,例如:
@Before(AuthInterceptor.class)
@Para(123)
public void index()


然后在 AuthInterceptor 中通过 inv.getMethod().getAnnotation().value() 获取到该值

通过常情况下并不需要上面的方法来传递,例如,通过 inv.getActionKey() 来获取当前 action 对应的值,这个值可以事先用 Map 映射好

还可以通过 inv.getController().getPara(...) 得到参数中的值来知道参数是什么。

如果参数是全局的,或者是 Routes 级的,还可以在配置拦截器的时候通过构造方法传进去:addInterceptor(new AuthInterceptor(123));

还有一种方式是,通过创建继承类 class MyAuthInterceptor extends AuthInterceptor,在这两个类的构造方法中指定不同的参数值

2017-05-20 15:15

@辉落无言 jfinal 的 controller 才能接收到请求,service 需要被 controller 调用

2017-05-20 15:13

@bu0.0gu 首先要确保 jfinal 版本为 3.1 或者 3.0,然后还要确保 ViewType 是否为 JFINAL_TEMPLAE

2017-05-19 18:24

@辉落无言 你要是早点单步调试的话,早就解决了,出现问题一定要单步进行调试

2017-05-19 18:22

考虑如下办法:
1:用拦截器,检查请求中的 Referer 是否是本站域名,避免从其它地方跳转过来的恶意请求
2:对于敏感性的业务请求,采用隐藏域传递 token,避免恶意请求伪造请求。在表单提交前必须要先获取到一个 token,并且 token 使用一次立即失效
3:对于大额支付类需要高度案全的场景,甚至可以考虑密码或者验证码验证

jfinal 项目是标准的 java web 项目,所以以前你所掌握的 CSRF 防范的方法依然有用,直接用于 jfinal 项目即可。

充分利用 jfinal 的拦截器、Handler 来进行处理

2017-05-19 18:08

从 jfinal demo 入手,jfinal 手册也要看一遍,三个小时足够上手使用

如果希望更快,加入俱乐部有大量实战代码,直接可用:http://jfinal.com/club

2017-05-19 17:28

jfinal 开发的项目是普通的 java 项目,理论上来说在 jfinal 中使用第三方不一定要有一个整合的动作,直接使用就好

尤其是 jfinal 2.0 版本以后,Model 也有了 getter、setter 方法,就更加方便使用第三方了

2017-05-19 10:28

@aloneJFinal 目前还没有用过 kotlin,暂时没有计划

此外,kotlin 不是直接与 java 打通的吗? 那么在 kotlin 下直接用 jfinal 不就可以了?

2017-05-19 10:10

@辉落无言 我们都是可以的,你可以下载首页的 jfinal demo试试,里面也有删除功能

2017-05-18 18:20

不要将参数直接拼接在 sql 中,而是要用 "?" 进行占位,防止被 sql 注入

2017-05-18 18:19

@辉落无言 抛出异常了没?如果有异常,看一下异常信息,如果没异常,要这样:
Db.update("delete from t_biaoming where fzhujian = ?", "canshu");

2017-05-18 17:55

@caoxusheng 这个是正解, sql 中少了一个 from

2017-05-18 17:51

只要是renderJson(contentPage) 这行代码真正被执行了,就不会出这个问题,检查两个方向:
1:路由弄错了,请求根本没到达 list() 这个 action方法
2:拦截器拦截了请求,但拦截器并没有 inv.invoke() 将请求传递到 action

2017-05-18 17:48

@leomj 调用的地方看一下 ActionHandler 中的 handle 方法, render 操作是在所有相关拦截器执行完以及 action 执行完以后