Skip to main content

通过增加timeout-control以解决当tcp连接一直处于SYN_SENT状态导致java中的ldap-client的failover不工作的问题

· 8 min read
orange
programmer on jvm platform

今天遇到一个问题是当测试模拟ldap的服务端主节点挂掉的时候并在页面点击登录, 后端一直未作出响应.
这个问题的原因是因为代码中的ldap-clientfailover未生效, 通过排查发现ldap-client一直在连接ldap的主节点, 并且tcp连接一直处于SYN_SENT状态.
由于ldap-client没有默认情况下没有控制超时, 导致代码一直堵塞, 从而导致failover不工作.
下面将开始介绍具体细节以及解决方案.

脚本中实现修改用户密码

· 3 min read
orange
programmer on jvm platform

平时在写脚本的时候, 有时候会需要使用passwd命令来修改用户的密码.
例如为NIS的测试服务器新增一些测试用户, 并且为这些用户设置密码.
由于passwd需要交互式的输入, 所以在脚本中使用passwd命令会报错.
一个潜在的解决方案是加入--stdin参数但是有的linux发行版中passwd命令中的--stdin不存在.
如果你还这样执行的话将会显示以下错误.

passwd: unrecognized option '--stdin'
Usage: passwd [options] [LOGIN]

Options:
-a, --all report password status on all accounts
-d, --delete delete the password for the named account
-e, --expire force expire the password for the named account
-h, --help display this help message and exit
-k, --keep-tokens change password only if expired
-i, --inactive INACTIVE set password inactive after expiration
to INACTIVE
-l, --lock lock the password of the named account
-n, --mindays MIN_DAYS set minimum number of days before password
change to MIN_DAYS
-q, --quiet quiet mode
-r, --repository REPOSITORY change password in REPOSITORY repository
-R, --root CHROOT_DIR directory to chroot into
-S, --status report password status on the named account
-u, --unlock unlock the password of the named account
-w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS
-x, --maxdays MAX_DAYS set maximum number of days before password
change to MAX_DAYS

由于passwd命令中没有--stdin选项, 所以我们需要使用其他的方式来解决这个问题.

基于clojure表达式实现更加灵活的数据验证

· 13 min read
orange
programmer on jvm platform

数据验证是一个非常常见的需求, 对于java项目来说, 目前jakartabean validation已经成为了java中的标准.
其自带了一些常见的数据验证注解, 例如@NotNull, @NotEmpty, @Size等.
这些注解如果遇到复杂的数据验证需求时, 就会显得力不从心. 所以需要一种更加灵活的数据验证方式.
为了满足这种需求, 我们可以通过clojure表达式来实现数据验证.
同时我们需要和现有的bean validation一起使用, 以便于满足现有的业务需求.