网站建设相对路径电话网站域名到期

news/2025/10/2 14:36:56/文章来源:
网站建设相对路径,电话网站域名到期,网站维护是不是很难做,注册企业的步骤前言 在授权码模式的前后端分离的那篇文章中使用了Redis来保存用户的认证信息#xff0c;在Redis的配置文件中配置的值序列化器是默认的Jdk序列化器#xff0c;虽然这样也可以使用#xff0c;但是在Redis客户端中查看时是乱码的(看起来是)#xff0c;如果切换为Jackson提供…前言 在授权码模式的前后端分离的那篇文章中使用了Redis来保存用户的认证信息在Redis的配置文件中配置的值序列化器是默认的Jdk序列化器虽然这样也可以使用但是在Redis客户端中查看时是乱码的(看起来是)如果切换为Jackson提供的值序列化器时又会在反序列化时失败这样是不符合实际的在项目框架搭建完毕或在已有项目中这些配置实际上应该都已经配置好了的不能说为了这么一个功能去改原有配置所以这里要跟大家说一声对不起因为在下学艺不精而导致这么一个大缺陷一直留到了现在。 问题分析 当时用到的地方就是在登录成功和初始化SecurityContextHolderFilter中初始化认证信息的地方存、取SecurityContext(认证信息)存的时候倒是没有问题但是取的时候就会因为框架内的类不提供默认的构造器从而造成反序列化失败的问题或者是类型转换异常 Jackson 只能识别java基本类型遇到复杂类型时Jackson 就会先序列化成 LinkedHashMap然后再尝试强转为所需类别这样大部分情况下会强转失败异常信息如下 java.lang.ClassCastException: class java.util.LinkedHashMap cannot be cast to class org.springframework.security.core.context.SecurityContext这种情况需要添加一个配置如下 objectMapper.activateDefaultTyping( objectMapper.getPolymorphicTypeValidator(), ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);但是当添加了这个配置后重启后再次尝试发现还是有异常不过这时就是因为框架中的类没有提供默认构造器造成的异常如下 org.springframework.data.redis.serializer.SerializationException: Could not read JSON: Cannot construct instance of org.springframework.security.authentication.UsernamePasswordAuthenticationToken (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator)at [Source: (byte[]){class:org.springframework.security.core.context.SecurityContextImpl,authentication:{class:org.springframework.security.authentication.UsernamePasswordAuthenticationToken,authorities:[java.util.Collections$UnmodifiableRandomAccessList,[{class:com.example.model.security.CustomGrantedAuthority,authority:system},{class:com.example.model.security.CustomGrantedAuthority,authority:app},{class:com.example.model.security.CustomGrantedAuthority,authority:web}]],[truncated 893 bytes]; line: 1, column: 184] (through reference chain: org.springframework.security.core.context.SecurityContextImpl[authentication])异常提示问题在SecurityContextImpl的authentication属性上因为该属性的实例是UsernamePasswordAuthenticationToken这个类并没有一个默认的构造器所以在反序列化时直接报错了最开始时我的想法是写一个实现类然后存取的时候用自定义的类中转一下但是后来又发现了Json Mixin这个东西发现这个玩意儿更方便于是就实现了一下写了一个UsernamePasswordAuthenticationMixin类来实现自定义反序列化逻辑但是昨天突然发现这东西其实框架已经实现了就很尴尬要将这些东西加进来添加一下框架提供的CoreJackson2Module就行配置如下 // 添加Security提供的Jackson Mixin objectMapper.registerModule(new CoreJackson2Module());解决方案 Redis配置文件中配置的RedisTemplate添加值序列化器值序列化器使用的ObjectMapper添加以上提到的那些配置包括复杂类型映射、Security提供的Json Mixin完整的Redis配置类如下 package com.example.config;import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; import org.springframework.security.jackson2.CoreJackson2Module;/*** Redis的key序列化配置类** author vains*/ Configuration RequiredArgsConstructor public class RedisConfig {private final Jackson2ObjectMapperBuilder builder;/*** 默认情况下使用** param connectionFactory redis链接工厂* return RedisTemplate*/Beanpublic RedisTemplateObject, Object redisTemplate(RedisConnectionFactory connectionFactory) {// 字符串序列化器StringRedisSerializer stringRedisSerializer new StringRedisSerializer();// 创建ObjectMapper并添加默认配置ObjectMapper objectMapper builder.createXmlMapper(false).build();// 序列化所有字段objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);// 此项必须配置否则如果序列化的对象里边还有对象会报如下错误// java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to XXXobjectMapper.activateDefaultTyping(objectMapper.getPolymorphicTypeValidator(),ObjectMapper.DefaultTyping.NON_FINAL,JsonTypeInfo.As.PROPERTY);// 添加Security提供的Jackson MixinobjectMapper.registerModule(new CoreJackson2Module());// 存入redis时序列化值的序列化器Jackson2JsonRedisSerializerObject valueSerializer new Jackson2JsonRedisSerializer(objectMapper, Object.class);RedisTemplateObject, Object redisTemplate new RedisTemplate();// 设置值序列化redisTemplate.setValueSerializer(valueSerializer);// 设置hash格式数据值的序列化器redisTemplate.setHashValueSerializer(valueSerializer);// 默认的Key序列化器为JdkSerializationRedisSerializerredisTemplate.setKeySerializer(stringRedisSerializer);// 设置字符串序列化器redisTemplate.setStringSerializer(stringRedisSerializer);// 设置hash结构的key的序列化器redisTemplate.setHashKeySerializer(stringRedisSerializer);// 设置连接工厂redisTemplate.setConnectionFactory(connectionFactory);return redisTemplate;}/*** 操作hash的情况下使用** param connectionFactory redis链接工厂* return RedisTemplate*/Beanpublic RedisTemplateObject, Object redisHashTemplate(RedisConnectionFactory connectionFactory) {return redisTemplate(connectionFactory);}}扩展说明 从上边的配置可以看出Spring对于三方框架内部没有默认构造器的类的反序列化支持还是挺好的如果集成其它框架时遇到这种情况时就可以仿照Security框架提供的Mixin类实现一个自己的Mixin类以支持反序列化当然也可以找找在框架中是否有类似的Jackson2Module类当自己封装一个starter时也可以提供Jackson2Module类来映射类不过这个就按照个人的喜好来了自己封装自由度很高的。 当然在使用Security时如果遇到其它反序列化失败的类都可以在框架中找找有没有其它的Jackson2Module类如果提供的有那就不用自己封装了直接往ObjectMapper添加一个Module就行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/924996.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

