2018-05-20 17:16

@mangguo1 如果 userInfo.html 没经手 enjoy ,那肯定是没法使用 #(ctx)

在浏览器里面直接通过 URL 请求 html 页面,没走 enjoy 进行过处理,肯定当成纯文本原样显示出来

2018-05-20 16:51

@mangguo1 贴点详细代码, 当前信息量不足以知道你的应用场景

2018-05-20 16:43

所以,这里讨论的焦点并不在于如何针对 boolean 型属性生成的方法名如何命名,是命名成 isXx() 还是命名成 getXx()

而这个命名的选择 enjoy 本身并不在意,只是 enjoy 在获取这个属性时换个写法:obj.isXx()

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:35

代码量很少,感谢分享

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-20 16:16

页面是怎么写的代码? 添加 me.add(new ContextPathHandler("cxt")) 以后要通过 #(cxt) 去获取

2018-05-19 12:28

反馈错发到了分享频道,此贴后续会被删除,请知悉

2018-05-19 12:28

反馈错发到了分享频道,此贴后续会被删除,请知悉

2018-05-19 12:27

反馈错发到了分享频道,此贴后续会被删除,请知悉

2018-05-19 11:11

问题应该出在 ApplicationiInterceptor 之中,里头干预了程序的执行流程,例如里头 try catch 过, 然后吃掉了这个异常没有将异常抛出来

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 18:11

@行者x 人家用工具扫描,不需要知道你的 ip 和端口,全自动

2018-05-18 17:49

生产环境有公网 ip,甚至有域名,那么全世界都可以访问,通常有下面一些访问:
1:google 百度这类搜索引擎
2:黑客的自动化扫描工具,寻找你系统的漏洞
3:竞争对手

上述情况再正常不过了,可以通过在内网部署来对比公网部署,可知其正确性

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 无关