UNPKG

yonbip-code-gen-mcp

Version:

YonBIP高级版代码生成MCP

199 lines (154 loc) 5.97 kB
# 权限流程 ## 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 <?xml version="1.0" encoding="UTF-8" standalone="no"?> <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 <?xml version="1.0" encoding="UTF-8" standalone="no"?> <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 <?xml version="1.0" encoding="UTF-8" standalone="no" ?> <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 作为前端请求的入口控制器。