本文档详细介绍了Mall电商系统的认证和授权机制,涵盖了管理员(后台用户)和客户(前台用户)的认证方式以及通过基于角色的访问控制系统进行的权限管理。
有关支持此系统的数据库模式详情,请参阅数据库模式,特别是用户管理表。
Mall系统实现了两个独立但架构相似的认证系统:
两个系统均利用Spring Security和JWT(JSON Web Token)进行无状态认证和基于角色的授权。
来源
下图展示了管理员和客户用户的登录流程:
来源
登录后,客户端会在请求头中包含JWT令牌,用于后续的API请求。
来源
admin模块实现了一个全面的基于角色的访问控制(RBAC)系统,支持动态资源权限。
管理员用户(UmsAdmin)可以被分配多个角色(UmsRole)。每个角色可以被授予访问特定资源(UmsResource)的权限,这些资源代表API端点。
来源
下表显示了管理员认证的主要操作:
| 操作 | API 端点 | 方法 | 描述 | 实现 |
|---|---|---|---|---|
| 注册 | /admin/register | POST | 创建新的管理员账户 | UmsAdminController.register() |
| 登录 | /admin/login | POST | 使用用户名/密码登录 | UmsAdminController.login() |
| 获取信息 | /admin/info | GET | 获取当前管理员信息和权限 | UmsAdminController.getAdminInfo() |
| 登出 | /admin/logout | POST | 退出登录并清除缓存 | UmsAdminController.logout() |
| 刷新令牌 | /admin/refreshToken | GET | 刷新JWT令牌 | UmsAdminController.refreshToken() |
来源
admin模块使用自定义安全过滤器实现基于动态资源的授权。
UmsResource 表)。DynamicSecurityService 在启动时加载所有资源及其访问规则。DynamicSecurityFilter 拦截API请求,并检查当前用户是否有权访问请求的URL。来源
portal模块实现了一个简化的客户认证系统,重点关注会员注册和登录。
| 操作 | API 端点 | 方法 | 描述 | 实现 |
|---|---|---|---|---|
| 注册 | /sso/register | POST | 注册新会员 | UmsMemberController.register() |
| 登录 | /sso/login | POST | 使用用户名/密码登录 | UmsMemberController.login() |
| 获取认证码 | /sso/getAuthCode | GET | 获取手机验证码 | UmsMemberController.getAuthCode() |
| 更新密码 | /sso/updatePassword | POST | 更新会员密码 | UmsMemberController.updatePassword() |
| 获取信息 | /sso/info | GET | 获取当前会员信息 | UmsMemberController.info() |
| 刷新令牌 | /sso/refreshToken | GET | 刷新JWT令牌 | UmsMemberController.refreshToken() |
来源
客户授权模型比管理员模型更简单。
来源
JWT(JSON Web Token)用于无状态认证。系统通过JwtTokenUtil 类生成和验证令牌。
关键JWT配置:
密码安全实现采用:
来源
安全配置允许某些URL绕过认证。
IgnoreUrlsConfig的组件从application properties加载URL模式列表。来源
管理员和客户服务均实现了缓存以提高性能。
来源
安全过滤器链按以下顺序配置以处理请求:
过滤器链被配置为无状态(无会话),并且禁用CSRF防护以支持REST API架构。
来源
Mall电商系统实现了一个全面的安全系统,为管理员和客户用户提供了独立但架构相似的认证机制。管理员模块提供了复杂的基于角色的访问控制系统和动态资源授权,而客户模块则侧重于带有简化权限的基本认证。两个系统均利用JWT进行无状态认证,并使用Spring Security作为安全基础架构。