主页

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...

阅读更多