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”作为一种魅力,仍然我不明白为什么请求本身在这个用例中不起作用。

+0

发布您的所有拦截器代码 – george

你可以尝试会议而不是像下面的请求。

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