一、 准备工作
-
建立一个metamask钱包或者tp钱包(其他的也可)
-
搭建一个java项目
二、登录流程
-
客户端可以使用自定义字符拉取钱包进行签名(一般用WalletConnect组件连接钱包)
-
连接钱包后拿到用户签名前后的字符,并与钱包地址一起给到服务端
-
服务端接收到后,使用web3j提供的方法进行数据合法性校验
-
校验成功后持久化处理
三、代码示例
- 导入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>
- 开发一个登陆接口
/**
* 用户使用钱包地址登录
*
* @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);
}
//验证后的逻辑处理...
}