一、 准备工作

  1. 建立一个metamask钱包或者tp钱包(其他的也可)

  2. 搭建一个java项目

二、登录流程

  1. 客户端可以使用自定义字符拉取钱包进行签名(一般用WalletConnect组件连接钱包)

  2. 连接钱包后拿到用户签名前后的字符,并与钱包地址一起给到服务端

  3. 服务端接收到后,使用web3j提供的方法进行数据合法性校验

  4. 校验成功后持久化处理

三、代码示例

  1. 导入web3开发包
<!--web3j-->
<dependency>
    <groupId>org.web3j</groupId>
    <artifactId>core</artifactId>
    <version>5.0.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.web3j/crypto -->
<dependency>
    <groupId>org.web3j</groupId>
    <artifactId>crypto</artifactId>
    <version>5.0.0</version>
</dependency>
  1. 开发一个登陆接口
     /**
     * 用户使用钱包地址登录
     *
     * @param userVO 用户登录vo
     * @return {@link UserVO}
     */
    @PostMapping("/login")
    public UserVO doLogin(@RequestBody UserVO userVO) {
        log.info("login param: address: {}, signature: {}, msg: {}", userVO.getAddress(), userVO.getSignature(), userVO.getMsg());
        //参数签名验证
        if (!NumberUtil.isHexNumberRex40(userVO.getAddress())) {
            log.info("login 地址格式非法!");
            throw new BusinessException(ResponseCode.ILLEGAL_ADDRESS_FORMAT);
        }
        if (!Web3SignatureVerification.verifySignature(userVO.getAddress(), userVO.getSignature(), userVO.getMsg())) {
            log.info("login 签名校验失败!");
            throw new BusinessException(ResponseCode.SIGNATURE_VERIFICATION_FAILED);
        }
       //验证后的逻辑处理...
    }