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

洛阳微信网站建设网站运营工作

洛阳微信网站建设,网站运营工作,网络推广公司重诚,做任务免费得晋江币网站概述 使用对称加密的方式实现。前端基于crypto-js。uni-app框架中是在uni.request的基础上#xff0c;在拦截器中处理的。springboot在Filter中完成解密工作。 uni-app 项目中引入crypto-js。 npm install crypto-js加密方法 const SECRET_KEY CryptoJS.enc.Utf8.parse(…概述 使用对称加密的方式实现。前端基于crypto-js。uni-app框架中是在uni.request的基础上在拦截器中处理的。springboot在Filter中完成解密工作。 uni-app 项目中引入crypto-js。 npm install crypto-js加密方法 const SECRET_KEY CryptoJS.enc.Utf8.parse(1234123412341234);function encrypt (msg) {const dataHex CryptoJS.enc.Utf8.parse(msg);const encrypted CryptoJS.AES.encrypt(dataHex, SECRET_KEY, {mode: CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7});return encrypted.ciphertext.toString(CryptoJS.enc.Base64); }解密方法 function decrypt(msg) {const encryptedHexStr CryptoJS.enc.Hex.parse(msg);const str CryptoJS.enc.Base64.stringify(encryptedHexStr);const decrypt CryptoJS.AES.decrypt(str, SECRET_KEY, {mode: CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7});return decrypt.toString(CryptoJS.enc.Utf8); }request拦截器 uni.addInterceptor(request, {invoke(args) {let plaintext JSON.stringify(args.data);plaintext encodeURIComponent(plaintext);const textArray [];while(plaintext.length 15) {textArray.push(plaintext.substring(0, 16));plaintext plaintext.substring(16);}textArray.push(plaintext);const encryptParamArray [];textArray.forEach(item {encryptParamArray.push(btoa(encrypt(item)));})args.data {encryptParams: encryptParamArray};},success(args) {}, fail(err) {}, complete(res) {} });备注 使用encodeURIComponent方法是为了处理 字符“”这个对应java解密的时候存在问题。该模式默认解密长度出限制在16个字符中所以需要将待加密的信息分解成单个字符长度小于16的字符组成数组。 Springboot DecryptFilter解密拦截器 import cn.hutool.json.JSONUtil; import org.apache.commons.codec.binary.Base64; import org.springframework.http.HttpMethod;import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URLDecoder; import java.nio.charset.StandardCharsets;WebFilter(urlPatterns /*) // 过滤所有请求 public class DecryptFilter implements Filter {private String word;public DecryptFilter(String word) {this.word word;}Overridepublic void init(FilterConfig filterConfig) throws ServletException {}Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {HttpServletRequest httpRequest (HttpServletRequest) servletRequest;if (HttpMethod.OPTIONS.matches(httpRequest.getMethod())) {filterChain.doFilter(httpRequest, servletResponse);return;}String encryptedData ;if (httpRequest.getHeader(Content-Type).contains(x-www-form-urlencoded)) {// 获取请求参数或请求体中的加密数据encryptedData httpRequest.getParameter(encryptParams);} else if (httpRequest.getHeader(Content-Type).contains(json)) {StringBuilder stringBuilder new StringBuilder();try (InputStream inputStream httpRequest.getInputStream();BufferedReader bufferedReader new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8))) {String line;while ((line bufferedReader.readLine()) ! null) {stringBuilder.append(line);}}encryptedData JSONUtil.parseObj(stringBuilder.toString()).get(encryptParams).toString();encryptedData encryptedData.replaceAll([\\[\\]\], );}String[] ciphertextArray encryptedData.split(,);// 解密操作例如使用AES解密String decryptedData ;try {decryptedData decrypt(ciphertextArray);} catch (Exception e) {throw new RuntimeException(解密失败, e);}// 重构ServletRequest将解密后的数据设置到新的ServletRequest中ServletRequest modifiedRequest new BodyRewritingRequestWrapper(httpRequest, decryptedData);// 继续执行过滤器链filterChain.doFilter(modifiedRequest, servletResponse);}Overridepublic void destroy() {}private String decrypt(String[] encryptedTextArray) throws Exception {StringBuilder paramsJson new StringBuilder();// 创建解密器Cipher cipher Cipher.getInstance(AES/ECB/PKCS5Padding);byte[] keyBytes word.getBytes(StandardCharsets.UTF_8);SecretKeySpec keySpec new SecretKeySpec(keyBytes, AES);cipher.init(Cipher.DECRYPT_MODE, keySpec);for (String ciphertext : encryptedTextArray) {byte[] decode java.util.Base64.getDecoder().decode(ciphertext);byte[] encryptedBytes Base64.decodeBase64(decode);byte[] decryptedBytes cipher.doFinal(encryptedBytes);paramsJson.append(new String(decryptedBytes, StandardCharsets.UTF_8));}return URLDecoder.decode(paramsJson.toString(), UTF-8);} }BodyRewritingRequestWrapper重写的ServletRequest对相关 import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil;import javax.servlet.ReadListener; import javax.servlet.ServletInputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.util.HashMap; import java.util.Map;public class BodyRewritingRequestWrapper extends HttpServletRequestWrapper {private String body;private JSONObject map;public BodyRewritingRequestWrapper(HttpServletRequest request, String body) {super(request);this.body body;this.map JSONUtil.parseObj(body);}Overridepublic String getParameter(String name) {if (map.containsKey(name)) {return map.get(name).toString();}return super.getParameter(name);}Overridepublic MapString, String[] getParameterMap() {MapString, String[] originalParameters super.getParameterMap();MapString, String[] rewriteMap new HashMap(originalParameters);map.forEach((key, value) - rewriteMap.put(key, new String[]{value.toString()}));return rewriteMap;}Overridepublic ServletInputStream getInputStream() throws IOException {final ByteArrayInputStream byteArrayInputStream new ByteArrayInputStream(body.getBytes());return new ServletInputStream() {public int read() throws IOException {return byteArrayInputStream.read();}Overridepublic boolean isFinished() {return false;}Overridepublic boolean isReady() {return true;}Overridepublic void setReadListener(ReadListener readListener) {}};}Overridepublic BufferedReader getReader() throws IOException {return new BufferedReader(new InputStreamReader(this.getInputStream()));} }注册拦截器 import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.HttpMethod; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import org.springframework.web.filter.CorsFilter;Configuration public class WebConfig {Value(${decrypt.word})private String word;Beanpublic FilterRegistrationBeanDecryptFilter myFilterRegistration() {FilterRegistrationBeanDecryptFilter registration new FilterRegistrationBean();registration.setFilter(new DecryptFilter(word));registration.addUrlPatterns(/*);registration.setName(decryptFilter);registration.setOrder(1); // 设置过滤器的顺序根据实际需求设置return registration;} }
http://www.w-s-a.com/news/954173/

