ユニファイドインターフェイス復号化パッケージパラメータ

インターフェイスが受信したHTTPリクエストの本文コンテンツが、json文字列のAES暗号化後のbase64文字列(+ m5AMx9 / dw5Abazg79 + fIgq0i + K / OTI2bitKHQU + Xck =など)であるとすると、バックエンドはどのように復号化してパッケージ化しますか統一された方法でpojo?

アイデア

  • コントローラレイヤーの@RequestMappingを使用してメソッドに記述されたアノテーション@DecryptAndBindPojoをカスタマイズします
  • springAOPを使用して、@ DecryptAndBindPojoおよびプロセスパラメーターを使用してメソッドをインターセプトします
  • @DecryptAndBindPojoを使用するメソッドは、通常のpojoクラスを使用してパラメーターを受け取り、ServletRequestなどを挿入するメソッドでのspringの使用には影響しません。
package com.aaa.bbb.aspect;

import java.io.BufferedReader;

import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.http.HttpHeaders;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import com.alibaba.fastjson.JSON;
import com.aaa.bbb.annotation.DecryptAndBindPojo;

import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil;

@Aspect
@Component
public class DecryptAndBindPojoAspect {
    
    

	@Around("@annotation(annotation)")
	public Object doBefore(ProceedingJoinPoint joinPoint, DecryptAndBindPojo annotation) throws Throwable {
    
    
		Object[] obj = joinPoint.getArgs();
		HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
				.getRequest();
		BufferedReader utf8Reader = IoUtil.getUtf8Reader(request.getInputStream());
		String s = utf8Reader.readLine();
		if (StrUtil.isBlank(s) || obj.length == 0) {
    
    
			return joinPoint.proceed(obj);
		}
		String decryptStr = SecureUtil.aes(StrUtil.utf8Bytes("passwordpassword")).decryptStr(s);
		for (int i = 0; i < obj.length; i++) {
    
    
			boolean typeArg = obj[i] instanceof ServletRequest == false && obj[i] instanceof ServletResponse == false
					&& obj[i] instanceof HttpSession == false && obj[i] instanceof HttpHeaders == false;
			if (typeArg) {
    
    
				Object parseObject = JSON.parseObject(decryptStr, obj[i].getClass());
				obj[i] = parseObject;
			}
		}
		return joinPoint.proceed(obj);
	}

}

package com.aaa.bbb.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface DecryptAndBindPojo {
    
    
}

	@PostMapping("/addRole")
	@DecryptAndBindPojo
	public RoleVO add(Role role, HttpServletRequest request) {
    
    
		// 做业务操作
		// ...
		return null;
	}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:task="http://www.springframework.org/schema/task"
	xsi:schemaLocation="http://www.springframework.org/schema/beans   
           http://www.springframework.org/schema/beans/spring-beans.xsd  
           http://www.springframework.org/schema/context   
           http://www.springframework.org/schema/context/spring-context.xsd
           http://www.springframework.org/schema/task 
           http://www.springframework.org/schema/task/spring-task.xsd
           http://www.springframework.org/schema/mvc 
           http://www.springframework.org/schema/mvc/spring-mvc.xsd 
           http://www.springframework.org/schema/tx
           http://www.springframework.org/schema/tx/spring-tx.xsd
           http://www.springframework.org/schema/aop    
		   http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"
	xmlns:tx="http://www.springframework.org/schema/tx">

	<aop:aspectj-autoproxy expose-proxy="true"></aop:aspectj-autoproxy>
	<context:component-scan base-package="com.aaa.bbb" />
</beans>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>5.2.9.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>cn.hutool</groupId>
			<artifactId>hutool-all</artifactId>
			<version>5.4.4</version>
		</dependency>
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjweaver</artifactId>
			<version>1.9.6</version>
		</dependency>
		<dependency>
			<groupId>aopalliance</groupId>
			<artifactId>aopalliance</artifactId>
			<version>1.0</version>
		</dependency>
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.74</version>
		</dependency>

おすすめ

転載: blog.csdn.net/qq_28807077/article/details/109784065