2016-09-21 4 views
0

컨트롤러에서 읽을 수 있도록 HttpServletRequest에 속성을 추가하기 위해 Spring HandlerInterceptor를 설정했습니다. 슬프게도이 기능이 이상하게 보일 수 있습니다. 나는 잘못하고 있니? 인터셉터에서 컨트롤러로 데이터를 전송하는 방법에 대한 아이디어가 있습니까? 여기 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의 내가 뭔가를 놓치고있는 것 같은 느낌이 든다 ...

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

관련 문제