2016-09-21 10 views
0

HttpServletRequestに属性を追加してコントローラから読み込めるようにSpring HandlerInterceptorをセットアップしましたが、悲しいことにこれはうまくいきません。私は間違ったことをしていますか?どのようにしてインターセプタからコントローラにデータを送信するのか?ここでSpring 3 HandlerInterceptorがコントローラに情報を渡す

は2つの影響を受けるクラス

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

答えて

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

関連する問題