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

网站建设竞争对手分析网站建设费用分析

网站建设竞争对手分析,网站建设费用分析,做淘客网站去哪里购买空间,一站式婚庆公司前文通过阅读源码#xff0c;深入分析了DispatcherServlet及相关组件的工作流程#xff0c;本文不再阅读源码#xff0c;介绍一下扩展HttpMessageConverter的方式。 HttpMessageConverter工作方式及扩展方式 前文介绍过#xff0c;HttpMessageConverter是读写请求体和响应…前文通过阅读源码深入分析了DispatcherServlet及相关组件的工作流程本文不再阅读源码介绍一下扩展HttpMessageConverter的方式。 HttpMessageConverter工作方式及扩展方式 前文介绍过HttpMessageConverter是读写请求体和响应体的组件。 RequestResponseBodyMethodProcessor(用于解析请求参数、处理返回值)从内置的HttpMessageConverter查找支持当前请求体、响应体的实例然后调用read、write来读写数据。 Spring内置的HttpMessageConverter在装配RequestResponseBodyMethodProcessor的时候创建具体代码在WebMvcConfigurationSupport类addDefaultHttpMessageConverters方法中。 开发者如果要扩展使用自己的HttpMessageConverter实现可以编写组件实现WebMvcConfigurer接口在extendMessageConverters方法中注入自己的HttpMessageConverter实现类对象。 自定义HttpMessageConverter 需求描述 系统需要对响应体进行加密、对请求体解密操作。 思路 编写类实现HttpMessageConverter接口read方法中先对请求体解密之后在做json反序列化write方法先做json序列化之后再加密通过WebMvcConfigurer注册 编写HttpMessageConverter实现类 public class MyMappingJackson2HttpMessageConverter implements GenericHttpMessageConverterObject {private static final String S_KEY 1234567890123456;private static final String IV_PARAMETER abcdefghijklmnop;// 用来做json序列化和反序列化自己编写代码也可以此处直接使用MappingJackson2HttpMessageConverter来做private final MappingJackson2HttpMessageConverter jackson2HttpMessageConverter;// 读写字符串private final StringHttpMessageConverter stringHttpMessageConverter;public MyMappingJackson2HttpMessageConverter(MappingJackson2HttpMessageConverter jackson2HttpMessageConverter) {this.jackson2HttpMessageConverter jackson2HttpMessageConverter;this.stringHttpMessageConverter new StringHttpMessageConverter(StandardCharsets.UTF_8);}Overridepublic boolean canRead(Class? clazz, MediaType mediaType) {return jackson2HttpMessageConverter.canRead(clazz, mediaType);}Overridepublic boolean canWrite(Class? clazz, MediaType mediaType) {return jackson2HttpMessageConverter.canWrite(clazz, mediaType);}Overridepublic ListMediaType getSupportedMediaTypes() {return jackson2HttpMessageConverter.getSupportedMediaTypes();}Overridepublic Object read(Class? clazz, HttpInputMessage inputMessage)throws IOException, HttpMessageNotReadableException {// 读取请求原始字节byte[] bytes readBytes(inputMessage);// 解密byte[] decryptBytes AesUtil.decrypt(bytes, S_KEY, IV_PARAMETER);// 封装HttpInputMessage供下面反序列化使用HttpInputMessage in new MyHttpInputMessage(inputMessage, decryptBytes);// json反序列化return jackson2HttpMessageConverter.read(clazz, in);}Overridepublic void write(Object o, MediaType contentType, HttpOutputMessage outputMessage)throws IOException, HttpMessageNotWritableException {ByteArrayOutputStream byteArrayOutputStream new ByteArrayOutputStream();// json序列化jackson2HttpMessageConverter.write(o, contentType, new MyHttpOutputMessage(outputMessage, byteArrayOutputStream));byte[] bytes byteArrayOutputStream.toByteArray();// 加密byte[] encryptStr AesUtil.encrypt(bytes, S_KEY, IV_PARAMETER);// 将响应写出去this.stringHttpMessageConverter.write(new String(encryptStr, StandardCharsets.UTF_8), contentType, outputMessage);}Overridepublic boolean canRead(Type type, Class? contextClass, MediaType mediaType) {return jackson2HttpMessageConverter.canRead(type, contextClass, mediaType);}Overridepublic Object read(Type type, Class? contextClass, HttpInputMessage inputMessage)throws IOException, HttpMessageNotReadableException {byte[] bytes readBytes(inputMessage);byte[] decryptBytes AesUtil.decrypt(bytes, S_KEY, IV_PARAMETER);HttpInputMessage in new MyHttpInputMessage(inputMessage, decryptBytes);return jackson2HttpMessageConverter.read(type, contextClass, in);}Overridepublic boolean canWrite(Type type, Class? clazz, MediaType mediaType) {return jackson2HttpMessageConverter.canWrite(type, clazz, mediaType);}Overridepublic void write(Object o, Type type, MediaType contentType, HttpOutputMessage outputMessage)throws IOException, HttpMessageNotWritableException {ByteArrayOutputStream byteArrayOutputStream new ByteArrayOutputStream();jackson2HttpMessageConverter.write(o, type, contentType, new MyHttpOutputMessage(outputMessage, byteArrayOutputStream));byte[] bytes byteArrayOutputStream.toByteArray();byte[] encryptStr AesUtil.encrypt(bytes, S_KEY, IV_PARAMETER);this.stringHttpMessageConverter.write(new String(encryptStr, StandardCharsets.UTF_8), contentType, outputMessage);}private byte[] readBytes(HttpInputMessage inputMessage) throws IOException {long contentLength inputMessage.getHeaders().getContentLength();ByteArrayOutputStream bos new ByteArrayOutputStream(contentLength 0 ? (int) contentLength : StreamUtils.BUFFER_SIZE);StreamUtils.copy(inputMessage.getBody(), bos);return bos.toByteArray();}private static class MyHttpInputMessage implements HttpInputMessage {private final HttpInputMessage originalHttpInputMessage;private final byte[] buf;public MyHttpInputMessage(HttpInputMessage originalHttpInputMessage, byte[] buf) {this.originalHttpInputMessage originalHttpInputMessage;this.buf buf;}Overridepublic InputStream getBody() throws IOException {return new ByteArrayInputStream(this.buf);}Overridepublic HttpHeaders getHeaders() {HttpHeaders headers this.originalHttpInputMessage.getHeaders();headers.setContentLength(this.buf.length);return headers;}}private static class MyHttpOutputMessage implements HttpOutputMessage {private final HttpOutputMessage originalHttpOutputMessage;private final OutputStream outputStream;public MyHttpOutputMessage(HttpOutputMessage originalHttpOutputMessage,OutputStream outputStream) {this.originalHttpOutputMessage originalHttpOutputMessage;this.outputStream outputStream;}Overridepublic OutputStream getBody() throws IOException {return this.outputStream;}Overridepublic HttpHeaders getHeaders() {return this.originalHttpOutputMessage.getHeaders();}} }注入HttpMessageConverter实现类对象 Component public class MyWebMvcConfigurer implements WebMvcConfigurer {Overridepublic void extendMessageConverters(ListHttpMessageConverter? converters) {MappingJackson2HttpMessageConverter converter null;for (HttpMessageConverter? messageConverter : converters) {if (messageConverter instanceof MappingJackson2HttpMessageConverter) {converter (MappingJackson2HttpMessageConverter) messageConverter;break;}}if (converter ! null) {// 注入MyMappingJackson2HttpMessageConverterMyMappingJackson2HttpMessageConverter myMappingJackson2HttpMessageConverter new MyMappingJackson2HttpMessageConverter(converter);converters.add(0, myMappingJackson2HttpMessageConverter);}} }
http://www.hkea.cn/news/14327716/

