1、开源项目源码地址

2、项目概述

简述:

wetech-admin是基于Spring Boot 2.0 + Mybatis-ext + shiro + Vue 的轻量级后台管理系统,适用于中小型项目的管理后台,支持按钮级别的权限控制,系统具有最基本的用户管理、角色管理、权限管理等通用性功能,企业或个人可直接在此基础上进行开发,扩展,添加各自的需求和业务功能。

界面介绍:

主要包含登录界面主页监控大盘用户管理界面个人管理界面

开源项目管理软件java版 开源项目管理平台_java


开源项目管理软件java版 开源项目管理平台_vue.js_02

3、项目文件结构

开源项目管理软件java版 开源项目管理平台_java_03


该项目是前后端分离项目,但后端服务模块和前端服务模块放在同一个父模块下,本次学习主要学习后端服务部分。wetech-admin-server整体结构如下图:

开源项目管理软件java版 开源项目管理平台_开源项目管理软件java版_04


可见基本还是遵循controller + service + mapper + util + 各种POJO的形式设计后端模块,在此基础上增加的特定功能的支持,那么我们从上到下依依介绍:

aspect

切面类,这里主要是为了日志打印时增加提示,显示调用哪个接口以及计算执行所花时间,并且可以通过在接口添加自定义注解“@LogIgnore”来忽略部分接口。

开源项目管理软件java版 开源项目管理平台_开源项目管理软件java版_05

controller

控制层,定义了后端服务的各种API入口,该项目主要包含5种API:
indexController:当前用户的界面和操作按钮管理。
LoginController:登录和注销API
PermissionController:权限管理
RoleController:角色管理
UserController:用户管理

event

事件监听器设置(待补充)

exception

自定义异常类(待补充)

mapper

DAO层,分别执行用户、角色、权限数据的CRUD操作。

model

各种实体的定义

service

service层,处理用户、角色、权限的逻辑控制外,还包含一些工具类

shiro

权限管理框架的设置和自定义。

swagger

api文档界面的配置

util

工具类

WebConfig:

WetechAdminApplication:

4、数据库表分析

数据库表比较简单,一共就三张表:

开源项目管理软件java版 开源项目管理平台_mybatis_06

5、项目亮点

1、使用shiro框架处理权限问题

一个轻量级权限管理框架,通过简单的注释即可实现各API接口的权限判断。

2、使用mybatis-ext实现DAO层功能

在接触这个项目前本人并没有听说过mybatis-ext这个工具,但看项目源码中的api调用方式跟MP非常相似,搜索了一番发现mybatis-ext这个工具非常冷门几乎没什么人用,为什么作者会用这个冷门的工具呢?然后我又看了一下mybatis-ext的源码地址,哦原来mybatis-ext是本开源项目的作者写的啊,那没事了。
mybatis-ext的api调用方式非常像MP(有谁知道MP和mybatis-ext的关系吗…),基本没什么可说的,为了方便以后扩展,最好还是改成MP来实现DAO层吧。

3、项目API严格遵守Restful风格

浏览一遍该项目的api接口写法,几乎所有的api接口路径都遵循“尽可能简短,不包含动词”的原则,这一点值得学习。

开源项目管理软件java版 开源项目管理平台_vue.js_07

6、项目问题分析

问题1:

直接访问后台任意路径,出现1002错误

开源项目管理软件java版 开源项目管理平台_mybatis_08

解决1:

由于设置了JWT过滤,所有请求都会判断其头部是否携带Access-Token这一项,若为空或是非法token都会返回1002错误。因此,每次请求都需要在header加上Access-Token这一项,并赋予合法的token值。

开源项目管理软件java版 开源项目管理平台_java_09


开源项目管理软件java版 开源项目管理平台_spring boot_10

问题2:

postman直接访问/auth/login路径,body填入默认账号密码,出现1003错误

开源项目管理软件java版 开源项目管理平台_java_11

开源项目管理软件java版 开源项目管理平台_java_12

解决2:

查看登录的controller api发现,参数前加入了@RequestBody注解,意味着请求体参数必须是json格式。所以将Content-Type设置为application/json,参数采用raw形式的json串。

开源项目管理软件java版 开源项目管理平台_vue.js_13


开源项目管理软件java版 开源项目管理平台_mybatis_14

问题3:

抛出的自定义异常均未做处理,仅在后台打印日志

问题4:

目前给账号user1分配新增的角色role1,然后登录user1账号,会出现404错误,导致无法访问所有网页。

解决4:

分析
前端的菜单权限分配有问题,账号管理页面的展示不受权限限制,且其他页面在没有权限访问时,会直接显示404,体验差(比如,如果当前账号没有查看dashboard页面的权限,则登录成功后,会直接显示404页面)。
由于主要问题出在前端(后端的返回数据正常),解决方法研究中。
临时解决方案:在数据库中手动修改用户user1的角色,删除role1,刷新网页。或者等到user1的登录失效后,用未分配role1的账号重新登录。

7、二次开发(开发中)

完善swagger说明

将DAO层框架mybatis-ext替换为mybatis plus(已完成)

mybatis plus的api接口与mybatis-ext类似,具体可以参考mybatisplus官网和源码注释,不多做介绍了。

将权限管理框架Shiro替换为spring security oauth2

处理项目中出现的警告

调整项目结构

调整日志打印文本

增加网关过滤请求

源码地址: