github编辑

Day5-用户接口实现和后台页面骨架

用户权限

动态获取用户权限

创建用户权限表 t_user_role

在 mysql 数据库管理工具中在数据库执行如下语句创建新表:

CREATE TABLE `t_user_role` (
  `id` bigint(20) UNSIGNED NOT NULL COMMENT 'id',
  `username` varchar(60) NOT NULL COMMENT '用户名',
  `role` varchar(60) NOT NULL COMMENT '角色',
  `create_time` datetime NOT NULL DEFAULT current_timestamp() COMMENT '创建时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户角色表' ROW_FORMAT=DYNAMIC;


ALTER TABLE `t_user_role`
  ADD PRIMARY KEY (`id`) USING BTREE,
  ADD KEY `idx_username` (`username`) USING BTREE;


ALTER TABLE `t_user_role`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id';
COMMIT;

创建完成后得到如下结构的表

t_user_role 表

在项目中创建数据表结构和映射

首先在 common.domain.dos 包下创建 UserRoleDO

common.domain.mapper 包下创建 UserRoleMapper 类,构建一个通过用户名查询数据条目的方法:

修改 Security 配置

对之前访问权限不足处理器 RestAccessDeniedHandler 类的留白部分进行补充:

同时需要在 ResponseCodeEnum 中添加新的异常状态码:

admin.config 下的 WebSecurityConfig 配置类中开启 Security 的一些注解,同时启用访问权限不足的处理器 RestAccessDeniedHandler

@EnableGlobalMethodSecurity 中, 设置 prePostEnabled = true 可以启用 @PreAuthorize@PostAuthorize 注解。

@PreAuthorize 注解在方法执行前进行权限验证,而 @PostAuthorize 注解在方法执行后进行权限验证。

设置 securedEnabled = true 可以启用 @Secured 注解。@Secured 注解用于定义业务方法的安全配置,只有那些具有指定角色的用户才可以调用该方法。例如:

注意: @Secured 注解不支持 Spring EL 表达式,指定的角色必须以 ROLE_ 开头。

对于权限不足的情况,我们还要手动抛出错误。在 common.exception 包下的全局异常处理类 GlobalExceptionHandler 中定义方法:

注意: 捕获该类需要在 common 模块下添加 Security 依赖,在 weblog-module-commonpom.xml 配置文件中添加依赖:

修改用户详细服务接口

重新写一下 jwt.service 中的 UserDetailServiceImpl,我们已经建立了连接数据库获取用户权限的逻辑,接下来将他运用到接口中:

测试权限

TestController 中新建测试接口:

同时在 t_user 表中新建用户 test, 密码使用 jwt 模块下 PasswordEncoderConfig 中的方法加密一下之后填入。然后在 t_user_role 表中设定用户的权限,给管理员账号设定 ROLE_ADMIN 的角色,给新建的 test 用户设定 ROLE_VISITOR 角色。最后数据项如下:

用户权限数据条目

可以在 api 文档中进行调试,登录对应账户获取 token,添加到请求头中看看是否正常地验证了用户权限

获取用户信息和修改密码

构建请求和响应 VO

获取用户信息响应

获取一个用户的信息,只需要通过用户名来请求,所以重点需要构建响应的 VO,在 admin.model.vo.user 下新建 FindUserInfoRspVO 类,对于请求用户信息的响应,我们目前定义是返回其用户名和角色列表,以便在前端显示:

修改密码请求 VO

请求一次修改密码,需要用户名、原密码和旧密码三项内容,在 admin.model.vo 下新建 UpdateAdminUserPasswordReqVO 类:

同时需要引入参数验证所需的依赖包,在 admin 模块下的 pom.xml 中添加以下依赖:

构建服务接口

创建接口

admin.service 下新建接口 AdminUserService

实现接口

接下来对两个接口进行实现。在 admin.service.impl 中创建类 AdminUserServiceImpl:

之前在验证中,我们将用户名存储到了 ThreadLocal 中,在实现获取用户信息的接口时直接调用即可。对于修改密码中的几种错误情况,我们也需要定义相应的异常状态码。在异常状态码枚举类中添加定义:

定义对应的 api

admin.controller 下创建 AdminUserController 类:

后台骨架的搭建

搭建的时候写的太上头忘记写文档了,代码都是全写完之后提交的,没法一点点来说,直接看提交记录吧各位🥺

后台页面骨架搭建 · monthwolf/weblog-vue3@f75a413arrow-up-right

暗色模式 · monthwolf/weblog-vue3@0e424f4arrow-up-right

获取用户信息和修改密码 · monthwolf/weblog-vue3@64d7998arrow-up-right

对接后端api · monthwolf/weblog-vue3@f61948darrow-up-right

最后更新于