我正在使用Spring 3.2.4和Spring Security 3.2.3來處理RESTful API調用以返回令牌的「獲取安全令牌」請求(這將用於保護對服務的後續請求)。這是具有主體具有用戶名和密碼,並在所述控制器被處理的POST請求:所述控制器已成功完成處理請求Spring 3.2 REST API添加cookie到控制器外的響應
@RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public SessionTokenResponse getSessionToken(@RequestBody Credentials credentials, ModelAndView interceptorModel) throws AccessException {
final String token = webGate.getSessionTokenForUser(credentials.getUsername(), credentials.getPassword());
LOGGER.debug("Logged in user : " + credentials.getUsername());
interceptorModel.addObject(SessionConstants.INTERCEPTOR_MODEL_TOKEN_KEY, token); // Used by post-processing in interceptors, e.g. add Cookie
return new SessionTokenResponse(ResponseMessages.SUCCESS, token);
}
後,我想增加一個cookie與令牌到響應。 我試過HandlerInterceptorAdapter實現,但我不能找到辦法的應答中的「令牌」或ModelAndView的:
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView interceptorModel) throws Exception {
final String token = (String) interceptorModel.getModel().get(SessionConstants.INTERCEPTOR_MODEL_TOKEN_KEY);
if (token != null) {
final Cookie obsso = new Cookie(cookieName, token);
obsso.setPath(cookiePathUri);
obsso.setDomain(cookieDomain);
obsso.setMaxAge(cookieMaxAge);
response.addCookie(obsso);
}
}
的interceptorModel是空。 由於@ResponseBody已經解決了,並且不再需要ModelAndView(這只是我基於調試的假設),Spring MVC似乎並沒有將它提供給postHandle。
在攔截器或監聽器的控制器之外實現該功能(在響應中添加cookie)的正確方法是什麼?
此外,由於您正在擴展'HandlerInterceptorAdapter',postHandle方法將僅具有請求,響應和對象參數。不幸的是,你不能在Spring上添加另一個參數來填充。但我似乎記得找到了從'HttpServletRequest'或'HttpServletResponse'對象中獲取'ModelAndView'對象的方法。我只是不記得如何。 – JamesENL