🍅联系方式QQ------------------------1457321681----------------------------------------------🍅
博主介绍:✌10年以上互联网大厂项目经理、高校兼职讲师、创业导师、csdn特邀作者✌
👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟
2022-2024年最全的计算机软件毕业设计选题大全:1000个热门选题推荐✅
Java项目精品实战案例《100套》
Java微信小程序项目实战《100套》
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人
开发系统:Windows10
架构模式:MVC/前后端分离
JDK版本:Java JDK1.8
开发工具:IDEA
数据库版本: mysql5.7
数据库可视化工具: navicat for mysql
服务器:SpringBoot自带 apache tomcat
2.使用技术
Springboot、Eureka、Gateway、Redis、Mysql等
3.系统截图
3.1后台首页
3.2讲师管理
3.3发布课程
3.4 轮播图管理
3.5订单管理
3.6用户端首页
3.7课程详情
3.8观看视频
3.9购买课程
3.10全部课程
4.部分代码
4.1 权限过滤器
package com.online.edu.gateway.filter;
@Component
@Slf4j
public class LoginFilter extends ZuulFilter {
@Autowired
private StringRedisTemplate stringRedisTemplate;
//定义过滤器的类型
@Override
public String filterType() {
return "pre"; //pre类型过滤器
}
//过滤器执行顺序,返回值越小,越先执行
@Override
public int filterOrder() {
return 0;
}
//决定是否执行下面的run方法
//如果返回false,表示过滤器放行,否则拦截,执行run
@Override
public boolean shouldFilter() {
// 判断:访问的路径包含/vidservice/vod/getPlayAuth 进行校验
//1 获取请求路径的 uri
RequestContext currentContext = RequestContext.getCurrentContext();
HttpServletRequest request = currentContext.getRequest();
String requestURI = request.getRequestURI();
// System.out.println(“uri”+requestURI);
String palyUrl = "/vidservice/vod/getPlayAuth";
String courseInfo = "/online/frontcourse/getCourseInfo";
//2 根据获取请求路径判断,路径中是否包含 /vidservice/vod/getPlayAuth
if (!StringUtils.isEmpty(courseInfo) && requestURI.contains(courseInfo)){
//3 如果包含,进行验证操作,return true
return true; //执行run方法,进行拦截
}
return false;
}
// 过滤器的执行逻辑
@Override
public ResultVO run() throws ZuulException {
System.out.println(“run方法执行了”);
RequestContext currentContext = RequestContext.getCurrentContext();
HttpServletRequest request = currentContext.getRequest();
String authorization = request.getHeader(“Authorization”);
System.out.println("authorization==" +authorization);
//登录校验逻辑
Claims claims = JwtUtils.checkJWT(authorization);
String accesstoken = (String)claims.get("accesstoken");
String userInfo = stringRedisTemplate.opsForValue().get(accesstoken);
if (StringUtils.isEmpty(userInfo)){
log.info("用户未登录");
// ResultVOUtil.error(10012,“未登录”);
// //为false时,不会继续向后执行
currentContext.setSendZuulResponse(false);
// //设置不能访问状态码
// currentContext.setResponseStatusCode(HttpStatus.SC_UNAUTHORIZED);
currentContext.setResponseBody(“{“status”:401,“msg”:“用户未登录 !”}”);
currentContext.getResponse().setContentType(“text/html;charset=UTF-8”);
}else{
log.info(“用户已登录”);
}
return null;
}
}
4.2 教师管理
package com.online.edu.gdpuxjl.controller;
/**
-
- 讲师 前端控制器
- @author 许JIAN林
- @since 2019-12-03
*/
@RestController
@RequestMapping(“/online/teachers”)
@CrossOrigin //跨域
@Slf4j
public class EduTeacherController {
@Autowired
private EduTeacherService eduTeacherService;
/**
* 根据 ID 查找教师
*/
@ApiOperation(value = "查找所有讲师")
@GetMapping()
public ResultVO findTeacher() {
log.info("【查询讲师】 查询所有讲师");
List<EduTeacher> teacherList = eduTeacherService.list(null);
return ResultVOUtil.success(teacherList);
}
/**
* 根据 ID 查找教师
*/
@ApiOperation(value = "查找讲师")
@GetMapping("{id}")
public ResultVO findTeacher(@ApiParam(value = "讲师ID")
@PathVariable String id) {
log.info("【查询讲师】 查询ID为" + id + "的讲师");
EduTeacher eduTeacher = eduTeacherService.getById(id);
if (eduTeacher != null) {
return ResultVOUtil.success(eduTeacher);
} else {
return ResultVOUtil.error(ResultEnum.TEACHER_NOT_EXIST);
}
}
/**
* 根据 ID 修改教师信息
*/
@ApiOperation(value = "修改讲师信息")
@PutMapping("{id}")
public ResultVO updateTeacher(
@ApiParam(value = "讲师ID")
@PathVariable String id,
@ApiParam(value = "所要修改的信息")
@RequestBody EduTeacher eduTeacher) {
log.info("【修改讲师信息】 修改id为" + id + "的讲师");
int i = eduTeacherService.updateTeacher(id, eduTeacher);
if (i == 1) {
return ResultVOUtil.success();
} else {
return ResultVOUtil.error(ResultEnum.TEACHER_NOT_EXIST);
}
}
@ApiOperation(value = "添加讲师")
@PostMapping()
public ResultVO addTeacher(
@ApiParam(name = "teacherQuery", value = "查询对象")
@RequestBody EduTeacher eduTeacher) {
log.info("【保存讲师】 保存名字为" + eduTeacher.getName() + "的讲师");
boolean save = eduTeacherService.save(eduTeacher);
if (save) {
return ResultVOUtil.success();
} else {
return ResultVOUtil.error(1, "失败");
}
}
/**
* 根据不同的条件查询讲师,分页显示 。
*/
@ApiOperation(value = "分页讲师列表")
@PostMapping("{page}/{limit}")
public ResultVO pageList(
HttpServletResponse response,
@ApiParam(name = "page", value = "当前页码", required = true)
@PathVariable Long page,
@ApiParam(name = "limit", value = "每页记录数", required = true)
@PathVariable Long limit,
@ApiParam(name = "teacherQuery", value = "查询对象", required = false)
@RequestBody(required = false) TeacherQuery queryTeacher) {
log.info("获取讲师信息");
//封装page分页对象
Page<EduTeacher> pageParam = new Page<>(page, limit);
IPage<EduTeacher> eduTeacherIPage = eduTeacherService.pageQuery(pageParam, queryTeacher);
HashMap<Object, Object> map = new HashMap<>();
map.put("total", eduTeacherIPage.getTotal());
map.put("items", eduTeacherIPage.getRecords());
return ResultVOUtil.success(map);
}
/**
* 根据 ID 删除教师
*/
@ApiOperation(value = "删除讲师")
@DeleteMapping("{id}")
public ResultVO removeById(@PathVariable String id) {
log.info("【删除讲师】 删除id为:" + id + "的讲师");
if (eduTeacherService.removeById(id)) {
return ResultVOUtil.success();
} else {
return ResultVOUtil.error(ResultEnum.ERROR);
}
}
}
4.3 课程管理
package com.online.edu.gdpuxjl.controller;
/**
* <p>
* 课程 前端控制器
* </p>
*
*/
@Slf4j
@CrossOrigin
@RestController
@RequestMapping("/online/course")
public class EduCourseController {
@Autowired
private EduCourseService eduCourseService ;
@Autowired
private EduCourseDescriptionService eduCourseDescriptionService ;
//最终发布课程的方法,修改课程状态
@ApiOperation("根据课程id修改课程状态")
@GetMapping("publishCourse/{courseId}")
public ResultVO publishCourse(@PathVariable String courseId) {
EduCourse eduCourse = new EduCourse();
eduCourse.setId(courseId);
eduCourse.setStatus("Normal");
boolean result = eduCourseService.updateById(eduCourse);
if(result) {
return ResultVOUtil.success();
} else {
return ResultVOUtil.error(ResultEnum.ERROR);
}
}
//根据课程id查询课程详细信息
@ApiOperation("根据课程id查询课程详细信息")
@GetMapping("getAllCourseInfo/{courseId}")
public ResultVO getAllCourseInfo(@PathVariable String courseId) {
log.info("根据课程id查询课程详细信息");
CourseInfoVO courseInfoDto = eduCourseService.getCourseInfoAll(courseId);
return ResultVOUtil.success("courseInfo",courseInfoDto);
}
//修改课程的方法
@PostMapping("{id}")
public ResultVO updateCourseInfo(@PathVariable String id,
@RequestBody CourseInfoDTO courseInfoDTO) {
Boolean flag = eduCourseService.updateCourse(courseInfoDTO);
if(flag) {
return ResultVOUtil.success();
} else {
return ResultVOUtil.success();
}
}
/**
* 根据课程id查询课程
* @param id
* @return
*/
@ApiOperation("根据课程id查询课程信息")
@GetMapping("{id}")
public ResultVO getCourseById(@ApiParam(name = "id", value = "课程id", required = true)
@PathVariable String id){
log.info("【查询课程信息】 查询课程id为"+ id +"的信息");
CourseInfoDTO courseInfoDTO = eduCourseService.findCourseById(id);
return ResultVOUtil.success(courseInfoDTO);
}
/**
* 根据课程id查询课程,提供给支付模块的接口
* @param courseid
* @return
*/
@ApiOperation("根据课程id查询课程信息")
@GetMapping("getCourseInfo/{courseid}")
public CourseInfoDTO getCourseInfoById(@ApiParam(name = "courseid", value = "课程id", required = true)
@PathVariable String courseid){
log.info("【查询课程信息】 查询课程id为"+ courseid +"的信息");
CourseInfoDTO courseInfoDTO = eduCourseService.findCourseById(courseid);
return courseInfoDTO;
}
/**
* 3.保存课程信息
* @param courseInfoDTO
* @return
*/
@ApiOperation("保存课程信息")
@PostMapping
public ResultVO saveCourse(@ApiParam(name = "CourseInfoDTO", value = "课程信息", required = false)
@RequestBody( required = false) CourseInfoDTO courseInfoDTO ) {
String courseId = eduCourseService.saveCourseInfo(courseInfoDTO);
HashMap<String, String> map = new HashMap<>();
map.put("courseId", courseId);
return ResultVOUtil.success(map);
}
/**
* 2. 根据id删除课程
* @param id
* @return
*/
@ApiOperation("根据id删除课程")
@DeleteMapping("{id}")
public ResultVO deleteCourseId(@PathVariable String id) {
log.info("【删除课程】 删除id为:"+id+"的课程");
if( eduCourseService.removeCourseId(id) ){
return ResultVOUtil.success();
}else{
return ResultVOUtil.error( ResultEnum.ERROR);
}
}
/** 1 .根据不同的条件进行查新,分页显示 。*/
@ApiOperation(value = "分页讲师列表")
@PostMapping("{page}/{limit}")
public ResultVO pageList(
@ApiParam(name = "page", value = "当前页码", required = true)
@PathVariable Long page,
@ApiParam(name = "limit", value = "每页记录数", required = true)
@PathVariable Long limit,
@ApiParam(name = "CourseQuery", value = "查询对象", required = false)
@RequestBody( required = false) CourseQuery CourseQuery){
log.info("分页获取课程列表信息");
//封装page分页对象
Page<EduCourse> pageParam = new Page<>(page, limit);
IPage<EduCourse> eduCrouseIPage = eduCourseService.pageQuery(pageParam, CourseQuery);
HashMap<Object, Object> map = new HashMap<>();
map.put("total", eduCrouseIPage.getTotal());
map.put("items", eduCrouseIPage.getRecords());
return ResultVOUtil.success(map);
}
}
## 4.4核心配置文件
```bash
# 服务端口
server.port=8077
# 服务名
spring.application.name=edu-gdpuxjl
# 环境设置:dev、test、prod
spring.profiles.active=dev
# mysql数据库连接
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/online?characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
#热加载生效 true为生效,fals为关闭
spring.devtools.restart.enabled=false
# Hikari是Spring Boot 2.0之后默认整合的数据库连接池,比druid更快的数据库连接池
# 数据源类型
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
# 连接池名称,默认HikariPool-1
spring.datasource.hikari.pool-name=GuliHikariPool
# 最大连接数,小于等于0会被重置为默认值10;大于零小于1会被重置为minimum-idle的值
spring.datasource.hikari.maximum-pool-size=12
# 连接超时时间:毫秒,小于250毫秒,否则被重置为默认值30秒
spring.datasource.hikari.connection-timeout=60000
# 最小空闲连接,默认值10,小于0或大于maximum-pool-size,都会重置为maximum-pool-size
spring.datasource.hikari.minimum-idle=10
# 空闲连接超时时间,默认值600000(10分钟),大于等于max-lifetime且max-lifetime>0,会被重置为0;不等于0且小于10秒,会被重置为10秒。
# 只有空闲连接数大于最大连接数且空闲时间超过该值,才会被释放
spring.datasource.hikari.idle-timeout=500000
# 连接最大存活时间.不等于0且小于30秒,会被重置为默认值30分钟.设置应该比mysql设置的超时时间短
spring.datasource.hikari.max-lifetime=540000
#连接测试查询
spring.datasource.hikari.connection-test-query=SELECT 1
#mybatis日志
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
spring.jackson.date-format= yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone= GMT+8
spring.jackson.default-property-inclusion=non_null
#配置mapper xml文件的路径
mybatis-plus.mapper-locations=classpath:com/online/edu/gdpuxjl/mapper/xml/*.xml