Coder Social home page Coder Social logo

kurochan1998 / student-information-administration-system Goto Github PK

View Code? Open in Web Editor NEW
115.0 3.0 47.0 40.86 MB

大学生信息管理系统——初学路上自己摸索实践的项目

Java 99.57% CSS 0.09% Ruby 0.01% TSQL 0.34%
intellij spring-mvc spring mybatis redis mysql tomcat log4j maven layui

student-information-administration-system's Introduction

Brief Introduction

这个项目是一个大学生信息管理系统,提供用户级别的登录注册资料管理,信息查询,信息修改(管理员权利),简单的数据可视化分析等功能,也有基本的安全性保障

Release Notes

RedisSpringAOP不太熟的初学者,下载v1.1.0版本足够学习或完成课设了~(更多历史版本)

v1.3.0 - 2019.10.14 (Current Version)

版本1.3.0,提升安全性,解决部分安全隐患 :

  • 前端layUi数据表格,增加“筛选列”、“打印”、“导出”上方工具条。
  • 新增CsrfInterceptor拦截器,对修改请求进行CsrfToken的校验,有效防止CSRF攻击
  • 对注册用户信息后端服务层,强化在aop方法中对输入身份属性的校验,对“管理员”字段进行过滤,并抛出异常,防止攻击者拦截请求JSON数据进行修改以获得非法权限;对修改用户信息后端控制层,强化在UserController对应方法中对原身份属性和修改后身份属性的校验,对“管理员”字段进行过滤,防止攻击者拦截请求JSON数据进行修改以获得非法权限。
  • 感谢@Mydearbaby发现的邮箱验证码绕过安全漏洞,在服务端发送验证码时新增一个标志位false,仅当服务端校验正确后才将此标志置true,可以有效避免攻击者拦截请求JSON数据进行修改以绕开验证码。

Technologies Used

前端

  • 前端框架 : layui
  • 数据可视化框架 : echarts

后端

  • IOC容器 : Spring
  • MVC框架 : SpringMVC
  • ORM框架 : Mybatis
  • 缓存技术:Redis
  • 数据库:Mysql
  • 日志框架 : Log4j

Project Structure

├─database                          // 数据库相关文件
│  ├─design				                  // 数据库设计
│  │  └─1
│  └─sql                            // 数据库初始化脚本文件
├─git_screenshot                    // 存放README.md 中的图片
├─src                               // 项目源代码目录
│  ├─main                           //源代码目录
│  │  ├─java
│  │  │  └─com
│  │  │      └─jzy          // java代码目录
│  │  │          ├─controller       // 控制层
│  │  │          ├─dao              // 持久层
│  │  │          ├─dto              // 传输对象
│  │  │          ├─entity           // 实体类
│  │  │          ├─exception        // 自定义异常类
│  │  │          ├─interceptor      // 拦截器
│  │  │          ├─log              // 日志管理
│  │  │          ├─service          // 服务层
│  │  │          │  └─impl          // 服务层接口实现
│  │  │          └─util             // 工具方法
│  │  ├─resources                   // 资源文件目录
│  │  │  └─com
│  │  │      └─jzy
│  │  │          └─mapper           // mybatis对dao接口的xml实现
│  │  └─webapp                      // tomcat前端文件目录
│  │      ├─static                  // 静态资源
│  │      │  ├─custom               // 自定义静态资源
│  │      │  └─plugins              // 插件类静态资源
│  │      └─WEB-INF
│  │          └─page                // jsp页面目录 
│  └─test                           // 测试代码目录
├─README.md                         // help
├─ISSUES.md                         // 问题大全
└─pom.xml                           // maven依赖

Quick Start

1 : 项目开发环境

  • IDE : IntelliJ IDEA 2018.1.7
  • 项目构建工具 : Maven 3.x
  • 数据库 : Mysql 8.0.13
  • Redis:Redis server 3.2.100
  • JDK版本 : jdk 1.8
  • Tomcat版本 : Tomcat 8.x

2 : 项目的初始构建

  1. 在你的Mysql中,运行我提供的database/sql/init.sql 文件(注意mysql版本与sql脚本中部分代码的兼容性), 成功会创建名为mydatabase2的数据库,以及user、student、teacher、class、major、college、title、grade八个表