相关文章:

  • 如何提升网站alexa排名货运网站源码
  • 如何看自己网站流量梧州网站设计理念
  • 商城网站建设特点有哪些信息门户
  • 弄一个网站临沂有哪几家做网站的
  • 广州个人网站制作公司网站建设公司价
  • 免费建设网站赚钱小程序开发文档pdf
  • ucenter 整合两个数据库网站网店推广技巧
  • 网站优化排名提升百度wap
  • 八里河风景区网站建设内容摘要网站开发基础学习
  • 上海做外贸网站的公司智慧团建网站登陆平台
  • 上海商务网站建设如何做的网站手机可以用吗
  • 产品推广营销方案seo推广员招聘
  • 做水利网站需要多少钱山东市网站建设
  • 做网站找哪里如何修改wordpress颜色
  • 招商加盟网站系统站长工具 seo查询
  • 工商局网站清算组备案怎么做电商培训机构
  • 做好门户网站建设做本地团购网站怎么样
  • wordpress主题和预览不同20条优化防疫措施方案
  • 艾奇视觉网站建设网站推广需要几个人做
  • 2008 iis 添加网站wordpress固定链接标签加上页面
  • 宁波企业网站制作推荐网站优化人员
  • 大型资讯门户网站怎么做排名沈阳建设工程有限公司
  • 开发中英文切换网站如何做江苏网站建设费用
  • 网站论文首页布局技巧桥东网站建设
  • 网站开发项目经理工资北京微信网站
  • 山西山西省建设厅网站微信备份如何转换为wordpress
  • 同城网站开发实用网站模板
  • 郑州做网站哪家公司好国外购买空间的网站有哪些
  • 资讯cms网站有那些餐饮品牌策划设计公司
  • 网站策划选题网站布局优化