SpringBoot整合Shiro思路以及程式碼過程
阿新 • • 發佈:2019-01-11
模型 假設存在使用者(User)、角色(Role)、許可權(Permission)3中模型。依賴關係如下:使用者分配角色,角色分配許可權。使用者不直接參與許可權的分配。SpringBoot整合Shiro流程 demo的程式碼架構如下:建立IO模型User存在:1、唯一ID 2、使用者名稱 3、密碼 4、擁有的Rolepublic class User {private Integer uid; private String username; private String password; private Set<Role> roles = new HashSet<>() ;}Role存在:1、唯一ID 2、角色名 3、角色擁有的許可權 4、擁有該角色的使用者(可以不需要)public class Role {private Integer rid; private String rname; private Set<Permission> permissions = new HashSet<>(); private Set<User> users = new HashSet<>();}Permission存在:1、唯一ID 2、許可權名 3、。。。public class Permission { private Integer pid; private String name; private String url;}資料庫sql如下:-- 許可權表 --CREATE TABLE permission ( pid int(11) NOT NULL AUTO_INCREMENT, name VARCHAR(255) NOT NULL DEFAULT '', url VARCHAR(255) DEFAULT '', PRIMARY KEY (pid)) ENGINE = InnoDB DEFAULT CHARSET = utf8;INSERT INTO permission VALUES ('1', 'add', '');INSERT INTO permission VALUES ('2', 'delete', '');INSERT INTO permission VALUES ('3', 'edit', '');INSERT INTO permission VALUES ('4', 'query', '');-- 使用者表 --CREATE TABLE user( uid int(11) NOT NULL AUTO_INCREMENT, username VARCHAR(255) NOT NULL DEFAULT '', password VARCHAR(255) NOT NULL DEFAULT '', PRIMARY KEY (uid)) ENGINE = InnoDB DEFAULT CHARSET = utf8;INSERT INTO user VALUES ('1', 'admin', '123');INSERT INTO user VALUES ('2', 'demo', '123');-- 角色表 --CREATE TABLE role( rid int(11) NOT NULL AUTO_INCREMENT, rname VARCHAR(255) NOT NULL DEFAULT '', PRIMARY KEY (rid)) ENGINE = InnoDB DEFAULT CHARSET = utf8;INSERT INTO role VALUES ('1', 'admin');INSERT INTO role VALUES ('2', 'customer');-- 許可權角色關係表 --CREATE TABLE permission_role ( rid int(11) NOT NULL , pid int(11) NOT NULL , KEY idx_rid (rid), KEY idx_pid (pid)) ENGINE = InnoDB DEFAULT CHARSET = utf8;INSERT INTO permission_role VALUES ('1', '1');INSERT INTO permission_role VALUES ('1', '2');INSERT INTO permission_role VALUES ('1', '3');INSERT INTO permission_role VALUES ('1', '4');INSERT INTO permission_role VALUES ('2', '1');INSERT INTO permission_role VALUES ('2', '4');-- 使用者角色關係表 --CREATE TABLE user_role ( uid int(11) NOT NULL , rid int(11) NOT NULL , KEY idx_uid (uid), KEY idx_rid (rid)) ENGINE = InnoDB DEFAULT CHARSET = utf8;INSERT INTO user_role VALUES (1, 1);INSERT INTO user_role VALUES (2, 2);Mapper的配置 1、UserMapper根據使用者名稱去資料庫查詢實體public interface UserMapper { User findByUsername(@Param("username") String username);}2、service配置存在如下關係
- 獲取當前使用者資訊
- 因為user存放的是set<Role>,所以用for迴圈取出內容
- 取出的role存放new 出來的List中
- 利用for迴圈取出permission放入new出來的List中
- 將剛才的list放入new SimpleAuthorizationInfo() 中的role和permission中
- 返回該物件
- token中獲取當前使用者資訊
- 因為user存放的是set<Role>,所以用for迴圈取出內容
- 取出使用者名稱。使用者名稱和密碼是byte存放,可以考慮用new String轉換。
- 返回SimpleAuthenticationInfo物件。包括使用者實體,密碼,該物件名