——————————DescriptionStart——————————
运行环境
Java≥8、MySQL≥5.7、Tomcat≥8
开发工具
eclipse/idea/myeclipse/sts等均可配置运行
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明







基于javaweb的SSM+Maven课程在线学习与测试系统(java+ssm+bootstrap+html+mysql)
基于B/S架构的课程在线学习与测试系统
启动说明
项目为maven管理,最近集成了redis,所以在运行项目是先要下载redis并启动客户端,方可正常运行项目,由于只需要下载redis,无需其他配置,这里就不做过多说明。
最近更新
集成redis来保存用户登录信息,添加过滤器重置用户登录有效期。拦截器实现统一登录和权限校验(相关重构还未完成)。
修改配置文件:com.bs.commonn.RedisPool 地址、端口号
pool = new JedisPool(config,”127.0.0.1”,6379,1000*2);
修改数据库配置文件,导入项目bs.sql文件
学生账号测试:lwj 123456
教师测试账号:lwj 123456
管理员测试账号:admin admin
项目亮点
前后端分离。
用户登录权限区分和控制。
防止横向越权和纵向越权。
设计高复用的服务器响应对象。
guava缓存。
pojo,vo抽象模型。
数据绑定对象。
Mybatis分页
Bootstrap。
artTemplate,artDialog,iframe前端模板使用。
select2、toastr、sweetalert等等前端插件的使用。
redis缓存。
全局异常处理,拦截器权限统一检验。
——————————CodeStart——————————
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| */ @RequestMapping("delTeacher.do") @ResponseBody public ServerResponse delTeacher(HttpServletRequest request, Integer pkTeacher) { String token = CookieUtil.readCookie(request); if (StringUtils.isEmpty(token)) { return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(), "请先登录"); } String manageStr = RedisPoolUtil.get(token); Manager manager = JacksonUtil.stringToObj(manageStr, Manager.class); if (manager == null) { return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(), "请先登录"); } if (Constant.Role.ROLE_ADMIN.equals(manager.getRole())) { return manageService.delTeacher(pkTeacher); } return ServerResponse.createByErrorMessage("不是管理员,无法操作"); }
@RequestMapping("queryStudent.do") @ResponseBody public ServerResponse queryStudent(HttpServletRequest request, Student student, @RequestParam(value = "pageNum", defaultValue = "1") int pageNum, @RequestParam(value = "pageSize", defaultValue = "10") int pageSize) { String token = CookieUtil.readCookie(request); if (StringUtils.isEmpty(token)) { return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(), "请先登录"); } String manageStr = RedisPoolUtil.get(token); Manager manager = JacksonUtil.stringToObj(manageStr, Manager.class); if (manager == null) { return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(), "请先登录"); } if (Constant.Role.ROLE_ADMIN.equals(manager.getRole())) { return manageService.queryStudent(student, pageNum, pageSize); } return ServerResponse.createByErrorMessage("不是管理员,无法操作"); }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| Manager manager = JacksonUtil.stringToObj(manageStr, Manager.class); if (manager == null) { return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(), "请先登录"); } if (Constant.Role.ROLE_ADMIN.equals(manager.getRole())) { return noticeService.addOrModifyNotice(notice, manager); } return ServerResponse.createByErrorMessage("不是管理员,无法操作"); }
@RequestMapping("getNotice.do") @ResponseBody public ServerResponse getNotice(HttpServletRequest request, Integer pkNotice) { String token = CookieUtil.readCookie(request); if (StringUtils.isEmpty(token)) { return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(), "请先登录"); } String manageStr = RedisPoolUtil.get(token); Manager manager = JacksonUtil.stringToObj(manageStr, Manager.class); if (manager == null) { return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(), "请先登录"); } if (Constant.Role.ROLE_ADMIN.equals(manager.getRole())) { return noticeService.getNotice(pkNotice); } return ServerResponse.createByErrorMessage("不是管理员,无法操作"); } } package com.bs.controller;
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| String token = CookieUtil.readCookie(request); if (StringUtils.isEmpty(token)) { return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(), "请先登录"); } String teacherStr = RedisPoolUtil.get(token); Teacher teacher = JacksonUtil.stringToObj(teacherStr, Teacher.class); if (teacher == null) { return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(), "请先登录"); } if (Constant.Role.ROLE_TEACHER.equals(teacher.getRole())) { return testsService.getTestsInfo(pkTest); } return ServerResponse.createByErrorMessage("不是教师,无法操作"); }
@RequestMapping("addTest.do") @ResponseBody public ServerResponse addTest(HttpServletRequest request, Tests tests) { String token = CookieUtil.readCookie(request); if (StringUtils.isEmpty(token)) { return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(), "请先登录"); } String teacherStr = RedisPoolUtil.get(token); Teacher teacher = JacksonUtil.stringToObj(teacherStr, Teacher.class); if (teacher == null) { return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(), "请先登录"); } if (Constant.Role.ROLE_TEACHER.equals(teacher.getRole())) { return testsService.addTest(tests, teacher); } return ServerResponse.createByErrorMessage("不是教师,无法操作");
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
public class ManageInterceptor implements HandlerInterceptor {
private static final Logger log = LoggerFactory.getLogger(ManageInterceptor.class);
@Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { HandlerMethod handlerMethod = (HandlerMethod) handler; String methodName = handlerMethod.getMethod().getName(); String className = handlerMethod.getBean().getClass().getName(); log.info("拦截类名:{},方法名:{}", className, methodName); Manager manager = null; String token = CookieUtil.readCookie(request); if (StringUtils.isNotEmpty(token)) { String studentStr = RedisPoolUtil.get(token); manager = JacksonUtil.stringToObj(studentStr, Manager.class); } return manager != null && (StringUtils.equals(manager.getRole(), "0")) || BaseInterceptor.check(response, manager); }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| */ public static void writeCookie(HttpServletResponse response, String value) { Cookie cookie = new Cookie(COOKIE_NAME, value); cookie.setDomain(COOKIE_DOMAIN); cookie.setPath("/"); cookie.setHttpOnly(true); cookie.setMaxAge(60 * 60 * 24 * 365); response.addCookie(cookie); }
public static String readCookie(HttpServletRequest request) { Cookie[] cookies = request.getCookies(); if (cookies != null && cookies.length > 0) { for (Cookie ck : cookies){ if (StringUtils.equals(ck.getName(),COOKIE_NAME)){ return ck.getValue(); } } } return null; }
public static void deleteCookie(HttpServletRequest request,HttpServletResponse response){ Cookie[] cookies = request.getCookies(); if (cookies != null && cookies.length > 0) { for (Cookie ck : cookies){ if (StringUtils.equals(ck.getName(),COOKIE_NAME)){ ck.setDomain(COOKIE_DOMAIN); ck.setPath("/"); ck.setHttpOnly(true); ck.setMaxAge(0); response.addCookie(ck); } } } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
@RequestMapping("deleteTestsFromPaper.do") @ResponseBody public ServerResponse deleteTestsFromPaper(HttpServletRequest request, Integer fkTest, Integer fkPaper) { String token = CookieUtil.readCookie(request); if (StringUtils.isEmpty(token)) { return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(), "请先登录"); } String teacherStr = RedisPoolUtil.get(token); Teacher teacher = JacksonUtil.stringToObj(teacherStr, Teacher.class); if (teacher == null) { return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(), "请先登录"); } if (Constant.Role.ROLE_TEACHER.equals(teacher.getRole())) { return paperService.deleteTestsFromPaper(fkTest, fkPaper, teacher); } return ServerResponse.createByErrorMessage("不是教师,无法操作"); }
@RequestMapping("emptyTestsFromPaper.do") @ResponseBody public ServerResponse emptyTestsFromPaper(HttpServletRequest request, Integer fkPaper) { String token = CookieUtil.readCookie(request); if (StringUtils.isEmpty(token)) { return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(), "请先登录"); } String teacherStr = RedisPoolUtil.get(token); Teacher teacher = JacksonUtil.stringToObj(teacherStr, Teacher.class); if (teacher == null) { return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(), "请先登录"); } if (Constant.Role.ROLE_TEACHER.equals(teacher.getRole())) { return paperService.emptyTestsFromPaper(fkPaper, teacher); } return ServerResponse.createByErrorMessage("不是教师,无法操作");
|
——————————PayStart——————————
项目链接:
https://javayms.github.io?id=401422322105200ks
https://javayms.pages.dev?id=401422322105200ks