yonbip-code-gen-mcp
Version:
YonBIP高级版代码生成MCP
199 lines (154 loc) • 5.97 kB
Markdown
# 权限流程
## 1 校验流程
1. **开始**
2. **判断是否为登录相关请求**
- **是**:执行后续步骤。
- **否**:进入下一步判断。
3. **判断是否为打印下载等 form 请求**
- **是**:执行后续步骤。
- **否**:进入下一步判断。
4. **判断是否为平台请求**
- **是**:执行后续步骤。
- **否**:进入下一步判断。
5. **判断是否为白名单请求**
- **是**:执行后续步骤。
- **否**:进入下一步判断。
6. **判断是否为开放服务(*)**
- **是**:执行后续步骤。
- **否**:进入下一步判断。
7. **判断 [appcode](file://D:\project\2024codefactory04\codefactory\codecreater\src\private\nc\impl\codefactory\codecreater\AppManifest.java#L34-L34) 对应有权地址集合是否包含当前请求地址**
- **是**:执行后续校验。
- **否**:提示权限异常。
8. **执行后续校验**
9. **结束**
## 2 启动加载流程
1. **开始**
2. **判断中间件服务是否启动成功**
- **是**:继续下一步。
- **否**:流程结束。
3. **扫描指定路径的 `authorize.xml` 文件**
- 路径为:`home\hotwebs\nccloud\WEB-INF\extend\yyconfig\modules\module\component\authorize\*.xml`
4. **预加载上述扫描到的 `authorize.xml` 文件内容**
5. **加载缓存 [appcode](file://D:\project\2024codefactory04\codefactory\codecreater\src\private\nc\impl\codefactory\codecreater\AppManifest.java#L34-L34) 和对应的有权地址集合的键值对**
6. **结束**
# 配置方式
配置说明
```xml
<authorizes>: 根元素,包含一个或多个 <authorize> 元素。
<authorize>: 定义一个授权配置。
<appcode>: 应用的唯一标识码,此处为 10140AC。
<actions>: 包含该应用可执行的一系列 Action。
<action>: 每个 Action 的具体名称,例如 uapbd.accperiod.schemetreequery 等。
```
# 1 为单个应用配置 Action
demo appcode处配置单个应用编码即可
```xml
<authorizes>
<authorize>
<appcode>10140AC</appcode>
<actions>
<action>uapbd.accperiod.schemetreequery</action>
<action>uapbd.accperiod.schemequery</action>
<action>uapbd.accperiod.schemesave</action>
<action>uapbd.accperiod.schemedelete</action>
<action>uapbd.accperiod.accadjbatchsave</action>
<action>uapbd.accperiod.accperiodsave</action>
<action>uapbd.accperiod.accperioddelete</action>
<action>uapbd.accperiod.accquerycard</action>
<action>uapbd.accperiod.accperiodprint</action>
</actions>
</authorize>
</authorizes>
```
## 2 为多个应用配置 Action
```xml
<authorizes>
<authorize>
<appcode>10140CMG,10140CMO</appcode>
<actions>
<action>uapbd.custmateria.savemater</action>
<action>uapbd.custmateria.querymater</action>
<action>uapbd.custmateria.savesub</action>
<action>uapbd.custmateria.querysub</action>
<action>uapbd.custmateria.custexist</action>
<action>uapbd.custmateria.vfreedisable</action>
<action>uapbd.custmateria.print</action>
</actions>
</authorize>
</authorizes>
```
## 3 配置开放的 Action,所有的应用都可以访问到
```xml
<authorizes>
<authorize>
<appcode>*</appcode>
<actions>
<action>uapbd.busiinfo.RackDefaultTreeRef</action>
<action>uapbd.busiinfo.TransactioncodeGridRef</action>
<action>uapbd.fiacc.AccountInOrgGridRef</action>
<action>uapbd.fiacc.AccountInOrgTreeRef</action>
<action>uapbd.material.MaterialCostClassTreeRef</action>
<action>uapbd.material.MattaxesGridRef</action>
<action>uapbd.pub.AccperiodMonthGridRef</action>
<action>uapbd.pub.AccPeriodSchemeDefaultTreeRef</action>
</actions>
</authorize>
</authorizes>
```
# 鉴权实现原理
通过在 home/hotwebs/nccloud/WEB-INF/web.xml 中增加两个过滤器实现鉴权逻辑校验
## web.xml 配置文件解析
### 1过滤器(Filter)配置
用户权限校验过滤器
```xml
<filter>
<filter-name>userAppFilter</filter-name>
<filter-class>nccloud.framework.core.filter.UserAppCodeAuthorizeFilter</filter-class>
</filter>
```
应用权限校验过滤器
```xml
<filter>
<filter-name>appActionFilter</filter-name>
<filter-class>nccloud.framework.core.filter.AppActionAuthorizeFilter</filter-class>
</filter>
```
过滤器映射(Filter-Mapping)
```xml
<filter-mapping>
<filter-name>appActionFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>userAppFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
```
### 2 监听器(Listener)配置
```xml
<listener>
<description>NCCloudContextListener</description>
<display-name>NCCloudContextListener</display-name>
<listener-class>nccloud.framework.web.action.entry.NCCloudContextListener</listener-class>
</listener>
```
### 3 Servlet 配置
```xml
<servlet>
<servlet-name>springServlet</servlet-name>
<servlet-class>nccloud.framework.web.action.entry.EntryController</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
```
过滤器执行顺序:
appActionFilter 和 userAppFilter 都映射到 *.do,具体执行顺序由配置决定。
权限校验:
UserAppCodeAuthorizeFilter 负责用户权限校验。
AppActionAuthorizeFilter 负责应用权限校验。
监听器:
NCCloudContextListener 负责 appcode 有权地址的集合加载。
Servlet:
EntryController 作为前端请求的入口控制器。