来源:项目中的Ajax请求Session超时问题。
如何正确的处理Session超时问题,之前在项目中判断session超时或者未登录时,是直接返回jsp页面。这样的方式只能对请求不是ajax请求生效,如果是ajax请求则无法正确的跳转。
经过与前端同学沟通后,确定返回http状态码401来确认需要跳转登录。
首先,当session超时时,shiro会跳转到login方法中,在login方法中判断是否是ajax请求,如果不是则返回页面,如果是则返回状态码401.
最开始时,想用response.setStatus方法来填写状态码,并且在请求方法上加上了@Responsebody的注解,发现返回的始终是200状态码。
后来把注解去掉,并且使用restful中的ResponseEntity类来返回状态码。也就是返回的是一个ResponseEntity对象。
@RequestMapping("${adminPath}/login/sessionTimeout") public ResponseEntity sessionTimeout() throws IOException { return new ResponseEntity(HttpStatus.UNAUTHORIZED); }
这样返回给前端的响应头中状态码就是401了。