在chain.doFilter之后调用request.setAttribute

时间:2014-10-15 21:27:36

标签: java jsp web-deployment

行。基本上我想要做的是将HttpServletRequest的对象列表设置为这样的参数:

request.setAttribute("Param", objs);

然后我想在过滤器中修改这些对象的列表,这样我就可以删除一些用户无权查看的内容。

像这样:

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

    chain.doFilter(request, response);
    request.removeAttribute("Param");


}

但它没有做任何事情。有人能帮助我吗?

4 个答案:

答案 0 :(得分:0)

在过滤器中{/ 1}}之后修改之后的请求属性并不奇怪。 servlet和/或jsp已经完成了它们的部分。你通常只在那个地方做清理工作。

答案 1 :(得分:0)

(AFAIK)除非有某个视图公开该特定属性,否则最终用户将无法在请求对象中看到您的任何对象。这意味着您必须在jsp(如html)或json字符串等中显示该特定请求属性...

答案 2 :(得分:0)

你的问题很混乱。您可以明智地设置请求属性的唯一地方是在调用doFilter():

之前的过滤器
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    request.setAttribute("Param", objs);
    chain.doFilter(request, response);
    request.removeAttribute("Param");
}

或者在servlet本身中,它作为所有doFilter()调用的最终结果执行,因此在过滤器调用之后发生,而不是之前。

正如其他人所指出的那样,之后进行清理并不是必要的。

答案 3 :(得分:0)

在我的情况下,我使用类似this solution的近似值解决了它。

使用请求包装器,您可以覆盖setAttribute方法,将servlet / beans等插入的值存储在映射中,并在容器刷新请求后保留它们。这样,您可以在doChain()方法之后从地图中获取值。