【问题标题】:Spring 3 HandlerInterceptor passing information to ControllerSpring 3 HandlerInterceptor 将信息传递给控制器
【发布时间】: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?

标签: java spring


【解决方案1】:

您可以尝试使用会话而不是请求,如下所示。

  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");
            ....


  }

【讨论】:

  • 是的,确实有效,但我仍然不明白为什么请求级别不起作用。
  • 对于请求级别的存储来说,要求会话存在不会太重吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-19
  • 1970-01-01
相关资源
最近更新 更多