英语_阅读_Always-on world_待读

In todays always-on world, work doesnt end when you leave the office.在当今这个永不停歇的世界里,工作并不会在你离开办公室时就结束。 Instead, emails, texts and notifications often follow us home, demand…

网站子站建设合同样本外贸电商平台都有哪些

原文网址:http://www.cnblogs.com/hanhuibing/articles/5680616.html 基于Solr的空间搜索 如果需要对带经纬度的数据进行检索,比如查找当前所在位置附近1000米的酒店,一种简单的方法就是:获取数据库中的所有酒店数据,…

2025冷水机定制厂家 TOP 企业品牌推荐排行榜,工业,防爆,低温,水冷,螺杆,超低温,满液式,降膜,气悬浮,变频冷水机厂家推荐这十家公司

在工业生产与商业运营中,冷水机的作用愈发关键,而不同行业、不同场景对冷水机的需求存在显著差异。化工行业可能需要耐腐蚀性强的定制冷水机,电子行业则对温控精度有极高要求,食品行业又注重冷水机的卫生标准。然而…

大型网站 div软文推广怎么做

近年来,随着体育设施建设的推进和政策支持,越来越多的体育从业者将目光聚焦到了楼顶,希望通过在楼顶加盖气膜馆来充分利用有限的土地资源。那么,为什么气膜建筑能够建在楼顶呢?轻空间将从气膜建筑的结构特点、安全性、…

详细介绍:AI 动画视频创作:技巧升级与行业未来趋势

详细介绍:AI 动画视频创作:技巧升级与行业未来趋势pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&quo…

华为手机鸿蒙系统 4.2 / 4.3 安装谷歌框架的详细教程 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

实用指南:第四届云计算、大数据应用与软件工程国际学术会议(CBASE 2025)

实用指南:第四届云计算、大数据应用与软件工程国际学术会议(CBASE 2025)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-famil…

2025黄金回收公司权威推荐榜:专业估价与诚信服务口碑之选

在当今经济环境下,黄金作为重要的避险资产和投资工具,其回收市场日益活跃。随着黄金价格的持续波动,越来越多的企业和个人开始关注黄金回收这一领域。黄金回收不仅涉及资产变现,更关系到资源循环利用和经济效益最大…

网站建设公司 未来今天最新生猪价格

