我的spring拦截器中的session属性为null

时间:2015-02-18 15:52:45

标签: spring session controller

我无法获得我在会话中输入的值。 我想用拦截器检查这个值,但我只得到一个空值。

这是我放置变量" trustedUser"

的地方
@RequestMapping(value = "/context/{token}", method = { RequestMethod.GET })
public @ResponseBody
ResponseEntity<ContexteUI> getContextByToken(@PathVariable("token") String token, HttpSession session)
        throws ContextFault_Exception {

    HttpStatus httpStatus = HttpStatus.OK;
    if (validation(token)){
        session.setAttribute("trustedUser","trustedUser");
    } else {
        httpStatus = HttpStatus.BAD_REQUEST;
    }

    return new ResponseEntity<ContexteUI>(contexte, httpStatus);
}

这是我的拦截器:

 public class AuthentificationInterceptor extends HandlerInterceptorAdapter {
    @Override
    public boolean preHandle(HttpServletRequest request,
        HttpServletResponse response, Object handler) throws Exception {

       System.out.println("Pre-handle");

       String trustedUserTest = (String) request.getSession().getAttribute("trustedUser");
       System.out.println("trustedUserTest: "+ trustedUserTest); // I only get null here, why ?

       return true;

    }
}

我哪里出错?

2 个答案:

答案 0 :(得分:1)

在适当的HandlerAdapter触发处理程序本身的执行之前调用HandlerInterceptor。那些说,你试图从preHandle()阶段的会话中访问该属性,该阶段在处理程序执行它之前被调用,并且你还没有将属性设置为会话。

因此,您可以将逻辑移至postHandle()阶段并获取会话属性,或者如果您真的需要在preHandle阶段执行某些操作,请更改逻辑。

在处理程序执行后调用postHandle()(这就是为什么它允许在将ModelAndView对象渲染到视图页面之前对其进行操作)

答案 1 :(得分:1)

对不起,问题是由于另一个原因造成的: 我在8000端口上用grunt去掉了jsp页面 我的API(服务)显示在8080端口上。

显然浏览器无法在两者之间建立链接。

所以我把8080端口全部移动了,现在可以正常工作了