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

昆明网站搜索引擎优化学校网站的建设目标是什么

昆明网站搜索引擎优化,学校网站的建设目标是什么,黄骅市属于哪个省哪个市,国外做电商网站背景 最近项目要有向外部提供服务的能力#xff0c;但是考虑到数据安全问题#xff0c;要对接口进行加解密#xff1b;实现加解密的方案有很多#xff0c;比如过滤器、拦截器、继承RequestResponseBodyMethodProcessor什么的#xff0c;不过我最近正在了解ResponseBodyAd…背景 最近项目要有向外部提供服务的能力但是考虑到数据安全问题要对接口进行加解密实现加解密的方案有很多比如过滤器、拦截器、继承RequestResponseBodyMethodProcessor什么的不过我最近正在了解ResponseBodyAdvice RequestBodyAdvice这俩注解本着在实践中应用的目的就准备使用这两个注解来实现加解密功能。 然而配置好后请求怎么都进不到这两个注解的类里。摸索了一天的时间RestController 和ResponseBody 都加了也确认已经扫描进容器中管理了可就是无法生效。 原因 后来发现项目中之前有对所有的controller进行返回结果的统一包装使用的是继承RequestResponseBodyMethodProcessor类来实现 刚刚ResponseBodyAdvice和RequestBodyAdvice一直无法生效就在RequestResponseBodyMethodProcessor这里面做了加密的动作后来不经意间把这个类在WebMvcConfigurer中导入的代码注掉了惊奇的发现ResponseBodyAdvice RequestBodyAdvice这俩注解生效了。 所以初步定位 ResponseBodyAdvice RequestBodyAdvice 和RequestResponseBodyMethodProcessor 会冲突导致不生效。 解决 RequestResponseBodyMethodProcessor 里的逻辑抽取到ResponseBodyAdvice里本来这个也是对返回结果进行增强的所以放到这里也非常合理。 同时扩展了加密的逻辑。 核心代码 ControllerAdvice public class ResponseProcessor implements ResponseBodyAdviceObject {private ObjectMapper om new ObjectMapper();AutowiredEncryptProperties encryptProperties;Overridepublic boolean supports(MethodParameter methodParameter, Class? extends HttpMessageConverter? aClass) {return methodParameter.hasMethodAnnotation(Encrypt.class);}Overridepublic Object beforeBodyWrite(Object body, MethodParameter methodParameter, MediaType mediaType, Class? extends HttpMessageConverter? aClass, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) {byte[] keyBytes encryptProperties.getKey().getBytes();try {if(!methodParameter.hasMethodAnnotation(NoResponseWrapperAnnotation.class)){body new ResponseWrapper(body);}body AESUtils.encrypt(JSONObject.toJSONString(body),encryptProperties.getKey());} catch (Exception e) {e.printStackTrace();}return body;} } java ControllerAdvice public class RequestProcessor extends RequestBodyAdviceAdapter {Autowiredprivate EncryptProperties encryptProperties;Overridepublic boolean supports(MethodParameter methodParameter, Type targetType, Class? extends HttpMessageConverter? converterType) {return methodParameter.hasMethodAnnotation(Decrypt.class) || methodParameter.hasParameterAnnotation(Decrypt.class);}Overridepublic HttpInputMessage beforeBodyRead(final HttpInputMessage inputMessage, MethodParameter parameter, Type targetType, Class? extends HttpMessageConverter? converterType) throws IOException {byte[] body new byte[inputMessage.getBody().available()];inputMessage.getBody().read(body);try {String decrypt AESUtils.decrypt(new String(body), encryptProperties.getKey());final ByteArrayInputStream bais new ByteArrayInputStream(decrypt.getBytes());return new HttpInputMessage() {Overridepublic InputStream getBody() throws IOException {return bais;}Overridepublic HttpHeaders getHeaders() {return inputMessage.getHeaders();}};} catch (Exception e) {e.printStackTrace();}return super.beforeBodyRead(inputMessage, parameter, targetType, converterType);} } java public class AESUtils {private static final String KEY_ALGORITHM AES;private static final String DEFAULT_CIPHER_ALGORITHM AES/ECB/PKCS5Padding;//默认的加密算法public static String getKey(int len){if(len % 16 ! 0){System.out.println(长度要为16的整数倍);return null;}char[] chars 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz.toCharArray();char[] uuid new char[len];if (len 0) {for (int i 0; i len; i) {int x (int) (Math.random() * (len - 0 1) 0);uuid[i] chars[x % chars.length];}}return new String(uuid);}public static String byteToHexString(byte[] bytes){StringBuffer sb new StringBuffer();for (int i 0; i bytes.length; i) {String strHexInteger.toHexString(bytes[i]);if(strHex.length() 3){sb.append(strHex.substring(6));} else {if(strHex.length() 2){sb.append(0 strHex);} else {sb.append(strHex);}}}return sb.toString();}/*** AES 加密操作** param content 待加密内容* param key 加密密码* return 返回Base64转码后的加密数据*/public static String encrypt(String content, String key) {try {Cipher cipher Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);// 创建密码器byte[] byteContent content.getBytes(utf-8);cipher.init(Cipher.ENCRYPT_MODE, getSecretKey(key));// 初始化为加密模式的密码器byte[] result cipher.doFinal(byteContent);// 加密return org.apache.commons.codec.binary.Base64.encodeBase64String(result);//通过Base64转码返回} catch (Exception ex) {ex.printStackTrace();}return null;}/*** AES 解密操作** param content* param key* return*/public static String decrypt(String content, String key) {try {//实例化Cipher cipher Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);//使用密钥初始化设置为解密模式cipher.init(Cipher.DECRYPT_MODE, getSecretKey(key));//执行操作byte[] result cipher.doFinal(org.apache.commons.codec.binary.Base64.decodeBase64(content));return new String(result, utf-8);} catch (Exception ex) {ex.printStackTrace();}return null;}private static SecretKeySpec getSecretKey(final String key) throws UnsupportedEncodingException {//返回生成指定算法密钥生成器的 KeyGenerator 对象 // KeyGenerator kg null;// kg KeyGenerator.getInstance(KEY_ALGORITHM); // // //AES 要求密钥长度为 128 // kg.init(128, new SecureRandom(key.getBytes())); // // //生成一个密钥 // SecretKey secretKey kg.generateKey();return new SecretKeySpec(Arrays.copyOf(key.getBytes(utf-8), 16), KEY_ALGORITHM);// 转换为AES专用密钥} }
http://www.yutouwan.com/news/479515/

