@目录
1 概述
1.1 简介
一个简单的小型薪酬管理系统,前端JavaFX+后端Spring Boot,功能倒没多少,主要精力放在了UI和前端的一些逻辑上面,后端其实做得很简单。
主要功能:
- 用户注册/登录
- 验证码找回密码
- 用户修改信息,修改头像
- 柱状图形式显示薪酬
- 管理员管理用户,录入工资
1.2 响应流程
sequenceDiagram 用户请求 ->> 封装及提取数据: 发送请求 封装及提取数据->> Gson转换: List/Map/Worker Gson转换 ->> OkHttp : String OkHttp -->> Gson转换:转换返回数据 Note left of Gson转换: 封装及提取数据:根据<br/>ReturnCode判断状态<br>码并从中提取所<br/>需要的结果 Gson转换 -->> 封装及提取数据: 封装及提取数据 -->> 用户请求:更新UI sequenceDiagram OkHttp ->> 后端Controller层: 发送到对应url 后端Controller层 ->> 后端Controller层:日志记录 后端Controller层 ->> service层: 处理业务逻辑 service层 ->> 持久层: 持久化数据 service层 -->> 后端Controller层: 返回处理结果 后端Controller层 -->> OkHttp: 封装ReturnCode为String1.3 演示
登录界面:
用户界面:
管理员界面:
2 环境
- IDEA 2020.1
- 本地JDK+服务器JDK:OpenJDK 11
- OepnJFX 11
- Spring Boot 2.3.0(Spring Boot的更新速度真是太快了)
- Tomcat 9.0.33
- MySQL 8.0.17
8 注意事项
8.1 路径问题
对于资源文件千万千万不要直接使用什么相对路径或绝对路径,比如:
String path1 = "/xxx/xxx/xxx/xx.png";
String path2 = "xxx/xx.jpg";
这样会有很多问题,比如有可能在IDEA中直接运行与打成jar包运行的结果不一致,路径读取不了,另外还可能会出现平台问题,众所周知Linux的路径分隔符与Windows的不一致。所以,对于资源文件,统一使用如下方式获取:
String path = getClass().getResource("/image/xx.png");
其中image
直接位于resources
资源文件夹下。其他类似,也就是说这里的/
代表在resources
下。
8.2 HTTPS
默认没有提供HTTPS,证书文件没有摆上去,默认走的是本地8080端口,有关OkHttp使用HTTPS的文章有不少,但是大部分都是仅仅写了前端如何配置HTTPS的,没有提到后端如何部署,可以参考笔者的这篇文章,包含Tomcat的配置教程。
8.3 配置文件加密
配置文件使用了jasypt-spring-boot开源组件进行加密,设置口令可以有三种方式设置:
- 命令行参数
- 应用环境变量
- 系统环境变量
目前最新的版本为3.0.3(2020.05.31更新3.0.3 ,笔者之前使用3.0.2的版本进行加密时本地测试没问题,但是部署到服务器上老是提示找不到口令,无奈只好使用旧一点的2.x版本,但是新版本出了后笔者尝试过部署到本地Tomcat没有问题但是没有部署到服务器上),建议使用最新版本进行部署:
毕竟前后跨度挺大的,虽然说这是小的bug修复,但是还是建议试试,估计不会有3.0.2的问题了。
另外对于含有中文的字段记得进行编码转换:
str = new String(str.getBytes(StandardCharsets.ISO_8859_1),StandardCharsets.UTF_8);)
另外笔者已写好了测试文件,直接首先替换掉配置文件原来的密文,填上明文重新加密:
注意如果没有在配置文件中设置jasypt.encryptor.password
的话可以在运行配置中设置VM Options(建议不要把口令直接写在配置文件中,当然这个默认是使用PBE加密,非对称加密可以使用jasypt.encryptor.private-key-string
或jasypt.encryptor.private-key-location
):
8.4 键盘事件
添加键盘事件可以使用如下代码:
scene.getAccelerators().put(new KeyCodeCombination(KeyCode.ENTER), ()->{xxx});
//getAccelerators返回ObservableMap<KeyCombination, Runnable>
响应之前需要让parent获取焦点:
parent.requestFocus();
8.5 数据库
默认使用的数据库名为app_test
,用户名test_user
,密码test_password
,resources
下有一个init.sql
,直接使用MySQL导入即可。
8.6 验证码
默认没有自带验证码功能,由于涉及隐私问题故没有开放,需要的话可以参考笔者的腾讯云短信API使用或者自行搜索其他短信验证API。一些写在配置文件中的API需要的密钥等信息强烈建议加密。
9 源码
前后端完整代码,带README.md说明:
- github
- 码云
10 参考
1、CSDN-maven-shade-plugin介绍及使用
2、CSDN-Maven3种打包方式之一maven-assembly-plugin的使用
3、知乎-制作包含Java 11和JavaFX的JRE
4、CSDN-使用exe4j将java文件打成exe文件运行详细教程
5、Github-jasypt-spring-boot issue
6、w3cschool-JavaFX
7、简书-Linux Tomcat+Openssl单向/双向认证
如果觉得文章好看,欢迎点赞。
同时欢迎关注微信公众号:氷泠之路。