Skip to main content

脚本中实现修改用户密码

· 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一起使用, 以便于满足现有的业务需求.

使用nvm实现nodejs多版本管理

· 2 min read
orange
programmer on jvm platform

在日常开发中, 有时候需要使用不同版本的nodejs来开发不同的项目.
例如, 有一个UI项目, 需要使用nodejsv12版本, 而另一个项目需要使用nodejsv14版本.
这时候就需要使用nvm来实现nodejs的多版本管理.
本文将以nodejs-v18为例介绍如何使用nvm来实现nodejs的多版本管理

启用SSH密码验证

· One min read
orange
programmer on jvm platform

ssh中, 默认是不允许使用password认证的, 但是有时候, 我们需要使用password认证.
为了能够实现这个功能, 我们需要对ssh进行配置

常见的命名前缀

· 7 min read
orange
programmer on jvm platform

在编程中, 命名是一件非常重要的事情, 好的命名能够让代码更加易读, 也能够让代码更加易于维护.
通常我们在阅读第三方库的代码时, 会发现很多方法的命名都是以一些固定的命名前缀开头的.
本文主要总结目前我所了解的一些常见的命名前缀的含义. 并对其进行分类, 大致的分类主要如下.

  • 对象的创建
  • 对象的属性和状态
  • 对象的元素操作
  • 其他

对于每种命名规则, 我都会给出自定义的例子, 同时也会附带第三方库中的现有案例以便于更好的理解.
代码以kotlin实现, 但是大部分的命名规则都是通用的, 也适用于其他的语言.

springdoc-v2中在不配置@ParameterObject的情况下实现Pageable以及Sort对象到API参数的转换

· 5 min read
orange
programmer on jvm platform

springdoc是一个可以快速生成API文档的第三方公共库, 并提供了UI页面以供访问.
同时它也提供了spring-webmvc中的handler中的参数对象到API参数的转换.
对于spring-data-commons中的PageableSort, springdoc提供了开箱即用的功能, 需要在配置文件中启用以及在参数中声明@ParameterObject

application.yml
springdoc:
model-converters:
pageable-converter:
enabled: true

对于已经存在的项目, 当刚引入springdoc时, 需要配置大量的@ParameterObject注解以实现参数转换功能.
这个过程通常比较繁琐, 因为对于一个具有一定规模的项目而言, 其对外提供的API往往会非常多, 需要进行大量的修改功能才能实现该功能
那么此时我们需要一种解决方案, 即如何在不配置@ParameterObject的情况下实现Pageable以及Sort对象到API参数的转换

通过为aws-eks托管的k8s中的service启用nlb以实现对外暴露服务

· One min read
orange
programmer on jvm platform

默认情况下k8s中的ServiceClusterIP类型, 即只能在集群内部访问, 无法通过外部访问(这里的外部指的是k8s集群外部, 即k8s集群所在的VPC外部).
NodeProt也存在同样的问题, 无法通过外部访问.
为了能够通过外部访问k8s中的service, 需要启用nlb以实现为aws-eks托管的k8s中的service启用外部访问能力.