介绍

liferay是开源的门户解决方案,和oracle webcenter site是同一类产品,在开源的门户产品中,liferay算是比较优秀的,界面简洁现代,安装方便,自定义能力强,但架构较老,还是jsp架构,可能是由于开发时间较早的原因,但总体瑕不掩瑜,如果对架构并没有过多的要求还是可以考虑。

Read the rest of this entry

背景

某项目接口采用plsql开发,接口返回用户密码,但要求密码不能是明文返回,因为程序内部需要用到明文密码,所以只能在plsql中对密码进行对称加密,在程序内部进行解密,程序采用java开发。

实现

dbms_crypto是oracle自带的加密包,包含多种加密解密方法,非dba用户需要授权才能进行使用
grant execute on dbms_crypto to xxx;

下面是一个通过DES算法加密的function

function encrypt_password(p_password in varchar2) return varchar2 is
   v_key           varchar2(32) := 'TucM2fYDaxnd1UeRL7HVvyshXvXaMKO9';
   v_encrypted_raw RAW(256);
 begin
   v_encrypted_raw := dbms_crypto.Encrypt(src => UTL_RAW.CAST_TO_RAW(p_password),
                                          typ => DBMS_CRYPTO.DES_CBC_PKCS5,
                                          iv=>UTL_RAW.CAST_TO_RAW('12345678'),
                                          key => UTL_RAW.CAST_TO_RAW(v_key));
   return utl_raw.cast_to_varchar2(utl_encode.base64_encode(v_encrypted_raw));
  end;

背景

某项目OIM修改密码异常的慢,修改一次密码需要耗费15分钟时间,该功能基本已不可用,通过curl工具调用OIM rest api进行修改密码也需要十几分钟的时间

curl -X PUT \
http://10.10.10.10:14000/iam/governance/selfservice/api/v1/users/61729/password \
-H 'accept-language: zh-CN,en-US;q=0.8,zh;q=0.7,zh-TW;q=0.5,zh-HK;q=0.3,en;q=0.2' \
-H 'authorization: Basic xxxxxxxxxxxxxxxxxxxxx' \
-H 'cache-control: no-cache' \
-H 'content-type: application/json' \
-H 'postman-token: e86578e5-6c12-6bd0-3304-7588cae0f60a' \
-H 'x-requested-by: xx' \
-d '{
"oldPassword": "welcome@2020",
"newPassword": "welcome@2020238",
"confirmPassword": "welcome@2020238"
}'

排查

获取源码

后台并无报错,也没相关有价值的日志,因此考虑从源码入手,api源码位于oim这个应用中,你可以登录console查看ear包路径

Read the rest of this entry

Markdown

相信现在应该没有人没听过markdown,如果你没听过,你该反思下,如果你没用过,建议你从现在开始尝试。markdown是一种基于文本的描述语言,什么意思呢,通俗的讲就是你只要靠键盘就能完成文章的排版,并且可读性很高,Markdown因为其超级简单的语法(十分钟就能入门),能够摆脱万恶的鼠标,友好的编辑界限,灵活的扩展性等特点迅速在开发人员间流行起来,成为文档编写首选工具,github的README文档默认使用markdown。

markdown主要是用来写文档,在word的时代,写文档对于开发人员就是折磨,“文档十分钟,排版一小时”是很常见的,不仅如此排出来往往还是一坨狗屎,有了markdown之后,情况就变了,你只需用md描述你的格式,具体排版就交给工具。

在写文档上,md描述的是文档的格式,但作为一门这么优秀的描述语言,可不仅仅能描述格式这么简单。

Markdown绘制流程图

我们怎么描述一个流程?用自然语言描述就是“A提交到B,B审批后流转到C,C审批后流程结束”,用流程编排工具就是在界面上拖拽各种节点将每个节点按照流程流转规则连接,用程序描述就是后台需要将流程信息结构化存储,并且借助流程引擎驱动流程。既然markdown是描述语言,能不能用markdown来描述流程,肯定是可以的,我们拍脑袋想一个语法:

Read the rest of this entry

背景

最近在重构一个框架的代码,在重构的过程中就在想一个问题,如何做单元测试,当然,这个问题不是如何使用JUnit的问题,而且如何使做单元测试更充分,如果你有时间写几千个测试用例,这个也许不是问题,但当你的系统足够庞大,而你的人力和时间有限的情况下,如何最大限度的完成单元测试。

天上是不会掉馅饼的,有的话也只会砸到天才,砸不到普通人,我们都是普通人,不是天才,据说天才们已经想到方案了睡觉的时候,程序能不能自动查 bug,让你在睡觉的时候自动帮你查bug。如果没有完美的方案,有没有退而求其次的方案。这个就是今天要讨论的主题。

单元测试主要解决两个问题

  • 系统错误
  • 业务错误

Read the rest of this entry