# 权限流程

## 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 作为前端请求的入口控制器。