2016-09-21 2 views
0

Я установил Spring HandlerInterceptor для добавления атрибута в HttpServletRequest, чтобы читать его с контроллера, к сожалению, это не работает, что кажется мне странным. Я что-то делаю неправильно? Любая идея, как передавать данные от перехватчика на контроллер?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 («моя-роль») возвращает нуль ... но вернуть изъятое значение, если я прочитал в postHandle из HandlerInterceptor, я чувствую, что мне что-то не хватает ...

EDIT: Я узнал, что через сеанс с помощью функции request.getSession() setAttribute работает как прелесть, но я не понимаю, почему сам запрос не работает в этом случае использования.

+0

после всех ваших перехватчика кода – george

ответ

0

Можете ли вы попробовать сеанс вместо запроса, как показано ниже.

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

Смежные вопросы