我的 spring 拦截器中的会话属性为 null
session attribute null in my spring interceptor
我无法获取已放入会话中的值。
我想用拦截器检查这个值,但我只得到一个空值。
这是我放置变量的地方"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;
}
}
我哪里错了?
A HandlerInterceptor 在适当的 HandlerAdapter 触发处理程序本身的执行之前被调用。那些说,你正试图在 preHandle()
阶段从会话访问属性,这是在处理程序执行 itslef 之前调用的,你还没有将属性设置到会话中。
因此,您可以将您的逻辑移动到 postHandle()
阶段并在那里获取会话属性,或者如果您确实需要在 preHandle
阶段执行某些操作,则更改您的逻辑。
并且 postHandle()
在处理程序执行后调用(这就是为什么它允许在将 ModelAndView 对象呈现到视图页面之前对其进行操作)
抱歉,问题是由于其他原因造成的:
我在 8000 端口上用 grunt 删除了 jsp 页面
我的 API(services) 显示在 8080 端口上。
显然浏览器无法在两者之间创建 link。
所以我把所有的东西都移到 8080 端口上,现在可以用了
我无法获取已放入会话中的值。 我想用拦截器检查这个值,但我只得到一个空值。
这是我放置变量的地方"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;
}
}
我哪里错了?
A HandlerInterceptor 在适当的 HandlerAdapter 触发处理程序本身的执行之前被调用。那些说,你正试图在 preHandle()
阶段从会话访问属性,这是在处理程序执行 itslef 之前调用的,你还没有将属性设置到会话中。
因此,您可以将您的逻辑移动到 postHandle()
阶段并在那里获取会话属性,或者如果您确实需要在 preHandle
阶段执行某些操作,则更改您的逻辑。
并且 postHandle()
在处理程序执行后调用(这就是为什么它允许在将 ModelAndView 对象呈现到视图页面之前对其进行操作)
抱歉,问题是由于其他原因造成的: 我在 8000 端口上用 grunt 删除了 jsp 页面 我的 API(services) 显示在 8080 端口上。
显然浏览器无法在两者之间创建 link。
所以我把所有的东西都移到 8080 端口上,现在可以用了