gpt4 book ai didi

java - 在 Spring boot 应用程序中使用 Filter 修改 ServletRequest

转载 作者:行者123 更新时间:2023-12-01 19:39:44 25 4
gpt4 key购买 nike

有一些关于此的文章,但他们的解决方案并不能解决我的问题。我有一个 GET 请求,如下所示:localhost:8080/rest/users/search?name=john&age=20&count=20

我的要求是每当请求包含“count”查询参数时,我想检查该值是否不大于10。如果大于10,则将查询参数替换为“count=10”

为了解决这个问题,我尝试使用 javax.servlet.Filterjavax.servlet.http.HttpServletRequestWrapper 但我无法替换请求中的原始值。

这就是我的 WebFilter 的样子:

@Component
public class WebFilter implements Filter {

@Override
public void init(FilterConfig filterConfig) {
logger.debug("Initiating WebFilter >> ");
}

@Override
public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain)
throws IOException, ServletException {

final HttpServletRequestWrapper requestWrapper = new HttpServletRequestWrapper((HttpServletRequest) request);
if (requestWrapper.getParameterValues("count") != null) {
String[] count = requestWrapper.getParameterValues("price");

for (int i = 0; i < count.length; i++) {
if (Integer.parseInt(count[i]) > 10) {
count[i] = "10";
}
}
requestWrapper.setAttribute("count", count);
}

System.out.println("count: " + requestWrapper.getParameter("count"));

// Goes to default servlet
chain.doFilter(requestWrapper, response);
}

@Override
public void destroy() {
logger.debug("Destroying WebFilter >> ");
}
}

我在其他帖子中看到,只需执行 requestWrapper.setAttribute("count", count); 即可将新值添加到responseWrapper。但我每次都得到原始值。

最佳答案

您无法设置查询参数 - 从 API 角度来看它是不可变的。您要做的就是扩展请求包装器并重写 getParameter() 方法,以在提供给定查询名称时返回您想要返回的值。所以像这样(在记事本中进行膝盖编程)

class YourWrapper{
...ctors etc
@Override
public String[] getParamter(String name){
if(name.equals("count"){
String[] original super.getParameter(name); // get original values, process it and
return ...// either original val or String.valueOf(10);
}
return super.getParameter(name);
}

}

然后包装您的请求并沿着过滤器链传递

chain.doFilter(new YourWrapper(request),response);

所以这都是关于拦截的。

关于java - 在 Spring boot 应用程序中使用 Filter 修改 ServletRequest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59183493/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com