1. 拦截器定义

    
    /*** 拦截器 请求参数签名校验* Created by jiyang on 14:47 2017/12/14*/
    @Component
    @Slf4j
    public class ParameterInterceptor implements HandlerInterceptor {public static final String VERIFY_FAIL_MSG = "The request parameter signature verification failed!";@Autowiredprivate ChannelService channelService;@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception {// 渠道编号String channelCode = request.getParameter("channelCode");// 签名String signStr = request.getParameter("sign");if (StringUtils.isBlank(channelCode) || StringUtils.isBlank(signStr)) {log.warn(VERIFY_FAIL_MSG);response.setStatus(HttpStatus.SC_BAD_REQUEST);return false;}Channel channel = channelService.selectByChannelCode(channelCode);if (channel == null) {log.warn(VERIFY_FAIL_MSG);response.setStatus(HttpStatus.SC_BAD_REQUEST);return false;}boolean right = MD5Util.verifySign(channel.getEncryptKey(), request);if (right) {return true;}log.warn(VERIFY_FAIL_MSG);response.setStatus(HttpStatus.SC_FORBIDDEN);return false;}@Overridepublic void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) {return ;}@Overridepublic void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {return ;}}
    
  2. 签名工具
    public class MD5Util {public static String md5(String string) {byte[] hash;try {hash = MessageDigest.getInstance("MD5").digest(string.getBytes("UTF-8"));} catch (UnsupportedEncodingException e) {throw new RuntimeException("UTF-8 is unsupported", e);} catch (NoSuchAlgorithmException e) {throw new RuntimeException("MessageDigest不支持MD5Util", e);}StringBuilder hex = new StringBuilder(hash.length * 2);for (byte b : hash) {if ((b & 0xFF) < 0x10) hex.append("0");hex.append(Integer.toHexString(b & 0xFF));}return hex.toString();}/*** md5签名** 按参数名称升序,将参数值进行连接 签名* @param appSecret* @param params* @return*/public static String sign(String appSecret, TreeMap<String, String> params) {StringBuilder paramValues = new StringBuilder();params.put("appSecret", appSecret);for (Map.Entry<String, String> entry : params.entrySet()) {paramValues.append(entry.getValue());}System.out.println(md5(paramValues.toString()));return md5(paramValues.toString());}/*** 请求参数签名验证** @param appSecret* @param request* @return true 验证通过 false 验证失败* @throws Exception*/public static boolean verifySign(String appSecret, HttpServletRequest request) throws Exception {TreeMap<String, String> params = new TreeMap<String, String>();String signStr = request.getParameter("sign");if(StringUtils.isBlank(signStr)){throw new RuntimeException("There is no signature field in the request parameter!");}Enumeration<String> enu = request.getParameterNames();while (enu.hasMoreElements()) {String paramName = enu.nextElement().trim();if (!paramName.equals("sign")) {params.put(paramName, URLDecoder.decode(request.getParameter(paramName), "UTF-8"));}}if (!sign(appSecret, params).equals(signStr)) {return false;}return true;}}
    
  3. 添加拦截器
    /*** 拦截器*/
    @Configuration
    public class IntercepterConfig extends WebMvcConfigurerAdapter {@Value("${longdai.core.token}")private String token;@Value("${app.profile}")private String profile;@Overridepublic void addInterceptors(InterceptorRegistry registry) {//registry.addInterceptor(new SwaggerInterceptor()).addPathPatterns("/v2/api-docs/**");// Token 验证(仅生产)if (!("dev".equals(profile.trim()) || "dohko".equals(profile.trim()))) {registry.addInterceptor(new TokenInterceptor(token)).addPathPatterns("/**").excludePathPatterns("/health/core/ping");}// 签名校验registry.addInterceptor(getParameterInterceptor()).addPathPatterns("/v3/thirdParty/**");}@Beanpublic HandlerInterceptor getParameterInterceptor(){return new ParameterInterceptor();}
    }

Spring Boot 拦截器 请求参数MD5签名校验相关推荐

  1. 使用spring boot拦截器实现青少年模式

    思路方法一: 便用Spring Boot拦截器采累计在线时间采实现青少年模式的步骤,可以参考以卜步骤: 1.创建一个拦截器类,实现Handlerlnterceptor 接口. 2.在拦截器类中,定义一 ...

  2. Spring Boot拦截器(WebMvcConfigurerAdapter)

    直接按我的步骤走都没有问题: 1 配置自定义的拦截器: package com.configs;import org.slf4j.Logger; import org.slf4j.LoggerFact ...

  3. 解决Spring Boot 拦截器注入service为空的问题

    解决Spring Boot 拦截器注入service为空的问题 参考文章: (1)解决Spring Boot 拦截器注入service为空的问题 (2)https://www.cnblogs.com/ ...

  4. java 拦截器响应中取所有参数,spring boot拦截器中获取request post请求中的参数

    最近有一个需要从拦截器中获取post请求的参数的需求,这里记录一下处理过程中出现的问题. 首先想到的就是request.getParameter(String )方法,但是这个方法只能在get请求中取 ...

  5. spring boot 拦截器获取controller返回的数据_高级码农Spring Boot实战与进阶之过滤器和拦截器的使用及其区别...

    众所周知的Spring Boot是很优秀的框架,它的出现简化了新Spring应用的初始搭建以及开发过程,大大减少了代码量,目前已被大多数企业认可和使用.这个专栏将对Spring Boot框架从浅入深, ...

  6. Spring Boot 拦截器无效,不起作用

    这个问题一般是解决WebMvcConfigurerAdapter过时问题造成的.导致这个问题可能有两个原因:一个是拦截器写错了,另一个是拦截器配置错了. 1.需求是这样的 拦截所有的api请求,判断其 ...

  7. Spring boot拦截器登录检查

    拦截器 进行登录检查 从登录页面跳转到成功页面之后 为了防止表单重复提交 配置视图映射,利用重定向到成功页面 此时,在浏览器直接输入,配置的视图映射地址 也可以直接映射.跳转到成功页面 登录页面,也就 ...

  8. Spring Boot拦截器(Interceptor)详解

    写了那么久的博客,始于Python爬虫,目前专于Java学习,终于有了属于自己的小窝,欢迎各位访问我的个人网站. 文章目录 Interceptor 介绍 Interceptor 作用 自定义 Inte ...

  9. Spring Boot 拦截器

    (一)拦截器概述 1.1拦截器介绍 拦截器的作用类似于Servlet 中的Filter,都可以用于对处理器进行预处理和后处理.在Spring MVC 与Spring Boot 中使用拦截器一般是实现H ...

最新文章

  1. python科学计算整理
  2. JS加法函数,用来得到精确的加法结果(说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果)
  3. 列出所有已安装的perl模块
  4. 【读书笔记-数据挖掘概念与技术】聚类分析:基本概念和方法
  5. “约见”面试官系列之常见面试题第十篇值meta标签(建议收藏)
  6. 初中数学503个必考知识点_2020年中考数学必考知识点公布,考生高分、满分提分必备神器...
  7. 达梦数据库导入oracle数据_达梦数据库助力加速石油石化行业数字化转型升级
  8. javax maven项目缺少_maven冲突解决流程
  9. 【体系结构】Oracle的各种文件及其重要性
  10. 基于java的宠物领养交流网站
  11. 客户信息管理系统----Java实现(以对象数组为主)
  12. 在文档中怎么画横线实线_word怎么画横线虚线?word文档怎么画线条?
  13. MyBatis一对多查询collection三表三层查询
  14. mac电脑怎么彻底删除卸载桌面软件图标的软件?
  15. hdu 4489(排列组合+DP)
  16. 更换网站logo,超简单方法
  17. 5-1链队入队出队操作
  18. AR可视化远程协助,医护诊疗,对讲指挥调度系统方案
  19. 虚拟机防火墙以及端口操作
  20. 【自动驾驶】高精地图在无人驾驶中的应用

热门文章

  1. java计算机毕业设计网络教学平台源码+数据库+系统+lw文档+mybatis+运行部署
  2. 双十一成交额增速日渐下滑,电商之战的重点已在线下市场
  3. 《蜗居》观后感——安得广厦千万间
  4. 1116. 【HNOI2008】T_OY(踢欧阳^_^) (Standard IO)斜率优化dp
  5. 【托业】新托业全真题库---TEST1
  6. 常见大数据面试题汇总带答案
  7. 分数槽集中绕组永磁直线电机工作原理
  8. IP TCP分组内容的解析
  9. php简单排课_基于PHP-WEB网络云环境下的自动排课系统
  10. html分页表格中的线条,HTML_Web分页打印 细线表格+分页打印之终极攻略,最近给客户做打印的时候,客 - phpStudy...