Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正在尝试更改筛选器中的请求,以便它反映在@RequestParam中_Java_Spring_Annotations_Servlet Filters_Http Request Parameters - Fatal编程技术网

Java 正在尝试更改筛选器中的请求,以便它反映在@RequestParam中

Java 正在尝试更改筛选器中的请求,以便它反映在@RequestParam中,java,spring,annotations,servlet-filters,http-request-parameters,Java,Spring,Annotations,Servlet Filters,Http Request Parameters,我正在尝试读取请求属性并使用过滤器更改它们,以便在控制器中根据需要接收更改的值。但是我在过滤器中所做的更改没有反映在@RequestParam中 我的控制器: public Response getDetails(HttpServletRequest req, @RequestParam(required = false) String userId) { System.out.println("attrib in request:"+req.getParameter("user

我正在尝试读取请求属性并使用
过滤器更改它们,以便在控制器中根据需要接收更改的值。但是我在
过滤器中所做的更改没有反映在
@RequestParam

我的控制器:

public Response getDetails(HttpServletRequest req, @RequestParam(required = false) String userId) {
        System.out.println("attrib in request:"+req.getParameter("userId"));
       System.out.println("attrib in RequestParam:"+userId);
}
我的过滤器:

@Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        try {
            System.out.println("inside filter---------------------------");
            HtmlRequestWrapper req = new HtmlRequestWrapper(request);           
            chain.doFilter(req, response);  
        } catch (Exception ex) {
            request.setAttribute("errorMessage", ex);
            // request.getRequestDispatcher("/WEB-INF/views/jsp/error.jsp").forward(request,
            // response);
        }
    }
我的HttpServletRequestWrapper(HtmlRequestWrapper):


试着调试并查看过滤器是否被执行,我的猜测是过滤器并没有添加到过滤器链中。此外,将配置添加到decriptionfilter工作,当我执行request.getParameter时,它会更改请求。我得到更改的值,但在控制器内部,@RequestParamhm不会反映这些更改。这种不一致的行为在我看来像是一个bug,所以解决方案可能是将其列入spring团队的名单。
public class HtmlRequestWrapper extends HttpServletRequestWrapper {

    public HtmlRequestWrapper(ServletRequest request) {
        super((HttpServletRequest) request);
    }

    public String sanitize(String input) {
        String result = "";
        result = input + "bla bla";
        return result;
    }

    public String getParameter(String paramName) {
        String value = super.getParameter(paramName);
        value = sanitize(value);
        return value;
    }

    public String[] getParameterValues() {
        String values[] = null;
        // String values[] = request.getParameterValues(paramName);
        for (Enumeration<String> en = super.getParameterNames(); en.hasMoreElements();) {
            String paramName = (String) en.nextElement();
            values = super.getParameterValues(paramName);
            int n = values.length;
            for (int i = 0; i < n; i++) {
                System.out.println("param val before: " + values[i]);
                values[i] = sanitize(values[i]);
                System.out.println("param val after: " + values[i]);
            }
        }
        return values;
    }

    public Map<String, String[]> getParameterMap() {
        Map<String, String[]> paramMap = new HashMap<>();
        String values[] = null;
        for (Enumeration<String> en = super.getParameterNames(); en.hasMoreElements();) {
            String paramName = (String) en.nextElement();
            values = super.getParameterValues(paramName);
            int n = values.length;
            for (int i = 0; i < n; i++) {
                System.out.println("param val before in map: " + values[i]);
                values[i] = sanitize(values[i]);
                System.out.println("param val after  in map: " + values[i]);
            }
            paramMap.put(paramName, values);
            this.getRequest().setAttribute(paramName, values);
        }
        return Collections.unmodifiableMap(paramMap);
    }
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(new ServiceInterceptor());
}
@Bean
public Filter htmlFilter() {
    return new HtmlFilter();
}