2018-05-20 17:16
@mangguo1 如果 userInfo.html 没经手 enjoy ,那肯定是没法使用 #(ctx)
在浏览器里面直接通过 URL 请求 html 页面,没走 enjoy 进行过处理,肯定当成纯文本原样显示出来
2018-05-20 16:41
@jimchow isXx 确实是 java bean 规范,但 java 规范中很多并不好,例如 EJB 这类。
因此,对于 isXx 属性的处理, enjoy 仅仅是对 obj.xx 表达式默认去找 getXx() 方法而不是 isXx() 方法
而对于方法名的命名,enjoy 完全不干预,也不在意,例如你完全可以将方法名设置为 isXx() ,只不过在使用 enjoy 表达式的时候用一下 obj.isXx()
2018-05-20 16:34
jfinal enjoy 默认已经处理了安全问题,对于绝大部分场景都很安全,通过 com.jfinal.template.expr.ast.MethodKit.java 代码可以看到下面的安全保护:
1:禁止访问的类
System.class, Runtime.class, Thread.class,
Class.class, ClassLoader.class, File.class,
Compiler.class, InheritableThreadLocal.class,
Package.class, Process.class, RuntimePermission.class,
SecurityManager.class, ThreadGroup.class, ThreadLocal.class
2:禁止访问的方法名
"getClass", "getDeclaringClass", "forName", "newInstance", "getClassLoader",
"getMethod", "getMethods", "getField", "getFields",
"notify", "notifyAll", "wait",
"load", "exit", "loadLibrary", "halt",
"stop", "suspend", "resume", "setDaemon", "setPriority"
如果你的模板中出现上述被禁止访问的类和方法名,enjoy 会自动探测到并抛出异常
2018-05-18 19:43
碰到这种情况直接调用方法就好:
obj.geteBook()
obj.isXxx()
enjoy 这样设计的原因是为了提升性能,如果设计成支持 isXxx() 方法的 obj.xxx 形式取值,那么就要在 getXxx() 方法找不到时再找一次 isXxx() 方法,这个会显著拉低性能
但凡是考虑性能的框架都会考虑这里,例如 fastjson 就不支持 isXxx() 来生成 json
此外, eclipse 生成器会为 eBook 属性生成 geteBook() 方法,这个是 bug,需要你手动改掉,如果不改的话,可以在 enjoy 直接调用这个方法: obj.geteBook()
obj.isXxx 以及 geteBook 这类情况是很少发生的,为照顾少数场景而拉低整体性能是不值得的。让这类场景去使用 obj.isXxx()、obj.geteBook() 来实现功能是权衡后的结果
fastjson 甚至阿里巴巴的 Java 规范手册上压根就直接规定 boolean 属性的 getter 方法不能是 isXxx(), 必须是 getXxx()
这是一个好问题,点赞
2018-05-18 17:36
加个 SessionIdHandler:
public class SessionIdHandler extends Handler {
@Override
public void handle(String target, HttpServletRequest request,
HttpServletResponse response, boolean[] isHandled) {
// L.cm update by 2014-08-06 更精准的判断
boolean isFromURL = request.isRequestedSessionIdFromURL();
if (isFromURL) {
target = target.substring(0, target.indexOf(';'));
}
next.handle(target, request, response, isHandled);
}
}
具体代码在这里:
https://gitee.com/596392912/JFinal-commons/blob/master/src/main/java/com/siweifu/ext/handler/SessionIdHandler.java
最后配置一下:
me.add(new SessionIdHandler());
这个问题本质上与 jfinal 无关