版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.youkuaiyun.com/xuedengyong/article/details/143891757
请求参数的分类
1.路径参数@PathVariable
2.请求参数@RequestParam
3.请求对象@RequestBody
如何重新三种类型参数的值
1.路径参数@PathVariable的值重写
(1)定义拦截器
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.HandlerMapping;
import org.springframework.web.servlet.ModelAndView;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.net.URLDecoder;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@Slf4j
@Component
public class ParamDecryptInterceptor implements HandlerInterceptor {
@Resource
private OpenConstant openConstant;
/**
* 解密密钥
*/
@Value("${dr.aes_Key}")
private String aesKey;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String servletPath = request.getServletPath();
@SuppressWarnings("unchecked")
Map<String, Object> pathVariable = (Map<String, Object>) request.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE);
String clientNo = (String) pathVariable.get("clientNo");
String proposalNo = (String) pathVariable.get("proposalNo");
List<String> pathList = openConstant.getParam_decrypt_path();
for (String path : pathList) {
Pattern pattern = Pattern.compile(path);
Matcher matcher = pattern.matcher(servletPath);
if (matcher.find()) {
if (StringUtils.isNotBlank(clientNo)) {
String clientNoDecrypted = AesUtils.decryptForDr(URLDecoder.decode(clientNo, "UTF-8"), aesKey);
pathVariable.put("clientNo", clientNoDecrypted);
log.info("ParamDecryptInterceptor_[clientNo:" + clientNo + "],解密后[clientNoDecrypted:" + clientNoDecrypted + "][解密成功]");
}
if (StringUtils.isNotBlank(proposalNo)) {
String proposalNoDecrypted = AesUtils.decryptForDr(URLDecoder.decode(proposalNo, "UTF-8"), aesKey);
pathVariable.put("proposalNo", proposalNoDecrypted);
log.info("ParamDecryptInterceptor_[proposalNo:" + proposalNo + "],解密后[proposalNoDecrypted:" + proposalNoDecrypted + "][解密成功]");
}
request.setAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE, pathVariable);
break;
}
}
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
}
}
(2)拦截器添加到拦截器链中
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Lazy;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import javax.annotation.Resource;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Resource
@Lazy
private ParamDecryptInterceptor paramDecryptInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(paramDecryptInterceptor).addPathPatterns("/dualrecord/app/dual/**");
}
}
2请求参数@RequestParam 的值重写
方案一:拦截器
由于HttpServletRequest 的实现类是 RequestFacade ,不允许重写请请求参数,所以只能把处理后的数据,放到request的 session 下Attribute中,再在Controller 中获取到
(1)定义拦截器
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@Slf4j
@Component
public class ParamDecryptInterceptor implements HandlerInterceptor {
@Resource
private OpenConstant openConstant;
/**
* 解密密钥
*/
@Value("${dr.aes_Key}")
private String aesKey;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String servletPath = request.getServletPath();
String clientNo = request.getParameter("clientNo");
String proposalNo = request.getParameter("proposalNo");
List<String> pathList = openConstant.getParam_decrypt_path();
for (String path : pathList) {
Pattern pattern = Pattern.compile(path);
Matcher matcher = pattern.matcher(servletPath);
if (matcher.find()) {
if (StringUtils.isNotBlank(clientNo)) {
String clientNoDecrypted = AesUtils.decryptForDr(clientNo, aesKey);
request.setAttribute("clientNo", clientNoDecrypted);
log.info("ParamDecryptInterceptor_[clientNo:" + cli

最低0.47元/天 解锁文章
3715






