springboot HandlerInterceptor preHandle()处理加密后重写request
时间: 2024-01-05 16:38:57 浏览: 126
在Spring Boot中,可以通过实现HandlerInterceptor接口的preHandle()方法来处理加密后重写request的问题。根据提供的引用内容,有两种方式可以实现。
第一种方式是通过在DecryptInterceptor的preHandle()方法中手动模拟解密并比对参数,然后将解密后的参数重新赋值给request。具体代码如下所示:
```java
@Slf4j
public class DecryptInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (request instanceof DecryptServletRequestWrapper) {
DecryptServletRequestWrapper requestWrapper = (DecryptServletRequestWrapper) request;
Map<String, Object> requestBody = requestWrapper.getRequestBody();
// 这里可以处理解密逻辑,我这里直接赋值了,就不解密了
requestBody.put("name", "yichen");
requestBody.put("address", "海底两万里");
// 对比结果
requestBody.put("age", 18);
DecryptServletRequestWrapper.printMap(requestBody);
}
return true;
}
}
```
在这段代码中,我们可以看到在preHandle()方法中,首先判断request是否是DecryptServletRequestWrapper类型,如果是,则获取请求体的参数,并进行解密逻辑。在这个例子中,为了简化,直接给name和address字段赋值,并添加了age字段。最后,我们将修改后的参数重新赋值给request。
另一种方式是在LoginInterceptor的preHandle()方法中实现解密逻辑。具体代码如下所示:
```java
@Component
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//获取请求头中的token
String token = request.getHeader("token");
//判断token是否为空,如果为空也代表未登录 提醒重新登录(401)
if (!StringUtils.hasText(token)) {
response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
return false;
}
//解析token看看是否成功
try {
Claims claims = JwtUtil.parseJWT(token);
String subject = claims.getSubject();
System.out.println(subject);
//在这里进行解密逻辑并重写request的参数
//...
} catch (Exception e) {
e.printStackTrace();
//如果解析过程中没有出现异常说明是登录状态
//如果出现了异常,说明未登录,提醒重新登录(401)
response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
return false;
}
return true;
}
}
```
在这段代码中,我们可以看到在preHandle()方法中,首先获取请求头中的token。然后通过解析token来验证用户的登录状态。在这个例子中,我们可以在try块中进行解密逻辑并根据解密后的参数重写request的参数。
综上所述,根据不同的情况可以在不同的Interceptor中实现解密逻辑并重写request的参数。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* [springboot处理数据解密](https://blog.csdn.net/weixin_42241455/article/details/123909299)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
- *3* [SpringBoot拦截器登录处理+异常统一处理+自定义注解](https://blog.csdn.net/qq_41627017/article/details/126445460)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]