Step 1:
改造OrderController的apply方法,添加請求頭參數authId,sign, order參數需要改造成OrderParam類型,OrderParam 實現 SignText接口
public Order apply(@RequestHeader String authId,@RequestHeader String sign, @RequestBody Order order)
{
??? BeanUtils.copyProperties(param, order);
}
/** * 簽名明文 */
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder(alphabetic = true)
public interface SignText {
??? default String toText() {
??????? return JsonUtil.toJson(this);
??? }
}
Step 2:
驗簽AOP
/** * 驗簽aop */
@Component
@Aspect
public class SignAop {
??? @Autowired
??? private SignService signService;
??? @Before(value = "execution(* com.imooc.seller.controller.*.*(..)) && args(authId,sign,text,..)")
??? public void verify(String authId, String sign, SignText text) {
??? //authId應該保存在數據庫或者配置文件,由對方提供,這里簡化。
??? String publicKey = signService.getPublicKey(authId);???
??? Assert.isTrue(RSAUtil.verify(text.toText(), sign, publicKey), "驗簽失敗!");
??? }
}