Ⅲ1024 2024-05-14 18:16 采纳率: 68.4%
浏览 18
已结题

springBoot vue 请求加解密问题

springBoot vue 请求加解密问题
个人在是使用RSA进行前后端加密传输 前端对整个传输的body进行加密
这是传输代码

img


后端接口接收的是一个User对象 包含username password
个人预期是在aop内 将其解密 成user对象 然后controller就可以正常接收 但是请求根本发送不出去
提示
Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot construct instance of com.lin.me.entity.User (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('IZlPsCd2qVBL0hGVTzb23owpvyXa5xom1z5YXBCbrdlUXS...................................................
意思是必须要接收一个User对象 请问大家怎么解决

  • 写回答

3条回答 默认 最新

  • 笑面虎 2024-05-14 18:16
    关注

    以下内容由CHATGPT及笑面虎共同生成、有用望采纳:


    【您想要解决的问题】:您想要解决的问题是在Spring Boot和Vue.js项目中,使用RSA加密传输数据时遇到的请求发送失败问题。具体来说,您在前端对整个传输的body进行了加密,后端接口期望接收一个User对象,包含用户名(username)和密码(password),但在接收时出现了JSON解析错误。

    【图片内容】:您上传的图片包含了前端发送请求的代码片段,其中显示了请求头信息和请求体的加密数据。

    【问题出现原因】:问题出现的原因是后端Spring Boot服务无法正确解析前端发送的加密JSON字符串。错误信息表明,Spring Boot尝试将字符串直接映射到User对象,但由于缺少一个接受字符串参数的构造函数或工厂方法,导致无法反序列化字符串。

    【问题解决方案】:为了解决这个问题,您需要在Spring Boot后端实现一个自定义的反序列化器,用于在接收到加密的JSON字符串后先进行解密,然后再将其映射到User对象。

    以下是解决步骤的概述:

    1. 解密:在Spring Boot的Controller层之前,使用AOP(面向切面编程)或Interceptor(拦截器)对请求体进行拦截,然后对加密的JSON字符串进行RSA解密。

    2. 反序列化:解密后,将得到的明文字符串反序列化为User对象。

    3. Controller处理:将反序列化后的User对象传递给Controller进行后续处理。

    【提供代码】:以下是一个简化的示例,展示如何在Spring Boot中实现解密和反序列化:

    // RSA解密服务,您需要实现具体的解密逻辑
    @Service
    public class RSADecryptService {
        public String decrypt(String encryptedData) {
            // 实现RSA解密逻辑
            return decryptedData;
        }
    }
    
    // 使用AOP在Controller之前对请求体进行解密和反序列化
    @Aspect
    @Component
    public class RequestDecryptAspect {
        @Autowired
        private RSADecryptService decryptService;
    
        @Before("execution(* com.lin.me.controller.YourUserController.*(..)) && args(requestBody)")
        public void decryptRequestBody(JoinPoint joinPoint, String requestBody) throws Throwable {
            String decryptedBody = decryptService.decrypt(requestBody);
            // 将解密后的数据替换原请求体,以便Controller可以接收到明文User对象
            JoinPoint.proceed(new Object[] { decryptedBody });
        }
    }
    

    【代码运行方式】:您需要在Spring Boot项目中集成上述代码,并确保RSA解密服务正确实现。您可能需要配置AOP的切点以匹配您的UserController。

    【代码预期运行结果】:Controller将能够接收到一个未加密的User对象,您可以正常处理用户名和密码。

    【推荐相关链接】:

    请注意,以上代码仅为示例,您需要根据自己的项目需求进行调整和完善。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 9月19日
  • 已采纳回答 9月11日
  • 创建了问题 5月14日