删除控制器/类中的HttpServletRequest参数的最佳方法? [英] best way to remove a HttpServletRequest parameter in a controller/class?

查看:354
本文介绍了删除控制器/类中的HttpServletRequest参数的最佳方法?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在某些情况下,我需要将HTTP请求对象重定向到其他控制器/类以进行进一步处理.问题是在某些控制器中,我想更好地控制要转发给下一类的参数:修改,编辑,删除它们.因此,我想知道是否有一个好的实践/模式来实现对HTTP请求参数的基本控制.

I have a case where I need to redirect my HTTP request object to other controllers/classes for further processing. The problem is that in some controller, I would like to get better control on the parameters I'm forwarding to the next class: modify, edit, remove them. So, I would like to know if there is a good practice/pattern to achieve this basic control on the HTTP request parameters.

推荐答案

好的做法是使用servlet过滤器将请求对象包装在另一个对象中.由于HttpServletRequest是一个接口,因此您可以编写自己的实现.您的实现可以保存收到的请求,并将其任何和所有方法委托给原始请求对象,还可以根据需要修改返回值.因此,您的getParameter()等方法可以在原始请求对象上调用相同的方法,并在返回之前按您认为合适的方式修改结果.

The good practice is to wrap the request object in another object using a servlet filter. Since HttpServletRequest is an interface, you can write your own implementation of it. Your implementation can hold the request you received and delegate any and all of its own methods to the original request object, but also modify the return values as you see fit. So your getParameter() etc. methods could call the same method on the original request object, and modify the result as you see fit before returning it.

class MyHttpServletRequestWrapper implements HttpServletRequest {
   private HttpServletRequest originalRequest;

   public MyHttpServletRequestWrapper(HttpServletRequest originalRequest) {
      this.originalRequest = originalRequest;

   public String getAuthType() {return originalRequest.getAuthType();}
   public String getQueryString() {return originalRequest.getQueryString();}
   // etc.

   public Map getParameterMap() {
      Map params = originalRequest.getParameterMap();
      params.remove("parameter-to-remove");
      params.put("parameter-to-add", "<a value>");
      //etc.
   }
}

您的servlet过滤器:

Your servlet filter:

class MyFilter implements Filter {
    public void init(FilterConfig config) {
       // perhaps you might want to initialize something here
    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
        HttpServletRequest originalRequest = (HttpServletRequest) request;
        HttpServletRequest newRequest = new MyHttpServletRequest(originalRequest);
        chain.doFilter(newRequest, response);
    }
}

您还可以继承javax.servlet.request.HttpServletRequestWrapper的子类,这将节省大量工作.

You can also subclass javax.servlet.request.HttpServletRequestWrapper, which will save you a bunch of work.

请参阅此帖子了解更多.

这篇关于删除控制器/类中的HttpServletRequest参数的最佳方法?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