java修改请求参数_使用servlet过滤器修改请求参数

这就是我最终做的事情

//import ../../Constants;

public class RequestFilter implements Filter {

private static final Logger logger = LoggerFactory.getLogger(RequestFilter.class);

@Override

public void init(FilterConfig filterConfig) throws ServletException {

}

@Override

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)

throws IOException, ServletException {

try {

CustomHttpServletRequest customHttpServletRequest = new CustomHttpServletRequest((HttpServletRequest) servletRequest);

filterChain.doFilter(customHttpServletRequest, servletResponse);

} finally {

//do something here

}

}

@Override

public void destroy() {

}

public static Map ADMIN_QUERY_PARAMS = new HashMap() {

{

put("diagnostics", new String[]{"false"});

put("skipCache", new String[]{"false"});

}

};

/*

This is a custom wrapper over the `HttpServletRequestWrapper` which

overrides the various header getter methods and query param getter methods.

Changes to the request pojo are

=> A custom header is added whose value is a unique id

=> Admin query params are set to default values in the url

*/

private class CustomHttpServletRequest extends HttpServletRequestWrapper {

public CustomHttpServletRequest(HttpServletRequest request) {

super(request);

//create custom id (to be returned) when the value for a

//particular header is asked for

internalRequestId = RandomStringUtils.random(10, true, true) + "-local";

}

public String getHeader(String name) {

String value = super.getHeader(name);

if(Strings.isNullOrEmpty(value) && isRequestIdHeaderName(name)) {

value = internalRequestId;

}

return value;

}

private boolean isRequestIdHeaderName(String name) {

return Constants.RID_HEADER.equalsIgnoreCase(name) || Constants.X_REQUEST_ID_HEADER.equalsIgnoreCase(name);

}

public Enumeration getHeaders(String name) {

List values = Collections.list(super.getHeaders(name));

if(values.size()==0 && isRequestIdHeaderName(name)) {

values.add(internalRequestId);

}

return Collections.enumeration(values);

}

public Enumeration getHeaderNames() {

List names = Collections.list(super.getHeaderNames());

names.add(Constants.RID_HEADER);

names.add(Constants.X_REQUEST_ID_HEADER);

return Collections.enumeration(names);

}

public String getParameter(String name) {

if (ADMIN_QUERY_PARAMS.get(name) != null) {

return ADMIN_QUERY_PARAMS.get(name)[0];

}

return super.getParameter(name);

}

public Map getParameterMap() {

Map paramsMap = new HashMap<>(super.getParameterMap());

for (String paramName : ADMIN_QUERY_PARAMS.keySet()) {

if (paramsMap.get(paramName) != null) {

paramsMap.put(paramName, ADMIN_QUERY_PARAMS.get(paramName));

}

}

return paramsMap;

}

public String[] getParameterValues(String name) {

if (ADMIN_QUERY_PARAMS.get(name) != null) {

return ADMIN_QUERY_PARAMS.get(name);

}

return super.getParameterValues(name);

}

public String getQueryString() {

Map map = getParameterMap();

StringBuilder builder = new StringBuilder();

for (String param: map.keySet()) {

for (String value: map.get(param)) {

builder.append(param).append("=").append(value).append("&");

}

}

builder.deleteCharAt(builder.length() - 1);

return builder.toString();

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值