后台管理项目介绍
项目下两个模块(admin/api),本次主要讲Api模块
源项目来自 bootdo
数据库介绍
操作注意事项
1、数据库建表 基础表执行orange(完整版).sql
文件
-
注意字符集类型
utf8mb4
排序规则utf8mb4_general_ci
-
建表必须包含5个字段分别是(
id
,sorting
,created
,modified
,del_flag
) 注意created
与modified
类型 -
创建表SQL
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for [表名]
-- ----------------------------
DROP TABLE IF EXISTS `[表名]`;
CREATE TABLE `[表名]` (
`id` varchar(64) CHARACTER SET utf8mb4 NOT NULL COMMENT '编号',
`sorting` int(9) NULL DEFAULT 100 COMMENT '序号',
`created` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
`modified` datetime(0) NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新时间',
`remarks` varchar(255) CHARACTER SET utf8mb4 NULL DEFAULT NULL COMMENT '备注',
`del_flag` char(1) CHARACTER SET utf8mb4 NULL DEFAULT '0' COMMENT '0:未删除,1:已删除',
[其他字段]
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=COLLATE=utf8mb4_general_ci;
SET FOREIGN_KEY_CHECKS = 1;
- 可以使用数据库管理工具
Navicat
复制通用字段
表中的字段到新表中
2、代码生成与项目运行
-
生成策略设置 注意包路径 注意项目目录结构
-
生成代码的文件夹中
resources->mapper
对应项目中的resources->mybatis
-
将代码导入项目 并检查 Build
-
启动项目不报错则成功
-
业务逻辑 执行数据删除操作
Controller
默认调用Service
的pseudoRemove
和pseudoBatchRemove
默认为伪删除 查看对应的Mapper.xml则一目了然remove
与batchRemove
方法则为物理删除 -
业务逻辑 执行查询操作
com.orange.common.utils.result.Query
类中默认会加上del_flag
参数 赋值0
有特殊要求则调用com.orange.common.utils.result.Query
类中的delete
方法 -
自动生成的Mapper.xml查询排序 默认按照创建时间排序 如果调用
com.orange.common.utils.result.Query
类中的sort
方法则按照sort
方法参数排序 如果需要对多个字段进行排序 则模仿sort
方法自定义自己的排序方式 -
修改
application-dev.yml
文件中的
orange:
uploadPath: [设置自己的本地磁盘路径]
自行百度addResourceHandlers
用法
3、代码测试
- 目录
src->test->java->包路径
- 参照
TestDemo
类
4、字符集问题
- 项目中创建的所有文件以UTF-8编码
5、后台账户分配问题
- 使用开发人员账户 进行分配角色,管理权限
- 客户使用的账户需要创建 并且分配角色 并且分配客户需要的菜单
6、日志输出logback-spring.xml
#绝对路径
<FileNamePattern>
/usr/local/web/server/orange/admin/applog/%d{yyyy-MM-dd}/%d{yyyy-MM-dd}.log
</FileNamePattern>
#相对路径 项目为根路径 打包成jar 需要写绝对路径 输出到jar外面
<FileNamePattern>
applog/%d{yyyy-MM-dd}/%d{yyyy-MM-dd}.log
</FileNamePattern>
7、使用Nginx做代理 获取真实IP 配置
server {
listen 80;
server_name www.赵丽颖.fun 赵丽颖.fun;
location / {
# http自动跳转https
rewrite ^(.*)$ https://$host$1 permanent;
}
}
server {
# 把http和https放在一起访问
# listen 80;
listen 443 ssl;
server_name www.赵丽颖.fun 赵丽颖.fun;
ssl_certificate cert/123456_www.赵丽颖.fun.pem;
ssl_certificate_key cert/123456_www.赵丽颖.fun.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8080/;
}
}
8、待总结
thymeleaf 例子
- 使用三元运算 显示与隐藏
th:style="'display:'+ @{(${owModuleManagement.type} == module_type2 ? 'block':'none')} +';'"
- 下拉框数据渲染 并选中默认值
<select th:field="${owModuleManagement.type}">
<option th:each="module : ${moduleEnum}" th:value="${module.code}" th:text="${module.value}"></option>
</select>
部署
- 将
application-pro.yml uploadPath
改成服务器路径 - 将
logback-spring.xml FileNamePattern
改成该服务器路径 application.yml
引用application-pro.yml
- 使用
maven
打包成jar
将jar
上传到服务器 - 使用命令启动
nohup java -jar orange-2.0.0.jar &
- windows使用命令启动
java -jar ./xxx-2.0.0.jar
- 使用命令查看日志
tail -200f nohup.out
- 使用命令停止 查看进程
ps -ef|grep [jar名称]
杀掉kill -9 PID
目录结构
.
├── java
│ └── com
│ └── orange
│ ├── Application.java 启动类
│ ├── common 公共
│ │ ├── annotation
│ │ ├── aspect
│ │ ├── config
│ │ ├── controller
│ │ ├── dao
│ │ ├── domain
│ │ ├── exception
│ │ ├── listenner
│ │ ├── quartz
│ │ ├── redis
│ │ ├── service
│ │ ├── task
│ │ └── utils
│ └── system 系统核心
│ │
│ └─ 新增模块 自动生成的java 模块 根据模块规则创建文件夹
│
│
└── resources 资源文件
├── application-dev.yml 开发环境配置文件
├── application-pro.yml 生产环境配置文件
├── application.yml 总配置文件
├── config
│ ├── ehcache.xml 缓存
│ └── quartz.properties 定时任务
├── ehcache.xml 缓存
├── generator.properties 代码自动生成 数据库数据类型与Java数据类型对应映射
├── logback-spring.xml 日志
├── mybatis 自动生成的xml放入此目录下 根据模块规则创建文件夹
├── stencilset.json 工作流
├── public 静态文件
│
├── static 静态文件
│ └── js
│ ├── appjs 自动生成的js放入此目录下 根据模块规则创建文件夹
│
└── templates 自动生成的html放入此目录下 根据模块规则创建文件夹
技术选型
1、后端
- 核心框架:Spring Boot
- 安全框架:Apache Shiro
- 模板引擎:Thymeleaf
- 持久层框架:MyBatis
- 数据库连接池:Alibaba Druid
- 缓存框架:Ehcache 、Redis
- 日志管理:SLF4J
- 工具类:Apache Commons、Jackson
2、前端
- JS框架:jQuery
- 客户端验证:JQuery Validation
- 富文本在线编辑:summernote/UEditor
- 数据表格:bootstrapTable
- 弹出层:layer
- 树结构控件:jsTree
4、平台
- 服务器中间件:SpringBoot内置
- 数据库支持:目前仅提供MySql数据库的支持,但不限于数据库
- 开发环境:Java、Idea 、Maven 、Git
安全考虑
- 开发语言:系统采用Java 语言开发,具有卓越的通用性、高效性、平台移植性和安全性。
- 分层设计:(数据库层,数据访问层,业务逻辑层,展示层)层次清楚,低耦合,各层必须通过接口才能接入并进行参数校验(如:在展示层不可直接操作数据库),保证数据操作的安全。
- 双重验证:用户表单提交双验证:包括服务器端验证及客户端验证,防止用户通过浏览器恶意修改(如不可写文本域、隐藏变量篡改、上传非法文件等),跳过客户端验证操作数据库。
- 安全编码:用户表单提交所有数据,在服务器端都进行安全编码,防止用户提交非法脚本及SQL注入获取敏感数据等,确保数据安全。
- 密码加密:登录用户密码进行SHA1散列加密,此加密方法是不可逆的。保证密文泄露后的安全问题。
- 强制访问:系统对所有管理端链接都进行用户身份权限验证,防止用户直接填写url进行访问。