SpringBoot+Mybatis 实现人力资源管理系统

本文档详细介绍了一个人力资源管理系统的技术实现,包括SpringSecurity+JWT的身份认证和授权,AOP记录接口访问日志,WebSocket实现实时聊天,Redis缓存登录验证码以及发送邮件等功能。系统采用SpringBoot作为基础,前端使用Vue和ElementUI,利用Mybatis、Redis、Druid等技术,并通过Spring-Websocket和JwChat实现在线聊天功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

本项目是基于开源项目江南一点雨/vhr进一步完善优化。

一 项目介绍

简介

一个企业人力资源管理系统,主要功能有员工个人信息、工资管理、部门管理、职位管理,以及员工的培训、考核、部门调动、奖励惩罚,系统角色分为管理员、人事专员、人事经理,不同角色有不同权限,管理员有全部权限,人事专员有人事管理、员工信息、工资管理权限,而人事经理比人事专员多了部门和职位管理权限。

功能结构图

在这里插入图片描述

技术选型
后端
技术说明版本
SpringBoot容器+MVC框架2.5.4
Spring Security认证和授权框架5.5.2
JWTJSON WEB TOKEN0.9.0
MybatisORM框架3.4.6
Mybatis-Generator数据层代码生成1.3.3
Mysql数据库5.7
Druid数据库连接池1.2.0
Redis分布式缓存5.0.14
FastJsonJSON 工具1.2.3
JacksonJSON 工具2.10.1
Lombok简化对象封装工具1.18.10
Swagger-UI文档生成工具3.0.0
PageHelper分页插件5.1.8
Spring-Websocket实时通信5.3.9
Hibernator-Validator验证框架6.2.0
JDkJAVA 开发环境1.8
Maven项目管理工具3.6.1
Tomcat运行环境9.0
Git版本控制工具2.32.0
IDEA开发工具2021.1.3
Postman接口测试工具9.0
前端
技术说明版本
Vue前端框架2.6
Vue-router路由框架3.0.7
Vuex全局状态管理框架3.4.0
ElementUI前端UI框架2.15
Axios前端HTTP框架0.21.3
Echarts图表框架5.2.1
JwChat聊天组件1.0.1
Node.js运行环境12.18
Vue/cli脚手架工具4.5
VS Code开发工具1.58

二 技术要点

Spring Security+JWT 实现认证授权

参考http://www.macrozheng.com/#/architect/mall_arch_04,http://www.macrozheng.com/#/architect/mall_arch_05

问题:后端需要保证接口访问的安全性,需要校验请求者的身份以及判断是否具有该权限

解决:

  • 登录时后端生成token,返回给前端,token包含用户名、token的生成时间和过期时间
  • 每次调用接口需要http请求头添加一个Authorization字段,存放token
  • 后端先判断请求头的token是否存在,然后判断是否过期,再判断当前用户是否有相应权限,有的话则允许访问,否则拒绝访问
<!--SpringSecurity依赖配置-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

<!--JWT(Json Web Token)登录支持-->
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt</artifactId>
    <version>0.9.0</version>
</dependency>
# 自定义jwt key
jwt:
  tokenHeader: Authorization #JWT存储的请求头
  secret: xxx #JWT加解密使用的密钥
  expiration: 604800 #JWT的超期限时间(60*60*24)
  tokenHead: Bearer  #JWT负载中拿到开头

在这里插入图片描述

AOP实现记录接口访问日志

参考http://www.macrozheng.com/#/technology/aop_log

问题:如果在每个控制器加入一段记录日志的代码,那么会导致代码冗余,而且与业务代码不能解耦

解决:使用AOP制作前置和后置通知,登录接口用后置通知,增、删、改接口用前置通知,实现记录请求客户端、请求方法、请求参数的功能

<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
    <version>1.8.13</version>
</dependency>

在这里插入图片描述

Websocket协议实现在线聊天

参考https://blog.youkuaiyun.com/qq_41603102/article/details/82492040, https://zhengkai.blog.youkuaiyun.com/article/details/80275084

问题:在线聊天需要持久连接,全双工通信,如果用轮询方式会十分耗费网络资源

解决:使用websocket协议,一旦连接成功,便可以一直保持通信,直到断开连接,很适合在线聊天的业务场景

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-websocket</artifactId>
</dependency>

在这里插入图片描述

Redis缓存登录验证码

参考http://www.macrozheng.com/#/architect/mall_arch_03

问题:验证码发给前端后,需要保存以便后续校验,而且需要设置过期时间,时间到了就要删掉,使用mysql的话读写速度较慢

解决:使用redis做缓存,提高访问速度

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
spring:
  # redis配置
  redis:
    host: localhost # Redis服务器地址
    database: 0 # Redis数据库索引(默认为0)
    port: 6379 # Redis服务器连接端口
    password: # Redis服务器连接密码(默认为空)
    jedis:
      pool:
        max-active: 8 # 连接池最大连接数(使用负值表示没有限制)
        max-wait: -1ms # 连接池最大阻塞等待时间(使用负值表示没有限制)
        max-idle: 8 # 连接池中的最大空闲连接
        min-idle: 0 # 连接池中的最小空闲连接
    timeout: 3000ms # 连接超时时间(毫秒)

# 自定义redis key
redis:
  key:
    prefix:
      authCode: "verifyCode:"
    expire:
      authCode: 120 # 验证码超期时间

在这里插入图片描述

发送邮件

参考http://www.javaboy.org/2020/0101/springboot-mail.html

问题:hr添加员工时给新入职的员工发送邮件,邮件要按照一定格式

解决:

  • 申请邮箱客户端(我用的是qq邮箱)授权码
  • 使用 Thymeleaf 作邮件模板
  • 使用 JavaMailSender 来发送邮件
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>
spring:
  mail:
    host: smtp.qq.com #配置 SMTP 服务器地址
    port: 587 #SMTP 服务器的端口
    username: xxx #配置邮箱用户名
    password: xxx #配置密码,注意,不是真正的密码,而是刚刚申请到的授权码
    default-encoding: utf-8 #默认的邮件编码
    properties:
      mail:
        smtp:
          socketFactoryClass: javax.net.ssl.SSLSocketFactory #配置 SSL 加密工厂
        debug: false #关闭 DEBUG 模式

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值