我已经设置了一个 Spring HandlerInterceptor 来向 HttpServletRequest 添加一个属性,以便能够从控制器读取它,遗憾的是这似乎不起作用,这对我来说似乎很奇怪。我做错了吗?知道如何将数据从拦截器传输到控制器吗?
这是两个受影响的类的简化代码
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"));
}
[...]
}
Run Code Online (Sandbox Code Playgroud)
request.getAttribute("my-role") 返回空值...但如果我在 HandlerInterceptor 的 postHandle 中读取它确实返回异常值,我觉得我错过了一些东西...
编辑:我发现通过“request.getSession().setAttribute”进行会话很有用,但我仍然不明白为什么请求本身在这个用例中不起作用。