当前位置: 首页 > news >正文

做设计找图有哪些网站有哪些做摄影网站的公司

做设计找图有哪些网站有哪些,做摄影网站的公司,电商到底是做什么的,手机网站格局需求 有个简单的需求#xff0c;对于第三方接口我们需要做个简单的鉴权机制#xff0c;这边使用的是非对称性加密的机制。我们提供三方公钥#xff0c;他们通过公钥对接口json报文使用加密后的报文请求#xff0c;我们通过对接收过来的请求某一个加密报文字段来进行RSA解密… 需求 有个简单的需求对于第三方接口我们需要做个简单的鉴权机制这边使用的是非对称性加密的机制。我们提供三方公钥他们通过公钥对接口json报文使用加密后的报文请求我们通过对接收过来的请求某一个加密报文字段来进行RSA解密校验 考虑到日后方便其他接口使用我这边使用了拦截自定义注解RequestBodyAdvice机制来处理。话不多说来实操一把 定义自定义注解类 Target({ElementType.METHOD}) Retention(RetentionPolicy.RUNTIME) Documented public interface AuthenticationThird{} RAS工具类 pom文件引入依赖 dependencygroupIdcom.github.shalousun/groupIdartifactIdcommon-util/artifactIdversion1.9.2/version/dependency import com.power.common.util.RSAUtil;import java.util.Map;public class RSATool {/*** 随机生成一对公私钥*/public static MapString, String generatorRsaPariKey() {return RSAUtil.createKeys(1024);}/*** 通过公钥来加密获取对应base64字符串** param sourceData* param publicKey* return*/public static String encryptStr(String sourceData, String publicKey) {return RSAUtil.encryptString(sourceData, publicKey);}/*** 通过RAS 公钥加密的字符串 使用私钥来解密** param encryptStr* param privateKey* return*/public static String decryptStr(String encryptStr, String privateKey) {return RSAUtil.decryptString(encryptStr, privateKey);}}私钥配置类 Configuration Data public class ThridApiInfoConfig {Value(${api.auth.privateKey})public String authenticationThirdPrivateKey; } 第三方请求加密后封装报文类 Data public class BaseEncryptReq {private String encryptBoyStr;private String reqSource;} 自定义异常类 Setter Getter public class NoPassException extends RuntimeException {private String message;public NoPassException(String message) {this.message message;}}RequestBodyAdvice这里类能干什么 对RequestBody进行增强处理比如所有请求的数据都加密之后放在 body 中在到达 controller 的方法之前需要先进行解密那么就可以通过 RequestBodyAdvice 来进行统一的解密处理无需在 controller 方法中去做这些通用的操作。 自定义的类需要实现 RequestBodyAdvice 接口但是这个接口有个默认的实现类 RequestBodyAdviceAdapter相当于一个适配器方法体都是空的所以我们自定义的类可以直接继承这个类更方便一些 继承RequestBodyAdviceAdapter类 Slf4j ControllerAdvice public class DecryptRequestBodyAdvice extends RequestBodyAdviceAdapter {Autowiredprivate ThridApiInfoConfig thridApiInfoConfig;Overridepublic boolean supports(MethodParameter methodParameter, Type targetType, Class? extends HttpMessageConverter? converterType) {return methodParameter.getMethod().isAnnotationPresent(AuthenticationThird.class);}Overridepublic HttpInputMessage beforeBodyRead(HttpInputMessage inputMessage, MethodParameter parameter, Type targetType, Class? extends HttpMessageConverter? converterType) {String encoding UTF-8;InputStream inputStream null;try {//step1 获取http请求中原始的bodyString body IOUtils.toString(inputMessage.getBody(), encoding);//step2 将对应字符串转为beanBaseEncryptReq baseEncryptReq JSON.parseObject(body, BaseEncryptReq.class);if (!StringUtil.isNotBlank(baseEncryptReq.getEncryptBoyStr())) {throw new NoPassException(接口加密报文不能为空);}if (!StringUtil.isNotBlank(baseEncryptReq.getReqSource())) {throw new NoPassException(接口请求来源参数不能为空);}//todo 判断来源if (StringUtil.isNotBlank(baseEncryptReq.getReqSource()) !xxx.equals(baseEncryptReq.getReqSource())) {throw new NoPassException(接口请求来源参数不合法);}//step3 解密baseEncryptReq.encryptBoyStr属性进行RSATool解密String decryptBody RSATool.decryptStr(baseEncryptReq.getEncryptBoyStr(), thridApiInfoConfig.getAuthenticationThirdPrivateKey());//step 4 将解密之后的body数据重新封装为HttpInputMessage作为当前方法的返回值inputStream IOUtils.toInputStream(decryptBody, encoding);} catch (NoPassException ex) {log.error(DecryptRequestBodyAdvice 处理解密异常);throw new NoPassException(ex.getMessage());} catch (Exception ex) {log.error(DecryptRequestBodyAdvice 处理解密异常);throw new NoPassException(接口解密异常);}InputStream finalInputStream inputStream;return new HttpInputMessage() {Overridepublic InputStream getBody() throws IOException {return finalInputStream;}Overridepublic HttpHeaders getHeaders() {return inputMessage.getHeaders();}};}} 定义测试controller类 Slf4j RestController RequestMapping(/testController) public class TestController {AuthenticationThirdPostMapping(value/testAuth)public ResultDto testAuth(RequestBody String param){log.info(解密后的报文:{},param);return ResultDto.builder().success(true).message(测试鉴权).build();} } 定义全局异常处理类 Slf4j ControllerAdvice public class GlobalExceptionHandler {/*** 处理 NoPassException 异常** param e* return*/ExceptionHandler(NoPassException.class)ResponseBodypublic ResultDto handleNoPassException(NoPassException e) {log.error(自定义NoPassException异常:{},{}, e.getMessage(), e);return ResultDto.builder().success(false).message(e.getMessage()).build();} 接口响应实体类 Data public class ResultDto {private Boolean success;private String message; }测试效果 我们先用之前的RSATool工具类对报文通过公钥来加密 控制台输出 修改下加密报文 至此就完成了一个简单通用的接口鉴权
http://wiki.neutronadmin.com/news/264800/

