Javaweb项目中会话出现超时如何解决

  介绍

Javaweb项目中会话出现超时如何解决?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

在Java Web开发中,会话为我们提供了很多方便,会议是由浏览器和服务器之间维护的.Session超时理解为:浏览器和服务器之间创建了一个会议,由于客户端长时间(休眠时间)没有与服务器交互,服务器将此会话销毁,客户端再一次与服务器交互时之前的会话就不存在的了。

<强> 0。需求

需要对所有的/Web/* *请求进行登录拦截,会话超时时跳转到登录页面。

<强> 1。引入

一般来说,在项目使用中都会配置会话超时时间,如果不配置,则默认值为30分钟,即用户不操作30分钟以后,会话就会失效,此时用户就需要重新登录系统。

会话超时时间的配置主要的项目的。xml中进行配置,如下:

& lt;跨度比;& lt; !——设置会话超时时间,在,
,,,& lt; session-config>,
,,,,,,,& lt; !——分钟,祝辞,
,,,,,,,,,,,& lt; session-timeout> 60 & lt;/session-timeout>,
,,,,,,,,,,,& lt; !——去除URL上显示的jsessionid,防止打开标签页时出现JS错误——祝辞,
,,,,,,,,,,,& lt; tracking-mode> COOKIE,
,,,& lt;/session-config> & lt;/span> & lt;跨度祝辞,时间/span>
& lt;;

<强> 2。请求的分类

现在的项目中请求主要分为两种:一种是普通请求,即发起请求返回视图和模型;另外一种是Ajax请求,主要返回模型数据。后端进行处理时就要根据不同的请求返回不同的内容。

对于普通请求,我们直接返回JavaScript脚本,脚本内容可以是将页面跳转到登录页面。

对Ajax请于求,则需要返回非200的状态码,这样Ajax请求才会进入到错误回调函数中以及全局的Ajax错误回调函数AjaxError中。

<强> 3。后端处理会话超时

后端采用SpringMVC的拦截器处理,这里为什么用拦截器呢?一方面,请求URL不能限制的太死,比如/*,这样对所有的请求都进行过滤是浪费资源的。另一方面,有些URL不需要进行拦截处理,比如到登录页面的请求肯定是不能拦截,要不然会循环重定向。再一方面,我们只需要拦截控制器请求,其它请求不拦截。

下面看一下拦截器的实现:

/* * 
* Web端登录拦截器
*处理请求时会话失效的问题,包含Ajax请求和普通请求
* @ClassName WebLoginInterceptor
* @author zhangshun
* @date 2016年10月20日上午11:14:52
*/
公共类WebLoginInterceptor延伸HandlerInterceptorAdapter {
,,,,/* *
,,,,*日志对象
,,,,*/
,,,,私人日志记录器=LoggerFactory.getLogger (WebLoginInterceptor.class);
,,,,/* *
,,,,*默认注销URL
,,,,*超即会话时后,发起请求到此地址,只对普通请求有效
,,,,*/
,,,,私有静态最终字符串DEFAULT_LOGOUT_URL=?web/logout";
,,,,/* *
,,,,*注销URL
,,,,*/
,,,,私人字符串logoutUrl;
,,,, @Override
,,,,公共布尔preHandle (HttpServletRequest请求,HttpServletResponse响应,
,,,,,,,,,,,,对象处理程序)抛出异常{
,,,,,,,,用户用户=SessionUtils.getUserFromRequestAcrossCas(请求);
,,,,,,,,字符串uri=request.getRequestURI (),,,,,
,,,,,,,,,,,,,,,,如果(用户==null) {
,,,,,,,,,,,,,,,,,,,, response.setContentType (“text/html; charset=UTF-8");
,,,,,,,,,,,,,,,,,,,,如果(request.getHeader (“x-requested-with") !=null
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,request.getHeader (“x-requested-with") .equalsIgnoreCase (“XMLHttpRequest")) {
,,,,,,,,,,,,,,,,,,,,,,,,//Ajax请求,前段根据此头进行处理
,,,,,,,,,,,,,,,,,,,,,,,, response.setHeader (“sessionTimeout",“会话超时,你需要relogin !“);
,,,,,,,,,,,,,,,,,,,,,,,,//返回未认证的状态码(401)
,,,,,,,,,,,,,,,,,,,,,,,, response.setStatus (HttpStatus.UNAUTHORIZED.value ());
,,,,,,,,,,,,,,,,,,,,,,,,,,,, logger.debug(“请求路径:“null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

Javaweb项目中会话出现超时如何解决