【Spring Boot入门】模拟在线票务系统

前言

最近在学习Spring Boot,之前看有人说学习编程最好的方法就是自己动手写程序,有个前辈推荐自己做一个模拟在线票务系统的服务。我便自己动手做了一个。

该项目的实现采用了Spring Boot + MyBatis,集成Spring Security和JWT实现用户的认证和授权。

项目结构如下:

设计思路

主要有三个对象:用户、票和订单。

用户有ID、用户名、密码、头像在服务器地址URL等个人信息。用户的方法有:注册(/customer/register)、登录(/customer/login)、查看用户资料(/customer/myProfile)、上传头像(/customer/uploadAvatar)。

票有ID、车次、始发站、目的地、出发时间、到达时间、座位类型、座位号、价格、是否被预定及用户ID的属性。方法有:根据始发站、目的地和出发日查找可购买的车次信息(/ticket/search)。这里使用了MyBatis插件PageHelper来做分页查询。

订单的属性有:ID、用户、票。订单的方法有:购票(/order/new)、退票(/order/roll)、查看“我的订单”(/order/myOrder)。购票和退票的过程要使用数据库事务来处理。

GitHub上Release版本 0.9主要实现了以上的功能。1.0集成了Spring Security,使用JWT实现用户的认证和授权。

认证

认证的过程如下:向/login地址发送POST请求,提交包含用户名密码的表单,程序进入JWTLoginFilter的attemptAuthentication方法,接收并解析用户凭证。 然后进入CustomerAuthenticationProvider的authenticate方法将接受到的用户信息与数据库中信息做比较, 如果一致,生成令牌并进入JWTLoginFilter的successfulAuthentication方法,在该方法中生成JWT并将JWT作为response的header返回至前端。

在之后的请求中只要将JWT设置为request header的“Authorization”字段传给后端,后端就可以解析该header获取用户信息。

数据库

数据库名为ticketmanagement,有三张表:customer、ticket、orderform(这里因为order是SQL关键字,表名为order会产生运行时错误)。

customer:

ticket:

orderform:

后续思路

1.SQL优化,数据库操作处理做的还比较粗糙,在高并发操作数据库的情况下可能产生响应时间较长等问题。后续可以通过优化SQL来提高性能。SQL优化这里博主还是掌握的还不是很好,希望有思路和建议的朋友可以在下面留言或者和我联系来帮助我。

2.将用户认证、授权和票务管理服务拆分,做成微服务形式。微服务是当下的热点,有解耦和分布式等优点。也是对自己技术栈的积累。

3.添加邮件服务功能,实现注册成功向注册邮箱发送邮件。

github:https://github.com/Gene1994/TicketManagement

我的微信:kyoccu

原文地址:https://www.cnblogs.com/gene1994/p/9175175.html

时间: 2024-10-01 07:31:34

【Spring Boot入门】模拟在线票务系统的相关文章

java Spring Boot企业微信点餐系统

 java Spring Boot企业微信点餐系统 后端开发: 1.2017龙果微服务架构的分布式事务解决方案 2.2017年龙果spring boot 入门实战视频教程-首套中文教程 3.51CTO Spring Boot实战与原理分析视频课程 4.ElasticSearch5视频教程 5.Elasticsearch顶尖高手系列:高手进阶篇(最新第二版) 6.IDEA学习视频 7.Java 微服务实践 - Spring Boot 系列 8.JAVA-ACE-架构师系列视频课程-RocketMQ

Spring Boot 入门之缓存和 NoSQL 篇(四)

原文地址:Spring Boot 入门之缓存和 NoSQL 篇(四) 博客地址:http://www.extlight.com 一.前言 当系统的访问量增大时,相应的数据库的性能就逐渐下降.但是,大多数请求都是在重复的获取相同的数据,如果使用缓存,将结果数据放入其中可以很大程度上减轻数据库的负担,提升系统的响应速度. 本篇将介绍 Spring Boot 中缓存和 NoSQL 的使用.上篇文章<Spring Boot 入门之持久层篇(三)>. 二.整合缓存 Spring Boot 针对不同的缓存

Spring boot入门到精通视频教程

14套java精品高级架构课,缓存架构,深入Jvm虚拟机,全文检索Elasticsearch,Dubbo分布式Restful 服务,并发原理编程,SpringBoot,SpringCloud,RocketMQ中间件,Mysql分布式集群,服务架构,运 维架构视频教程 14套精品课程介绍: 1.14套精 品是最新整理的课程,都是当下最火的技术,最火的课程,也是全网课程的精品: 2.14套资 源包含:全套完整高清视频.完整源码.配套文档: 3.知识也 是需要投资的,有投入才会有产出(保证投入产出比是

Spring boot 入门(四):集成 Shiro 实现登陆认证和权限管理

本文是接着上篇博客写的:Spring boot 入门(三):SpringBoot 集成结合 AdminLTE(Freemarker),利用 generate 自动生成代码,利用 DataTable 和 PageHelper 进行分页显示.按照前面的博客,已经可以搭建一个简单的 Spring Boot 系统,本篇博客继续对此系统进行改造,主要集成了 Shiro 权限认证框架,关于 Shiro 部分,在本人之前的博客(认证与Shiro安全框架)有介绍到,这里就不做累赘的介绍. 此系列的博客为实践部分

Spring Boot 入门(五):集成 AOP 进行日志管理

本篇文章是接着 Spring boot 入门(四):集成 Shiro 实现登陆认证和权限管理写的,按照前面几篇博客的教程,可以搭建一个简单的项目,主要包含了 Pagehelper+MyBatis 分页查询,Generator 代码自动生成器,Shiro登录及权限管理.本篇博客主要是集成 AOP 进行日志管理 1.导入 jar 包 1 <!-- aop --> 2 <dependency> 3 <groupId>org.springframework.boot</g

《深入实践Spring Boot》第1章 Spring Boot入门

目录 第1章 Spring Boot入门 1.1 配置开发环境 1.1.1 安装JDK 1.1.2 安装InterlliJ IDEA 1.1.3 安装Apache Maven 1.1.4 安装Git客户端 1.2 创建项目工程 1.2.1 使用Maven新建项目 1.2.2 使用Spring Initializr新建项目 1.3 使用Spring Boot 1.3.1 Maven依赖管理 1.3.2 一个简单的实例 1.4 运行与发布 1.4.1 在IDEA环境中运行 1.4.2 将应用打包发布

Spring Boot 入门(七):集成 swagger2

本片文章是基于前一篇写的,<Spring Boot 入门(六):集成 treetable 和 zTree 实现树形图>,本篇主要介绍了spring boot集成swagger2.关于swagger的介绍,自行谷歌.我这里有在网上购买的相关视频资料,有需要可以呼叫我. 1.引入相关依赖 1 <dependency> 2 <groupId>io.springfox</groupId> 3 <artifactId>springfox-swagger2&

Spring Boot入门(一)

Spring Boot入门 一.第一个Spring Boot程序 1.导入springBoot 依赖 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.9.RELEASE</version> </parent> <depe

161103、Spring Boot 入门

Spring Boot 入门 spring Boot是Spring社区较新的一个项目.该项目的目的是帮助开发者更容易的创建基于Spring的应用程序和服务,让更多人的人更快的对Spring进行入门体验,让Java开发也能够实现Ruby on Rails那样的生产效率.为Spring生态系统提供了一种固定的.约定优于配置风格的框架. Spring Boot具有如下特性: 为基于Spring的开发提供更快的入门体验 开箱即用,没有代码生成,也无需XML配置.同时也可以修改默认值来满足特定的需求. 提