在写SpringMvc项目中,可以在参数中添加@Valid注解进行数据的校验,当然里面的检验是一些比较简单的校验,也可以自定义校验。
在app与后端交互时,除了使用https保证数据在传输中的安全性,同时还需要对数据进行签名,保证数据来源的合法性。App和后端定义了一套相同的加密方式,后端以同样的方式对数据进行签名,验证签名值是否相等。每个接口不能单独去调用一次校验方法,对代码侵入性比较大, 所以可以使用validtor进行处理。
- BaseRestController
/**
* rest控制器基类.提供数据校验
* @author Wang.ch
*
*/
public class BaseRestController {
protected Logger log = LoggerFactory.getLogger(BaseRestController.class);
@Autowired
private HMacUtil hmacutil;
@InitBinder
public void initBinder(WebDataBinder webDataBinder) {
webDataBinder.addValidators(new BaseRequestValidtor());
}
class BaseRequestValidtor implements Validator {
@Override
public boolean supports(Class<?> clazz) {
return BaseRequest.class.isAssignableFrom(clazz);
}
@Override
public void validate(Object target, Errors errors) {
BaseRequest<?> req = (BaseRequest<?>) target;
if (!errors.hasErrors()) {
if (!hmacutil.isAppKeyExist(req.getAppkey())) {
log.warn("a client attemp to use not exist appkey:{} to access", req.getAppkey());
errors.rejectValue("appkey", "appkey", "appkey不存在");
return;
}
//进行sign字段校验.
if (!hmacutil.checkRequest(req)) {
errors.rejectValue("sign", "sign", "sign不合法");
return;
}
}
}
}
}