public class LoginInterceptor implements HandlerInterceptor {
@Autowired
private Environment env;
@Autowired
private LoginService loginService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (StringUtils.contains(request.getRequestURL().toString(), "login.htm")) {
return true;
}
if (StringUtils.contains(request.getRequestURL().toString(), "doLogin.htm")) {
return true;
}
request.getSession();//增加这行代码用来解决问题
Result<Integer> result = this.loginService.getUserIdFromCache(request);
if (!result.isSuccess()) {
response.sendRedirect(this.env.getProperty("fns.posp-admin.host") + "/login/login.htm");
return true;
}
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
}
在做用户登录时使用spring的拦截器检查用户登录信息, 一直报Cannot create a session after the response has been committed错误
解决方法是: 在response.sendRedirect()之前增加request.getSession()