05.服务端异常的统一处理
如果不是前后端分离,一般出了异常都很容易处理,直接跳转到相关的错误页面即可,现在前后端分离,出了异常,就不能再跳转到错误页面了,但是我们可以返回 JSON 呀!我们可以对服务端可能发生的异常进行统一处理。
举个栗子:
当管理员想要删除某一个角色的时候,如果该角色下尚有关联的用户或者资源,此时由于数据库中外键的约束会导致删除失败(我的业务逻辑就是如此,这里小伙伴不要和我扯 cascade),当删除失败时,会抛出一个 DataIntegrityViolationException 异常,我将这种异常捕获后统一处理。
5.1 处理方式
5.1.1 自定义异常处理类
自定义异常处理类 CustomExceptionResolver,如下:
public class Cust...
04.密码加密并加盐
密码要加盐处理,这是常识。各个权限处理框架对此都有不同程度的支持,Shiro、SpringSecurity 都有自家的解决方案,SpringSecurity 中有一个升级版的消息摘要:
BCryptPasswordEncoder
使用 BCryptPasswordEncoder,即使相同的明文,生成的新的加密字符串都是不一样的,这样可以避免像在 Shiro 中那样我们自己配置密码的盐,SpringSecurity 中使用 BCryptPasswordEncoder 的具体流程如下:
4.1 注册处理
在用户注册时,我们需要对密码进行处理,处理方式如下:
public int hrReg(String username, String password) {
/...
03.动态处理角色和资源的关系
这是非常核心的一块内容。
3.1 创建 Hr 和 HrService
首先我们需要创建 Hr 类,即我们的用户类,该类实现了 UserDetails 接口,该类的属性如下:
public class Hr implements UserDetails {
private Long id;
private String name;
private String phone;
private String telephone;
private String address;
private boolean enabled;
private String username;
private String password;...
02.服务端环境搭建
服务端采用 SpringBoot+SpringSecurity 来开发,完整搭建过程如下:
2.1 创建SpringBoot项目
在 IDEA 中创建 SpringBoot 项目,创建完成之后,添加如下依赖:
<dependencies>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</depen...
01.权限数据库设计
权限数据库主要包含了五张表,分别是资源表、角色表、用户表、资源角色表、用户角色表,数据库关系模型如下:
关于这个表,我说如下几点:
hr 表是用户表,存放了用户的基本信息。
role 是角色表,name字段表示角色的英文名称,按照 SpringSecurity 的规范,将以 ROLE_ 开始,nameZh 字段表示角色的中文名称。
menu 表是一个资源表,该表涉及到的字段有点多,由于我的前端采用了 Vue 来做,因此当用户登录成功之后,系统将根据用户的角色动态加载需要的模块,所有模块的信息将保存在 menu 表中,menu 表中的 path、component、iconCls、keepAlive、requireAuth 等字段都是 Vue-Rou...
共计 55 篇文章,6 页。