2018-10-24 14:07

这个是文件下载,看一下下载后的文件打开以后是不是乱码

你直接用浏览器的 F12 打开的,浏览器可能不认 xls 的文件格式,所以看上去是乱码,其实不是

2018-10-24 13:10

@山有鬼兮 3.4 升级到 3.5 完全不需要犹豫

2018-10-24 12:15

@xgd 前段时间已经打包发布了,首页可以下载

2018-10-24 11:00

jfinal 3.5 的话直接用 getRawData() 接收就好

2018-10-23 23:47

@alotuser 具体怎么做呢? 能否在贴子里头补充点示例性的代码?

我在直觉上感觉这个没法处理,因为 setter 方法也是要用于正当功能需求的,如果过滤的话,也就影响正当功能了

2018-10-23 21:06

@alotuser 源头不好杜绝,假定你的 account 这张表有个字段叫 money,然后你的 Model 通常也会有 setMoney(int) 方法,这个 setMoney(int) 在正常使用情况下用于合理的需求,例如更新 money 值的时候

但为了合理需求而创建的 setMoney(...) 方法也会被非法利用,恶意用户可以人为制造带有 money 字段的 post 请求,客户端的这个恶意操作是无法消除掉的

2018-10-23 19:49

再补充一下, jfinal 的 Model 中还预备了一个回调方法叫 public void filter(...),只要你的 model 中覆盖掉这个方法,就会被回调,如果希望有更高的安全性,避免其他开发者没有使用 Model.keep(...) 从而造成问题,还可以像下面这样来做:

public class User extends Model {
protected void filter(int filterBy) {
// 这里使用 keep 或者 remove 过滤掉一些不希望被操作的对象
// 在需要对这些字段进行操作时,使用别的方式来做,例如Db.save()
}
}

2018-10-23 19:44

补充一下,jfinal demo 仅为了展现最简洁的 demo,所以对 getModel(...) 没有添加:
blog.keep("id", "title", "content");

2018-10-23 19:43

@alotuser 这个问题在 6 年半以前就有人提到过,但对方提出来的时候 jfinal 就已经有提供 API 来快捷解决问题, 6 年半以前的贴子在这里:
https://www.oschina.net/question/260040_46570

这个问题学名叫:mass assignment, 楼主能看到这个现象证明极其细心,在 IT 这行很有发展潜力啊

简单说,在 getModel(...) 以后,通过 Model.keep(....) 即可指定哪些字段是保留的,哪些是要删除的,例如更新用户信息时如果用到了 User ,那么:
getModel(User.class).keep("nickName", "email").update();
就只会更新指定的字段

无论恶意用户如何在表单中制造新的字段都不可能形成威胁。 这个问题其实对传统的 web 框架也有同样的问题,除非为接收表单单独做一个只存在部分字段的 setter 方法,否则那些没在表单中的字段也可以被注入

2018-10-23 15:54

@rirai 这个功能我天天都在用的,本站 jfinal.com 全站前后台都是这么用的

2018-10-23 15:37

@JJfinal 下载的 demo 可以直接用,严格测试过的

2018-10-23 15:35

一般是 JFinal.start(...) 调用时的第一个参数有错误,如果是标准的 maven web 项目,应该传入 "src/main/webapp"

如果是传统的 Java web 项目,要根据你的实际路径来传值,一般传入 WebRoot 或者 WebContent

如果这个路径没问题,还是出错,那就是路由规则没学好,看看路由规则文档即决即可

2018-10-23 15:33

这种用法用了快两年了,肯定没有问题的

再多理清一下调用关系就可以解决。 将 #define css() 与 #@css() 理解成为函数定义与调用就可以了

2018-10-23 12:51

jfinal 3.5 需要 java 8 , java 8 有很多重要的特性值得升级

2018-10-22 20:41

@排骨逗逗 jfinal 处在后端,只能管到后端,这种情况肯定是客户端的问题