我的过滤器的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")
可能会返回错误的结果
答案 0 :(得分:3)
Servlet request
和response
对象是为每个新request
和response
重新创建的,因此它们本质上是线程安全的。
在上面的代码中,每个request
调用过滤器,并且因为doFilter
使用response object
(它是线程安全的)来实现它的目标,所以过滤器也是线程安全的。