实体类


SysUser用户对象
image.png

表关系

image.png

/captchaImage 获取验证码

若依项目分析(前后端分离版) - 图3

/login登录接口

若依项目分析(前后端分离版) - 图4两个SQL

  1. select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark,
  2. d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status,
  3. r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status
  4. from sys_user u
  5. left join sys_dept d on u.dept_id = d.dept_id
  6. left join sys_user_role ur on u.user_id = ur.user_id
  7. left join sys_role r on r.role_id = ur.role_id
  8. where u.user_name = #{userName}
  9. select distinct m.perms
  10. from sys_menu m
  11. left join sys_role_menu rm on m.menu_id = rm.menu_id
  12. left join sys_user_role ur on rm.role_id = ur.role_id
  13. left join sys_role r on r.role_id = ur.role_id
  14. where m.status = '0' and r.status = '0' and ur.user_id = #{userId}

/getInfo获取用户信息

若依项目分析(前后端分离版) - 图5sql1 角色权限

  1. select distinct r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.menu_check_strictly, r.dept_check_strictly,
  2. r.status, r.del_flag, r.create_time, r.remark
  3. from sys_role r
  4. left join sys_user_role ur on ur.role_id = r.role_id
  5. left join sys_user u on u.user_id = ur.user_id
  6. left join sys_dept d on u.dept_id = d.dept_id
  7. WHERE r.del_flag = '0' and ur.user_id = #{userId}

sql2 菜单权限(之前查过,也可从SecurityUtils.getLoginUser().getPermissions()

  1. select distinct m.perms
  2. from sys_menu m
  3. left join sys_role_menu rm on m.menu_id = rm.menu_id
  4. left join sys_user_role ur on rm.role_id = ur.role_id
  5. left join sys_role r on r.role_id = ur.role_id
  6. where m.status = '0' and r.status = '0' and ur.user_id = #{userId}

/getRouters获取路由信息

若依项目分析(前后端分离版) - 图6``sql //查询所有 select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.query`, m.visible, m.status, ifnull(m.perms,’’) as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time from sys_menu m where m.menu_type in (‘M’, ‘C’) and m.status = 0 order by m.parent_id, m.order_num

//根据ID查菜单 select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.query, m.visible, m.status, ifnull(m.perms,’’) as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time from sys_menu m left join sys_role_menu rm on m.menu_id = rm.menu_id left join sys_user_role ur on rm.role_id = ur.role_id left join sys_role ro on ur.role_id = ro.role_id left join sys_user u on ur.user_id = u.user_id where u.user_id = #{userId} and m.menu_type in (‘M’, ‘C’) and m.status = 0 AND ro.status = 0 order by m.parent_id, m.order_num

  1. <a name="FdZd3"></a>
  2. ## 分页插件PageHelper
  3. ```xml
  4. <!-- pagehelper 分页插件 -->
  5. <dependency>
  6. <groupId>com.github.pagehelper</groupId>
  7. <artifactId>pagehelper-spring-boot-starter</artifactId>
  8. <version>${pagehelper.boot.version}</version>
  9. </dependency>

image.png

参数检验

spring boot中可以用@Validated来校验数据,如果数据异常则会统一抛出异常,方便异常中心统一处理,如
image.png

  1. <!-- 自定义验证注解 -->
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter-validation</artifactId>
  5. </dependency>

Hotel对象的参数检验注解
image.png
常用注解还有
image.png
我们也可以自定义注解,例如,自定义一个@Email注解,来检验邮箱地址,需要使用@Constraint注解,然后在EmailValidator类中实现检验方法
image.pngimage.png

异常处理

通常一个web框架中,有大量需要处理的异常。比如业务异常,权限不足等等。前端通过弹出提示信息的方式告诉用户出了什么错误。 通常情况下我们用try…..catch….对异常进行捕捉处理,但是在实际项目中对业务模块进行异常捕捉,会造成代码重复和繁杂, 我们希望代码中只有业务相关的操作,所有的异常我们单独设立一个类来处理它。全局异常就是对框架所有异常进行统一管理。 我们在可能发生异常的方法里throw抛给控制器,然后由全局异常处理器对异常进行统一处理。
全局异常处理器如下,关键注解**@RestControllerAdvice****@ExceptionHandler**,下面的代码实现了对两种异常的处理,一种是自定义的ServiceException,一种是MethodArgumentNotValidException
image.png
自定义的ServiceException如下,其中包含三个属性,错误码、错误信息,以及明细
image.png

测试
(1)自定义ServiceException
image.png
调用后前端提示
image.png
(2)MethodArgumentNotValidException
调用后前端返回具体错误信息
image.png

Redis限流


自定义限流注解
image.png
切面类
image.png