为了方便访问,尝试对 OFBiz 16的版本(apache-ofbiz-16.11.03)关闭强制 https,可以使用 http 的方式访问,大的系统设置和老版本差不多,是在 url.properties 中开启,不过16版本和12版本,是有些区别的。
16版本的,把 no.http 设置成 N,然后把 port.https.enabled也设置成 N,按照老版本的思路,到这里就没问题了,但是使用的时候会有问题,访问 http://localhost:8080/facility,登录后,无法使用其他的功能,一点链接就跳转到登录界面,找了一圈原因,发现问题出现在 cookie 上。
出现这种问题,归根结底就是1个原因,Tomcat 认为你是个新访客,查看 Chrome 调试工具,果不其然,每次请求,response 的 header 总会设置1个新的 JSESSIONID,但是,每次刷新,request 里,却没有带上这个 JSESSIONID,导致每次请求都是「新」的。
而且问题就出在 response 返回的 cookie 上,一个 Secure 的关键字,表示这个 cookie 只能再 HTTPS(SSL)安全的环境下传递(cookie基础知识这里就不多说了),当我用不安全的方式去请求的时候,cookie 内容是不带的。
找到了症结,就找解决方案,又找了一圈,找到了这2篇博客,一下子豁然开朗,仔细研究了一下,问题可以解决了。
https://blog.csdn.net/xiaozaq/article/details/78438393,
https://issues.apache.org/jira/browse/OFBIZ-6655
无非是后来的 OFBiz 的开发者们提升了安全等级。想要使用 http 访问,在对应的 webapp 中,把 web.xml的cookie-config 中的 Secure 设置成关闭即可。
<session-config>
<session-timeout>60</session-timeout> <!-- in minutes -->
<cookie-config>
<http-only>true</http-only>
<secure>false</secure>
</cookie-config>
<tracking-mode>COOKIE</tracking-mode>
</session-config>
但是,有特殊的几个模块,需要关闭两遍,这个点也坑了我2天,还是在启动日志里发现的,也怪我运气不好,测试生效刚好就用了有问题的模块,原因是 ordermgr、accounting、facility、content 这4个模块,加载了2遍,还有一边在 birt、lucene 模块的ofbiz-component.xml 又挂载了一边,导致模块的web.xml 被覆盖了。