Spring 3 HandlerInterceptor将信息传递给控制器
问题描述:
我已经设置了一个Spring HandlerInterceptor来向HttpServletRequest添加一个属性,以便能够从Controller读取它,可悲的是,这看起来并不起作用,这对我来说似乎很奇怪。我做错了什么?任何想法如何将数据从拦截器传输到控制器?Spring 3 HandlerInterceptor将信息传递给控制器
下面是两个影响类
public class RequestInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
request.setAttribute("my-role", "superman");
}
[...]
}
@RestController
@RequestMapping("Test")
public class TestController {
public final Logger logger = LoggerFactory.getLogger(getClass());
@RequestMapping(value = "something")
public void something(HttpServletRequest request) {
logger.info(request.getAttribute("my-role"));
}
[...]
}
的request.getAttribute(“我的角色”)返回null的简化代码...但如果我在读的postHandle它返回的值除外的HandlerInterceptor,我觉得我失去了一些东西...
编辑:我发现通过会议与“request.getSession()。setAttribute”作为一种魅力,仍然我不明白为什么请求本身在这个用例中不起作用。
答
你可以尝试会议而不是像下面的请求。
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
...
HttpSession session = request.getSession();
session.setAttribute("attributeName", objectYouWantToPassToHandler);
....
}
In your handler handleRequest method:
public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response) throws Exception {
....
HttpSession session = request.getSession();
objectYouWantToPassToHandler objectYouWantToPassToHandler = session.getAttribute("attributeName");
....
}
+0
是的,它的工作原理,但我不明白为什么请求级别不起作用。 – JavaCupiX
发布您的所有拦截器代码 – george