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), "验签失败!");
}
}