sub sup <p>这个文本包含 <sub>111</sub>文本。</p> <p>这个文本包含 <sup>上标</sup> 文本。</p>下标文本将会显示在当前文本流中字符高度的一半为基准线的下方&#xff0c;但是与当前文本流中文字的字体和字号都是一样的。…

建设银行网站一直打不开wordpress 附件密码保护

我们传统的23种设置模式如下 创建型模式:用于创建对象 工厂方法(Factory Method) 模式抽象工厂(Abstract Factory) 模式原型(Protptype) 模式单例(Singleton) 模式构建器模式结构型模式:建立更大的结构 适配器(Adapter)模式桥接(Bridge)模式组合(Composite)模式装饰(D…

PWN手成长之路-06-watevr_2019_voting_machine_1-栈溢出+劫持

远程连接,看一下交互。发现是一个投票系统,让用户在0-10之间选择一个数字并输入。file 查看文件。64 位 ELF 可执行文件。checksec 查看文件安全属性。开启了 NX 保护,栈上无执行权限。IDA 打开文件。查看 main 函数…

做html5视频网站武威网站怎么做seo

1 &#xff1a;维护数据库的完整性、一致性、你喜欢用触发器还是自写业务逻辑&#xff1f;为什么 答&#xff1a;尽可能用约束&#xff08;包括CHECK、主键、唯一键、外键、非空字段&#xff09;实现&#xff0c;这种方式的效率最好&#xff1b;其次用触发器&#xff0c;这种方…

hmcl

hmcl java本文来自博客园,作者:[GuiHua],转载请注明原文链接:https://www.cnblogs.com/pcworld/p/-/hmcl

平台商城网站开发惠州市惠城区建设局网站

注意力机制在深度学习领域中是一种重要的技术&#xff0c;特别是在序列模型和自然语言处理&#xff08;NLP&#xff09;任务中。注意力机制的核心思想是在模型的输入上模拟人类的注意力过程&#xff0c;即模型能够自动决定在处理特定任务时应该“关注”输入数据的哪些部分。通过…

PWN手成长之路-06-watevr_2019_voting_machine_1

远程连接,看一下交互。发现是一个投票系统,让用户在0-10之间选择一个数字并输入。file 查看文件。64 位 ELF 可执行文件。checksec 查看文件安全属性。开启了 NX 保护,栈上无执行权限。IDA 打开文件。查看 main 函数…

pythone网站开发文明网站建设工作进度表

文章目录一、入门试炼1. 创建挂载目录2. 赋予目录权限3. 临时容器4. 拷贝文件5. 删除临时容器6. 自定义配置启动7. 安全策略组二、 企业内部使用2.1. nacos 集群2.2. 多个域名公用80端口是实现反向代理和负载均衡一、入门试炼 1. 创建挂载目录 mkdir /app/nginx/conf/ /app/n…

没内容的网站怎么优化外贸公司用的采购储运财务软件

前一段时间&#xff0c;我是房地美&#xff0c;房地美&#xff0c;Foreclosure.com和HUD等公司在房地产市场上进行一些大型部署的技术负责人。 我们运行的是您可能熟悉的传统企业Java堆栈-Spring &#xff0c; Hibernate &#xff0c;Solr等。花了几年时间&#xff0c;但我们建…

2025喷雾干燥厂家TOP企业品牌推荐排行榜,无锡,常州喷雾干燥,低温,压力,气流,离心式,压力式喷雾干燥,喷雾干燥塔,设备,装置公司推荐!

在当前的工业生产领域,喷雾干燥技术作为物料干燥处理的关键环节,其应用范围已广泛覆盖新能源材料、精密陶瓷、化工等多个重要行业。然而,随着市场需求的不断升级,行业内逐渐显现出诸多问题。一方面,部分喷雾干燥品…

做暧小说在线观看网站有哪些做家教网站

1、PAT Programming Ability Test,是考察计算机程序设计能力的一个考试&#xff0c;分为三级&#xff0c;顶级将涉及到大量ACM-ICPC竞赛的考点 今年春季的话截止时间为 2024 年 2 月 29 日 23:59&#xff0c;要是考研没考上的兄弟姐妹们可以考虑以下这个&#xff0c;这个等级证…

哪里可以做公司网站网络运营策划

文章目录 Python静态Web服务器开发Web静态服务器初识搭建Python自带的静态Web服务器静态Web服务器返回固定页面数据静态Web服务器返回指定页面数据静态Web服务器多任务版静态Web服务器面向对象开发静态Web服务器命令行启动动态绑定端口号 Python静态Web服务器开发 Web静态服务…