# 基于Java的APIJSON角色扩展框架
## 项目概述
APIJSON本身的权限定义在枚举`RequestRole`中,且与框架本身的耦合度较高,如果想要在此基础上定义新的权限级别不是很方便。本项目通过定义一个新的接口`IRequestRole`,令`RequestRole`实现这个接口,再依次修改框架中其他相关联的位置,从而实现了一个可扩展的权限系统。
## 主要功能
- **权限扩展**:通过接口`IRequestRole`实现权限枚举的可扩展性。
- **用户自定义权限**:用户可以注册自己的权限枚举类,并通过`IRequestRole.register`方法进行注册。
- **权限验证**:在`AbstractVerifier`中增加`convertStringToIRequestRole`方法,从`String[]`转换到`IRequestRole[]`,并在`verifyAccess`方法中进行权限验证。
## 主要修改
- 建立`IRequestRole`接口(位于`apijson.orm`包中)。
- 令`RequestRole`实现`IRequestRole`,并将其内的`get`方法移至`IRequestRole`中实现。
- `MethodAccess`注解返回`String[]`,因为`IRequestRole[]`编译时不确定。
- `AbstractVerifier`中增加`convertStringToIRequestRole`方法,从`String[]`转换到`IRequestRole[]`。`verifyAccess`方法中的switch转换为if else。
- `APIJSONApplication`的static块中使用`IRequestRole.register`注册内建的`RequestRole`。
## 用户使用指南
1. 定义自己的权限枚举类(可参照`apijson.demo.config.MyRole`)。
2. 在`DemoApplication`的static块中注册自己的权限枚举类。
3. 在自己的用户类(`model.User`)中添加`List<String> role`属性,并添加对应的getter, setter方法。
4. 重载`AbstractVerifier.verifyAccess`,补全一部分框架中未完成的鉴权逻辑。
5. 在数据库`Access`表中完成对应配置。
6. 在调用时先登录,然后用`@role`声明对应的权限。
## 示例项目
本项目中内置了改动后APIJSON ORM和Framework的代码,导入Intellij IDEA或其他开发工具后应可以直接运行`DemoApplication`。
### 场景
本项目模拟一个选课系统,为简化场景,其中业务表仅有`Course`(课程)一张。
### 权限配置
基于以上场景,对`Course`表配置权限如下:
- GET/GETS/HEAD/HEADS:["STUDENT", "TEACHER","PRINCIPAL"]
- POST/DELETE:["TEACHER"]
- PUT:["OWNER","PRINCIPAL"]
### 可用用户
内置了四个用户,密码均为`1234`。用户的公开信息存储在`User`表中,私密信息存储在`Credential`表中。
| id | username | password | role |
| ---- | --------- | -------- | ---------------------- |
| 1 | jerry | 1234 | ["STUDENT", "TEACHER"] |
| 2 | neko | 1234 | ["STUDENT"] |
| 3 | doge | 1234 | ["TEACHER"] |
| 4 | principal | 1234 | ["PRINCIPAL"] |
### 初始化
1. 在MySQL / MariaDB中执行项目根目录`initdb.sql`,并在`DemoSQLConfig`中配置相关连接属性。
2. (可选)使用Postman,导入项目根目录的`role_extend.postman_collection.json`,内有主要的几个测试接口。
3. 使用IDEA或其他开发工具打开项目目录,运行`DemoApplication`。
### 部分调用示例
登录 /login
```json
{
"username":"jerry",
"password":"1234"
}
```
获取课程 /get
```json
{
"[]": {
"Course": {
"@role": "TEACHER"
}
}
}
```
课程计数 /head
```json
{
"Course": {
"@role": "STUDENT"
}
}
```
新建课程 /post
```json
{
"Course": {
"sysid": "CS244",
"name": "分布式系统",
"teacher": "t1",
"location": "二教222",
"capacity": 80,
"@role": "TEACHER" // 换成 STUDENT 就会鉴权失败了
},
"tag": "Course"
}
```
修改课程 /put
```json
{
"Course": {
"id": 1627252238116,
"capacity": 20,
"@role": "OWNER" // 或者 "PRINCIPLE"
},
"tag": "Course"
}
```
删除课程 /delete
```json
{
"Course": {
"id": 1627772387598,
"@role": "TEACHER"
},
"tag": "Course"
}
```
## 问题
- MethodAccess 类型修改,不兼容旧的实现,升级的时候需要手动修改。
- 引入了一些类型不安全,主要是在 `IRequestRole` 里有对 Class 的直接操作。
## 开发环境
- Windows 10
- JDK 13
- MariaDB 10.5.9
## 贡献
欢迎提交Issue和PR,一起完善这个项目!
## 许可证
本项目遵循Apache License Version 2.0开源协议。
没有合适的资源?快使用搜索试试~ 我知道了~
基于Java的APIJSON角色扩展框架.zip
共85个文件
java:79个
iml:1个
sql:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 152 浏览量
2024-09-02
10:02:27
上传
评论
收藏 207KB ZIP 举报
温馨提示
基于Java的APIJSON角色扩展框架 项目概述 APIJSON本身的权限定义在枚举RequestRole中,且与框架本身的耦合度较高,如果想要在此基础上定义新的权限级别不是很方便。本项目通过定义一个新的接口IRequestRole,令RequestRole实现这个接口,再依次修改框架中其他相关联的位置,从而实现了一个可扩展的权限系统。 主要功能 权限扩展通过接口IRequestRole实现权限枚举的可扩展性。 用户自定义权限用户可以注册自己的权限枚举类,并通过IRequestRole.register方法进行注册。 权限验证在AbstractVerifier中增加convertStringToIRequestRole方法,从String[]转换到IRequestRole[],并在verifyAccess方法中进行权限验证。 主要修改 建立IRequestRole接口(位于apijson.orm包中)。 令RequestRole实现IRequestRole,并将其内的get方法移至IRequestRole中实现。 MethodAccess注解返回St
资源推荐
资源详情
资源评论
收起资源包目录
基于Java的APIJSON角色扩展框架.zip (85个子文件)
role_extend.postman_collection.json 5KB
pom.xml 4KB
src
main
resources
application.properties 0B
java
apijson
MethodAccess.java 4KB
JSONResponse.java 16KB
orm
Verifier.java 5KB
AbstractSQLConfig.java 132KB
IRequestRole.java 3KB
AbstractVerifier.java 51KB
Join.java 8KB
SQLConfig.java 9KB
Visitor.java 1KB
Parser.java 8KB
OnParseCallback.java 3KB
ObjectParser.java 9KB
Subquery.java 5KB
AbstractParser.java 54KB
Logic.java 5KB
Operation.java 5KB
Pair.java 7KB
SQLCreator.java 1KB
ParserCreator.java 1KB
JSONRequest.java 4KB
SQLExecutor.java 5KB
Entry.java 3KB
model
Column.java 1KB
PgAttribute.java 1KB
Table.java 2KB
TestRecord.java 4KB
ExtendedProperty.java 2KB
PgClass.java 1KB
SysTable.java 1KB
Document.java 5KB
Function.java 1KB
Access.java 1KB
Request.java 1KB
SysColumn.java 1KB
Response.java 1KB
package-info.java 1KB
exception
ConditionErrorException.java 2KB
ConflictException.java 2KB
OutOfRangeException.java 2KB
package-info.java 1KB
NotLoggedInException.java 2KB
NotExistException.java 2KB
AbstractSQLExecutor.java 32KB
FunctionParser.java 5KB
AbstractFunctionParser.java 13KB
package-info.java 509B
VerifierCreator.java 1KB
AbstractObjectParser.java 32KB
JSONObject.java 16KB
demo
DemoApplication.java 5KB
controller
DemoController.java 9KB
model
Credential.java 2KB
User.java 5KB
config
JSONWebConfig.java 2KB
MyRole.java 1KB
DemoVerifier.java 9KB
DemoSQLConfig.java 2KB
Log.java 5KB
RequestRole.java 2KB
SQL.java 13KB
JSON.java 10KB
NotNull.java 3KB
RequestMethod.java 4KB
framework
APIJSONObjectParser.java 4KB
APIJSONSQLConfig.java 7KB
APIJSONParser.java 6KB
APIJSONController.java 11KB
APIJSONVerifier.java 21KB
APIJSONApplication.java 7KB
APIJSONCreator.java 3KB
AssertUtil.java 3KB
APIJSONSQLExecutor.java 7KB
package-info.java 726B
APIJSONConstant.java 5KB
APIJSONFunctionParser.java 23KB
BaseModel.java 9KB
JSONRequest.java 8KB
package-info.java 1KB
StringUtil.java 28KB
initdb.sql 12KB
apijson-demo.iml 5KB
README.md 5KB
共 85 条
- 1
资源评论
t0_54coder
- 粉丝: 3148
- 资源: 5642
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 扁平化风格的后台界面管理模板下载.rar
- 扁平化风格的互联网产品介绍网站模板下载.zip
- 扁平化风格的配饰商城模板下载.rar
- 扁平化风格的后台网站响应式bootstrap模板下载.zip
- 扁平化风格的赛马比赛企业网站模板下载.zip
- 扁平化风格的平台介绍专题模板下载.zip
- 扁平化风格的设计公司网站模板下载.zip
- 扁平化风格的商城购物网站模板下载.zip
- 扁平化风格的商务公司设计网站模板下载.rar
- 扁平化风格的眼镜销售公司网站模板下载.zip
- 扁平化风格的设计网站模板下载.zip
- 扁平化风格工具包素材网页界面模板下载.zip
- 扁平化风格的装饰家居公司网站模板下载.rar
- 扁平化风格户外用品商城网站模板下载.rar
- 扁平化风格人力资源后台管理模板下载.rar
- 扁平化风格界面工具包设计元素模板下载.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功