相关文章:

  • 福州网站设计定制公司营销网站建设大概费用
  • 如何在电商网站做市场调研qml 网站开发
  • 融资融券配资网站建设商业软文案例
  • 建网站公建网站公司怎么运用区块链做网站
  • 做特卖网站有什么网站营销型网站案例
  • 做国际网站郑州建设信息网 首页
  • 兵团建设环保局门户网站网站 各种 备案
  • 著名的设计企业网站宿迁做网站需要多少钱
  • 网站网页设计屏幕尺寸好看的网站在哪里好找
  • 青海网站建设公司一诺网络推广公司
  • 建设用地规划许可证查询网站php响应式网站模板下载
  • seo分析网站php软件安装
  • 制作网站需要哪些知识长春网站架设
  • 网站建设维护 天博网络深圳做网站需要多少费用
  • 河北网络公司网站建设中国关键词网站
  • 石家庄网站编辑深圳建网站信科
  • 链交换反应做网络优化的公司排名
  • 营销软件网站网站怎么做投票
  • 还有哪些免费的网站可以做H5中国建设银行ie下载网站
  • 深圳市住宅和建设网站汕头建设银行协华支行
  • 珠海建设集团网站首页怎么做服务器网站吗
  • 手机网站 生成深圳做义工的网站
  • 有哪些专做自然风景图片的网站深圳网络公司老板
  • 十大网站多与pR值高的网站做链接
  • 网站做的比较好的贸易公司怎么样推广自己的网址
  • 视觉网站建设公司简历模板范文填写
  • 如何用手机创建网站西安网站建设哪家
  • 网店代运营的套路公司网站优化要怎么做
  • 手机网站建设策划方案事件营销的方法
  • 芜湖效能建设网站在线编程的网站