```
至此, Shiro 的详细设计已完毕。
## 4.2 阿里 OSS 云存储服务
为了减轻服务器压力,对于管理系统的图片,我一致使用的是 阿里云的 OSS 云存储服务,首先得费用很低,一年10块左右,其次是更安全、更高效。
阿里云 OSS 官方地址:[阿里云 OSS 服务](https://oss.console.aliyun.com/bucket)
SpringBoot 整合 阿里云 OSS 可参考这篇文章:[SpringBoot 整合 OSS](https://www.jianshu.com/p/978e206ab8fd)
项目中用 OSS 的方法是先声明 OssService 接口,定义一些与OSS交互有关的方法。
```java
package com.star.ms.common.service;
import com.star.ms.common.entity.api.OssUploadResult;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public interface OssService {
// 获取所有图片的路径
public List getDefaultHeadImgLink();
// 上传文件
public OssUploadResult upload(String userCode, String img64base);
// 获取文件路径
public String getUserImgPath(String userCode, String imgType);
}
```
这些方法会用到 OSS 依赖提供的 OSS 对象,所以在实现这个接口前,需要声明 OSS 相关的 Bean 到 Spring 容器
```java
package com.star.ms.common.api;
import com.aliyun.oss.*;
import com.aliyun.oss.model.ListObjectsRequest;
import com.aliyun.oss.model.OSSObjectSummary;
import com.aliyun.oss.model.ObjectListing;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import java.util.LinkedList;
import java.util.List;
@Configuration
public class OssApi {
public static final String ENDPOINT = "OSS的域";
public static final String ACCESS_KEY_ID = "OSS的验证ID";
public static final String ACCESS_KEY_SECRET = "OSS的验证密钥";
public static final String BUCKET_NAME = "OSS中Buncket块的名称";
// 根据配置将 OSS 注入到 Spring 的 IoC 容器
@Bean
public OSS OSSClient(){
return new OSSClientBuilder().build(ENDPOINT, ACCESS_KEY_ID, ACCESS_KEY_SECRET);
}
}
```
## 4.3 页面设计
以下页面是我用 Bootstrap5 凑出来的,可能不太没美观,以简约为主。由于想着用 AJAX 请求数据,尽量做到前后端分离,结果在后面用到了 Boostrap5 的模态框,写了很多重复的杂冗的 JS 代码...
### 1. 登录页面

### 2. 注册页面

### 3. 后台报表页面

### 4. 后台用户管理页面



### 5. 用户角色管理页面



### 6. 供应商管理页面




### 7. 商品管理页面





### 8. 账单管理页面




### 9. 角色权限管理页面



### 10. 权限列表管理页面



### 11. 个人信息页面





# 五、代码获取
这个项目本来就没什么技术含量,所以我决定直接开源,希望能帮助到有需要的朋友吧,也希望自己将来有更好的技术水平来优化一下。
安全起见,我关闭了 OSS的可写功能,所以部署项目后的上传自定义图片功能将失效,过段时间我会考虑将 OSS 移除,采用本地存储,这样就可以一键部署成功了。