ssm框架里面怎样实现保持在线

实现功能,在登陆状态下浏览器跟服务器一段时间不进行交互,session内部存放的信息将会失效,类似存放在其中的(adminUser)但是依然可以浏览登录后的网页,再跟服务器进行交互才会报错

实现需求:SpringMVC Redis 数据库

1.SpringMVC 进行拦截,

1)session里面有adminUser,则把adminUserId放到redis内部 JedisUtils.setex("keeponline_" + request.getSession().getId(), 60 * 60 * 24, adminUser.getId() + ""); return true;

2)session里面没有adminUser 如果不存在则有可能两种情况,第一次访问服务器或者session过期

  进一步判断,Cookie sessionIdCookie = WebUtils.getCookie(request, "JSESSIONID");如果sessionIdCookie==null,则说明第一次访问,return true,

  否则的话从redis里面取出当session里面有数据已经存放在redis里面的adminUserId,对应的key为“keeponline”+sessionIdCookie.getValue(),

  String oldSessionId = sessionIdCookie.getValue();
  String adminUserId = JedisUtils.get("keeponline_" + oldSessionId);然后在数据库进行查找,重新把adminUser添加到session里面进行正常操作

3)配置拦截器,登录,退出不需要进行拦截

相关代码:

package com.rupeng.web.rupengInterceptor;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import org.springframework.web.util.WebUtils;

import com.rupeng.pojo.AdminUser;
import com.rupeng.service.AdminUserService;
import com.rupeng.util.JedisUtils;

public class OnlineInterceptor extends HandlerInterceptorAdapter
{
@Autowired
private AdminUserService adminUserService;

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception
{
AdminUser adminUser = (AdminUser) request.getSession().getAttribute("adminUser");
//判断adminUser是否为null,不是则继续往下走,是的话有可能第一次打开浏览器,也有可能seession过期,继续判断
if (adminUser == null)
{
Cookie sessionIdCookie = WebUtils.getCookie(request, "JSESSIONID");
if (sessionIdCookie == null)//如果为null则说明第一次访问
{
return true;
}
//不为null则从redis里面把对应的adminUserId取出来,重新设置到session内进行正常操作
//存放到redis时约定主键为keeponline_sessionIdCookie (keeponline_sessionIdCookie,adminUserId)
String oldSessionId = sessionIdCookie.getValue();
String adminUserId = JedisUtils.get("keeponline_" + oldSessionId);
if (adminUserId == null)
{
return true;
}
adminUser = adminUserService.selectOne(Long.parseLong(adminUserId));

request.getSession().setAttribute("adminUser", adminUser);
return true;
}

JedisUtils.setex("keeponline_" + request.getSession().getId(), 60 * 60 * 24, adminUser.getId() + "");
return true;
}

}

 

<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<mvc:mapping path="/subject/*"/>
<mvc:mapping path="/card/*"/>
<mvc:mapping path="/user/*"/>
<mvc:mapping path="/classes/*"/>
<mvc:mapping path="/permission/*"/>
<mvc:mapping path="/*"/>
<mvc:exclude-mapping path="/adminUser/login.do"/>
<mvc:exclude-mapping path="/adminUser/logout.do"/>
<bean class="com.rupeng.web.rupengInterceptor.OnlineInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>

转载于:https://www.cnblogs.com/yongzhewuwei/p/8580357.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的使用 SSM 框架实现在线考试系统的流程: 1. 数据库设计 首先,你需要设计数据库,包括题目、用户、试卷、考试等表。具体的表结构和关系可以根据需求进行设计。 2. 创建项目 创建一个 Maven 项目,并添加 Spring、Spring MVC、MyBatis 等依赖。在 web.xml 文件中配置 DispatcherServlet,并添加 Spring MVC 相关配置文件。 3. 创建实体类和 DAO 接口 创建与数据库对应的实体类和 DAO 接口,使用 MyBatis 提供的注解或 XML 配置文件来实现数据库的交互。 4. 创建服务层和控制器 创建服务层和控制器,用于处理业务逻辑和用户请求。服务层可以调用 DAO 层提供的方法,对数据进行处理,并返回结果。控制器可以使用 Spring MVC 提供的注解来标识处理请求的方法,同时调用服务层的方法来处理业务逻辑。 5. 创建视图层 创建视图层,包括 HTML 页面、CSS 样式表、JavaScript 脚本等。使用 Spring MVC 的视图解析器来将控制器返回的逻辑视图名映射为物理视图路径,将视图渲染成 HTML 页面。 6. 实现用户登录和权限控制 实现用户登录功能,并对用户权限进行控制。可以使用 Spring Security 或 Shiro 等安全框架实现用户认证和授权。 7. 实现在线考试功能 实现在线考试功能,包括试卷生成、试题随机抽取、考试计时、成绩计算等。可以使用 JavaScript 实现计时器功能,使用 AJAX 技术实现试题的异步加载和提交。 以上是一个简单的使用 SSM 框架实现在线考试系统的流程,具体实现过程需要根据需求进行调整和完善。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值