@RequestBody 所有接口统一加解密
时间: 2024-09-06 10:04:15 浏览: 49
解读@RequestBody的正确使用方法
`@RequestBody` 是Spring MVC框架中的一个注解,用于标记请求体(通常来自HTTP POST或PUT请求的数据)应被绑定到控制器的方法参数上。如果要在所有接口中对接收到的JSON数据进行统一的加密和解密处理,你可以考虑以下几个步骤:
1. **创建加密/解密工具**:首先,编写一个自定义的工具类,如 `EncryptionUtil` 或 `SecurityService`,实现加密和解密算法。
```java
public class EncryptionUtil {
public String encrypt(String data) { ... }
public String decrypt(String encryptedData) { ... }
}
```
2. **修改接口方法**:在每个需要处理加密解密的控制器方法上添加一个通用的参数,例如 `EncryptedRequest` 类型,并在方法内部调用 `EncryptionUtil` 进行处理。
```java
@PostMapping("/your-endpoint")
public ResponseEntity<?> process(@RequestBody EncryptedRequest encryptedRequest) {
// 解密请求数据
String decryptedData = EncryptionUtil.decrypt(encryptedRequest.getData());
// 对解密后的数据做业务处理
// ...
// 返回结果
return ...;
}
// 定义 EncryptedRequest 类
public class EncryptedRequest {
private String data; // 存储加密过的 JSON 数据
}
```
3. **全局配置拦截器**:如果你希望在整个系统中自动应用此操作,可以创建一个全局的 AOP(面向切面编程)拦截器,它会在每个接收 `@RequestBody` 的方法前进行解密。
```java
@Configuration
@ComponentScan(basePackages = "com.yourpackage")
public class SecurityInterceptorConfig {
@Order(Ordered.HIGHEST_PRECEDENCE)
@Bean
public HandlerInterceptor decryptionInterceptor() {
return new HandlerInterceptorAdapter() {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
if (request.getMethod().equals("POST") || request.getMethod().equals("PUT")) {
// 从请求头获取解密所需的凭据或其他信息
String encryptedData = request.getParameter("encryptedData");
EncryptedRequest encryptedRequest = new EncryptedRequest(encryptedData);
request.setAttribute("decryptedRequest", EncryptionUtil.decrypt(encryptedRequest.getData()));
}
return true;
}
};
}
}
```
阅读全文