Paramètres du package de décryptage de l'interface unifiée

En supposant que le contenu du corps de la requête HTTP reçue par l'interface est une chaîne base64 après le cryptage AES de la chaîne json, telle que + m5AMx9 / dw5Abazg79 + fIgq0i + K / OTI2bitKHQU + Xck =, comment le backend le déchiffre et le conditionne-t-il dans pojo d'une manière unifiée?

Idées

  • Personnalisez une annotation @DecryptAndBindPojo, écrite sur la méthode avec @RequestMapping sur la couche contrôleur
  • Utilisez springAOP pour intercepter des méthodes avec @DecryptAndBindPojo et des paramètres de processus
  • La méthode avec @DecryptAndBindPojo utilise une classe pojo ordinaire pour recevoir les paramètres, ce qui n'affecte pas l'utilisation de spring dans la méthode pour injecter ServletRequest, etc.
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>

Je suppose que tu aimes

Origine blog.csdn.net/qq_28807077/article/details/109784065
conseillé
Classement