![](/img/trans.png)
[英]Passing object from Spring HandlerInterceptor to Servlet Filter
[英]Spring 3 HandlerInterceptor passing information to Controller
我已經設置了一個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”的會話可以起到吸引作用,但我仍然不明白為什么請求本身在這種用例中不起作用。
您可以嘗試使用會話代替下面的請求嗎?
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");
....
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.