相关文章:

  • 网站建设 策划备案空壳网站
  • 成都市学校网站建设让自己的电脑做网站的服务器
  • 个人网站主题wordpress获取gallery
  • 网站开发 图片储存网站开发费入什么科目
  • 重庆教育网站建设桂林最新消息
  • win8式网站后台模板网站mssql 导出数据
  • 上海网站建设电话wordpress开启多站点模式
  • 外贸网站运营推广医疗网站建设哪个好用
  • 济宁网站建设 中企动力临沂设计外网
  • 4s店网站建设wordpress左侧菜单
  • 苏州定制网站建设营口pc网站开发
  • 门网站建设html表格代码
  • 公司门户网站该怎么做电脑清理优化大师
  • 可以先做网站再开公司吗个人域名备案网站名称例子
  • 免费建电子商务网站做网站一般用什么几号字
  • 婚纱摄影行业网站网站建站维护运营
  • 网站腾讯备案设计师图库网站
  • 东莞网站关键词推广珠宝首饰网站建设策划书
  • 重庆网站建设 cqhtwlwordpress api定制
  • 手机访问网站 自动缩放制作网页的收获
  • 临海做网站公司手工制作视频教程简单又漂亮
  • 淘宝实时优惠券网站怎么做的栾川有做网站的吗
  • 做网站有多难网站建设发布教程视频教程
  • 网站开发维护工作百度免费域名注册网站
  • 网站开发建设收费标准做一家网站费用
  • 四川路桥建设股份有限公司网站工业互联网平台公司
  • 企业网站建设流程百科做网站是用什么技术的
  • 手机商城网站建设策划方案范文做药材生意的网站
  • 网站开发哪一门语言更快湖南建设工程采购网站
  • thinkphp租房网站开发网站反链暴增怎么回事