【发布时间】:2016-09-21 22:09:44
【问题描述】:
我已经设置了一个 Spring HandlerInterceptor 来向 HttpServletRequest 添加一个属性,以便能够从 Controller 中读取它,遗憾的是这似乎不起作用,这对我来说似乎很奇怪。我做错了吗?知道如何将数据从拦截器传输到控制器吗?
这是两个受影响类的简化代码
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("my-role") 返回 null...但是如果我在 HandlerInterceptor 的 postHandle 中读取它确实返回异常值,我觉得我错过了一些东西...
编辑:我发现使用“request.getSession().setAttribute”进行会话很有魅力,但我仍然不明白为什么请求本身在这个用例中不起作用。
【问题讨论】:
-
发布你所有的拦截器代码
-
我在春季 5.0.7.RELEASE 工作。我仅使用请求属性成功地将值从拦截器传递给控制器。不需要参与会议。
-
能否请您检查您编写的拦截器是否拦截了/Test url?