数据库物理模型如下 :

Snipaste_2019-07-17_09-48-36

  1. 进入src/main/resources修改dbconfig.properties配置文件,把数据库主机、端口、用户名和密码,改为你本地的

    #mysql
    jdbc.driver=com.mysql.cj.jdbc.Driver
    #你的mysql连接url,localhost(本机),端口:3306(默认),数据库:mydatabase2(上一步完成创建)
    jdbc.url=jdbc:mysql://localhost:3306/mydatabase2?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false
    #你的mysql用户名
    jdbc.username=root
    #你的mysql密码
    jdbc.password=123
  2. 进入src/main/resources修改redis.properties配置文件,把数据库主机、端口、用户名和密码,改为你本地的

    #你的redis主机地址
    redis.host=localhost
    #你的redis端口
    redis.port=6379
    #你的redis密码
    redis.password=123
  3. 进入src/main/resources查看log4j.properties,如果有必要可以修改日志输出路径,目前在D盘下,你可选择不修改跳过此步

  4. 使用 IntelliJ IDEA 导入项目,选择Maven项目选项,一路点击next,即可将项目所需依赖导入(若依赖下载速度较慢,请参考百度更改国内镜像)。若有无法引入的依赖,可能是因为maven版本不同或是该依赖已过时不存在于现有maven仓库中,请前往maven官网映入最新的该类型依赖

Snipaste_2019-07-17_08-47-37

Snipaste_2019-07-17_08-49-48

  1. 在 IntelliJ IDEA 中,配置我们的 Tomcat, 然后把使用Maven构建好的项目添加到Tomcat中,操作比较简单,相关方法可以参考百度

  2. 运行项目,进入用户登录页面

Snipaste_2019-05-04_08-02-50

  1. 登录账户/密码(你也可以自行注册一个账户登录哟)
  • 管理员账户:000000000000/admin1
  • 学生账户:516030910429/123456
  • 教师账户:1000000001/123456

3:项目的打包

  • 在配置好maven的环境变量的前提下,在项目根目录下cmd打开命令行,输入 mvn clean package,即可在target/目录下得到相应war包。

  • 将war手动部署到tomcat的webapp目录下(手动部署的方式可以参考百度,这里不详述),也可得到第二步一样的运行结果。

Detailed Functions

用户服务

  • 登录:如上文图所示

  • 注册

    Snipaste_2019-05-04_08-11-21

  • 忘记密码后的重置密码(含发送邮箱验证码)

    Snipaste_2019-05-04_08-12-27

  • 登录进入主页

    Snipaste_2019-09-12_10-35-03

  • 修改基本资料

    Snipaste_2019-07-04_08-19-12

  • 修改密码

    Snipaste_2019-07-17_09-23-03

  • 修改绑定邮箱

    Snipaste_2019-07-17_09-30-38

信息查询

  • 学生信息查询

    • 查询所有信息

      Snipaste_2019-07-17_09-31-05

    • 根据登录用户的用户名(应以学号注册)查询当前个人的学籍信息,若注册时未以真实学号注册,则无法查询到。

      Snipaste_2019-07-17_09-32-12

    • 模糊查询搜索

      Snipaste_2019-07-17_09-32-47

  • 教师信息查询:类似学生信息查询,图略

  • 班级信息查询:类似学生信息查询,图略

  • 专业&学院信息查询:类似学生信息查询,图略

信息修改

  • 学生信息修改

    • 此功能必须以管理员用户身份登录,否则会跳转至异常页面

      Snipaste_2019-05-04_08-32-13

    • 编辑信息

      Snipaste_2019-07-17_09-33-51

    • 添加

      Snipaste_2019-07-17_09-34-24

    • 单条、多条删除

      Snipaste_2019-07-17_09-34-56

  • 教师信息修改:类似学生信息修改,图略

  • 班级信息修改:类似学生信息修改,图略

  • 专业&学院信息修改:类似学生信息修改,图略

拓展功能

  • 学生男女比可视化

Snipaste_2019-07-17_09-36-37

  • 学生人数比可视化

Snipaste_2019-07-17_09-37-17

