后台管理项目介绍

Administrator
发布于 2020-09-17 / 745 阅读 / 1 评论 / 0 点赞

后台管理项目介绍

后台管理项目介绍

项目下两个模块(admin/api),本次主要讲Api模块

源项目来自 bootdo

img-8b18dc50d427c2431d0ce2147e2c7b8d

数据库介绍

操作注意事项

1、数据库建表 基础表执行orange(完整版).sql文件

  • 注意字符集类型 utf8mb4 排序规则utf8mb4_general_ci

  • 建表必须包含5个字段分别是(id,sorting,created,modified,del_flag) 注意createdmodified类型

  • 创建表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默认调用ServicepseudoRemovepseudoBatchRemove 默认为伪删除 查看对应的Mapper.xml则一目了然 removebatchRemove方法则为物理删除

  • 业务逻辑 执行查询操作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打包成jarjar上传到服务器
  • 使用命令启动 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

安全考虑

  1. 开发语言:系统采用Java 语言开发,具有卓越的通用性、高效性、平台移植性和安全性。
  2. 分层设计:(数据库层,数据访问层,业务逻辑层,展示层)层次清楚,低耦合,各层必须通过接口才能接入并进行参数校验(如:在展示层不可直接操作数据库),保证数据操作的安全。
  3. 双重验证:用户表单提交双验证:包括服务器端验证及客户端验证,防止用户通过浏览器恶意修改(如不可写文本域、隐藏变量篡改、上传非法文件等),跳过客户端验证操作数据库。
  4. 安全编码:用户表单提交所有数据,在服务器端都进行安全编码,防止用户提交非法脚本及SQL注入获取敏感数据等,确保数据安全。
  5. 密码加密:登录用户密码进行SHA1散列加密,此加密方法是不可逆的。保证密文泄露后的安全问题。
  6. 强制访问:系统对所有管理端链接都进行用户身份权限验证,防止用户直接填写url进行访问。

评论