重写请求参数@PathVariable,@RequestParam,@RequestBody的值

版权声明:本文为博主原创文章,遵循 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
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值