利用SpringMvc的validtor进行数据签名验证

在写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;
                }
            }
        }
    }
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容