Snipaste_2019-07-26_17-10-43

  • 师资力量可视化

    Snipaste_2019-07-26_17-12-36

Update History

v1.2.0 - 2019.9.12

版本1.2.0,更新如下内容 :

  • 修复了前端编辑添加弹窗在不同分辨率客户机上的显示大小问题
  • 新增Redis技术,用以缓存用户名密码,用户错误登录次数限制,邮箱验证码等等
  • 新增连续输错用户名密码超过一定次数后的限制时间
  • 更改了邮箱验证码有效时间的实现方式,由服务端java实现改为redis过期时间实现
  • 提升了服务端的安全性和新增异常处理机制,用aop实现入参的校验,对不合法的请求及其参数值用日志记录,并抛出异常
  • 优化了util包等源代码的结构,增强了可拓展性

Download: https://github.com/KuroChan1998/Student-Information-Administration-System/tree/v1.2.0

v1.1.0 - 2019.7.27

版本1.1.0,更新如下内容 :

  • 优化数据表结构,对原有的表的部分字段进行了修改,并增加了title和grade两个表
  • 优化sql语句效率
  • 优化前端查询界面及查询方式,使其更加全面,对用户友好
  • 更新登录界面记住密码的cookie设置
  • 更新邮箱验证码服务,增加了验证码有效时间
  • 优化源代码结构,增强了规范性和可拓展性

Download: https://pan.baidu.com/s/1yHjrk7gAycHRFapU_Waf4g

v1.0.0 - 2019.5.19

StuInfoAdmin-v1.0.0 的一切准备工作似乎都已到位。发布之弦,一触即发。 不枉近百个日日夜夜与之为伴。因小而大,因弱而强。

无论它能走多远,抑或如何支撑?至少我曾倾注全心,无怨无悔

Download: https://pan.baidu.com/s/1piVQnIFdz_BIoszIEzAJwQ

Contact me

欢迎提出意见与建议~

student-information-administration-system's People

Contributors

googtech avatar kurochan1998 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

student-information-administration-system's Issues

查看班主任bug

班级信息修改里点击查看班长详情和班主任详情是空白

关于可视化功能报错,无法显示

关于可视化功能报错,无法显示

有的同学反反映可视化图表功能模块报错,无法显示。

原因

我的mysql存储过程定义者为root`@`%,其中%表示所有主机可调用,而有的同学中mysql的root用户的host字段不是%而是localhost。
sqlCREATE DEFINER=`root`@`%` PROCEDURE `count_stu_percent`(IN type_ varchar(50), IN college_name_ varchar(50), IN major_name_ varchar(50))

解决

查看数据库mysql.user表中host和user字段信息
mysql> select host, user from mysql.user;
如果root用户的host字段值为localhost或者不是%,则与我的init.sql中的定义冲突,采用如下方式解决

解决方法一

in file init.sql

  • line 288
    sqlCREATE DEFINER=`root`@`%` PROCEDURE `count_stu_percent`(IN type_ varchar(50), IN college_name_ varchar(50), IN major_name_ varchar(50))
    更改root`@`%root`@`localhost
  • line 328
    sqlCREATE DEFINER=`root`@`%` PROCEDURE `count_tea_percent`(IN type_ varchar(50), IN college_name_ varchar(50), IN major_name_ varchar(50))
    更改root`@`%root`@`localhost
  • 最后删除数据库mydatabase2,重新导入脚本init.sql

解决方法二

更改mysql.user表
在mysql命令行中只执行如下命令
mysql> use mysql;
mysql> update user set host = '%' where user = 'root';
mysql> select host, user from user;
mysql> flush privileges;
重启项目

渗透测试问题发现

通过粗略的测试,该网站存在以下两个主要安全问题:
1、邮箱验证码绕过:在执行敏感操作时需要输入邮箱验证码,但可通过修改服务器返回包中的VeriftyCode的值绕过验证码的验证执行操作。
2、文件重复上传:在用户信息界面上传头像时,可以重复发送数据包,可造成服务器资源大量占用,引起安全问题。

图表无法显示。

<script type="text/javascript" src="http://echarts.baidu.com/gallery/vendors/echarts/echarts.min.js"></script>链接地址无效。求解

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.