相关文章:

  • dz 做企业网站国外网站seo免费
  • 网站托管公司哪家好电商网站建站
  • 30天网站建设备份wordpress网站
  • 河北邯郸做网站建设网站什么费用
  • 网站开发竞品分析门户网站的营销方式
  • 网站怎么更改后台登陆密码南通网站建设一条龙
  • 小视频网站开发适合美工的设计网站
  • 电子商务网站建设各项费用预算是多少多用户 开源oa 系统
  • 长沙网站设计公司石家庄网站建设方案咨询
  • 网站建设帝国网站源码下载了属于侵权吗
  • 自己开个网站c .net网站开发入门
  • 蓝色系的网站wordpress 加速插件
  • 中国太空网站怎样做竞价推广
  • 建设网站制作实训报告网站改版后seo该怎么做
  • 一个网站的建设步骤是做农业的公司管理网站
  • 重要的网站建设在线做分析图的网站
  • phpcms 网站路径网站开发明细报价表
  • 网站建设实训进程计划专业建设网站公司哪家好
  • 简单的asp网站源码WordPress 教育模板
  • 山东网站开发学校怎么制作商城小程序
  • 做外贸生意最好的网站网络运营策划
  • 做门户网站cmswordpress yusi
  • 留学网站建设网络公司的推广
  • 做网站很火的APP万网 网站建设
  • 专业做室内设计的网站有哪些内容wordpress不显示网站标题
  • 济南网站搭建公司青岛seo推广
  • 网站文章收录查询山西建筑工程集团有限公司
  • 定州网站建设兼职服装行业做推广网站
  • 着力规范网站集约化建设wordpress 留言插件
  • 做网站的流程知乎北戴河区建设局网站