在doFilter()中是servletRequest.setAttribute threadsafe吗?

时间:2016-01-19 06:51:47

标签: java spring spring-mvc servlets thread-safety

我的过滤器的doFilter在验证用户

后执行此操作
servletRequest.setAttribute("user", "someUserName");

我是这样的控制器 -

@Controller
public class SomeController {

    @RequestMapping(value = "/someURI", method = RequestMethod.GET)
    @ResponseBody
    public String someMethod(HttpServletRequest httpServletRequest) {
        String name = httpServletRequest.getAttribute("user").toString();
        System.out.println(name);
        return "hello!";
    }
}

我的问题是 - 是否保证在我设置doFilter()的地方处理user的线程将与调用someMethod的线程相同?换句话说,这里存在安全风险吗?我担心如果存在线程安全错误,请使用以下行 -

httpServletRequest.getAttribute("user")

可能会返回错误的结果

1 个答案:

答案 0 :(得分:3)

Servlet requestresponse对象是为每个新requestresponse重新创建的,因此它们本质上是线程安全的。 在上面的代码中,每个request调用过滤器,并且因为doFilter使用response object(它是线程安全的)来实现它的目标,所以过滤器也是线程安全的。