我正在使用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