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

前言

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

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

    项目结构以下:github

 

设计思路

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

    用户有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

相关文章
相关标签/搜索