1. 程式人生 > >SpringMVC+Shiro許可權管理簡單例子

SpringMVC+Shiro許可權管理簡單例子

什麼是許可權呢?舉個簡單的例子:

我有一個論壇,註冊的使用者分為normal使用者,manager使用者。
對論壇的帖子的操作有這些:
新增,刪除,更新,檢視,回覆
我們規定:
normal使用者只能:新增,檢視,回覆
manager使用者可以:刪除,更新

normal,manager對應的是角色(role)
新增,刪除,更新等對應的是許可權(permission)

我們採用下面的邏輯建立許可權表結構(不是絕對的,根據需要修改)

一個使用者可以有多種角色(normal,manager,admin等等)
一個角色可以有多個使用者(user1,user2,user3等等)
一個角色可以有多個許可權(save,update,delete,query等等)


一個許可權只屬於一個角色(delete只屬於manager角色)

 我們建立四張表:
t_user使用者表:設定了3個使用者
-------------------------------
id + username   + password
---+----------------+----------
1  +   tom           +  000000
2  +   jack           +  000000
3  +   rose          +  000000
---------------------------------
t_role角色表:設定3個角色
--------------
id + rolename 
---+----------
1  + admin
2  + manager
3  + normal
--------------
t_user_role

使用者角色表:tom是admin和normal角色,jack是manager和normal角色,rose是normal角色
---------------------
user_id  +  role_id
-----------+-----------
1            +     1
1            +     3
2            +     2
2            +     3
3            +     3
---------------------
t_permission許可權表:admin角色可以刪除,manager角色可以新增和更新,normal角色可以檢視
-----------------------------------
id  +  permissionname  +  role_id
----+------------------------+-----------
1   +   add                     +     2
2   +   del                       +    1
3   +   update                +     2
4   +   query                   +    3
-----------------------------------

 建立對應的POJO:

Java程式碼  
  1. package com.cn.pojo;  
  2. import java.util.HashSet;  
  3. import java.util.List;  
  4. import java.util.Set;  
  5. import javax.persistence.Entity;  
  6. import javax.persistence.GeneratedValue;  
  7. import javax.persistence.GenerationType;  
  8. import javax.persistence.Id;  
  9. import javax.persistence.JoinColumn;  
  10. import javax.persistence.JoinTable;  
  11. import javax.persistence.ManyToMany;  
  12. import javax.persistence.Table;  
  13. import javax.persistence.Transient;  
  14. import org.hibernate.validator.constraints.NotEmpty;  
  15. @Entity  
  16. @Table(name="t_user")  
  17. public class User {  
  18.     private Integer id;  
  19.     @NotEmpty(message="使用者名稱不能為空")  
  20.     private String username;  
  21.     @NotEmpty(message="密碼不能為空")  
  22.     private String password;  
  23.     private List<Role> roleList;//一個使用者具有多個角色  
  24.     @Id  
  25.     @GeneratedValue(strategy=GenerationType.IDENTITY)  
  26.     public Integer getId() {  
  27.         return id;  
  28.     }  
  29.     public void setId(Integer id) {  
  30.         this.id = id;  
  31.     }  
  32.     public String getUsername() {  
  33.         return username;  
  34.     }  
  35.     public void setUsername(String username) {  
  36.         this.username = username;  
  37.     }  
  38.     public String getPassword() {  
  39.         return password;  
  40.     }  
  41.     public void setPassword(String password) {  
  42.         this.password = password;  
  43.     }  
  44.     @ManyToMany  
  45.     @JoinTable(name="t_user_role",joinColumns={@JoinColumn(name="user_id")},inverseJoinColumns={@JoinColumn(name="role_id")})  
  46.     public List<Role> getRoleList() {  
  47.         return roleList;  
  48.     }  
  49.     public void setRoleList(List<Role> roleList) {  
  50.         this.roleList = roleList;  
  51.     }  
  52.     @Transient  
  53.     public Set<String> getRolesName(){  
  54.         List<Role> roles=getRoleList();  
  55.         Set<String> set=new HashSet<String>();  
  56.         for (Role role : roles) {  
  57.             set.add(role.getRolename());  
  58.         }  
  59.         return set;  
  60.     }  
  61. }  
Java程式碼  
  1. package com.cn.pojo;  
  2. import java.util.ArrayList;  
  3. import java.util.List;  
  4. import javax.persistence.Entity;  
  5. import javax.persistence.GeneratedValue;  
  6. import javax.persistence.GenerationType;  
  7. import javax.persistence.Id;  
  8. import javax.persistence.JoinColumn;  
  9. import javax.persistence.JoinTable;  
  10. import javax.persistence.ManyToMany;  
  11. import javax.persistence.OneToMany;  
  12. import javax.persistence.Table;  
  13. import javax.persistence.Transient;  
  14. @Entity  
  15. @Table(name="t_role")  
  16. public class Role {  
  17.     private Integer id;  
  18.     private String rolename;  
  19.     private List<Permission> permissionList;//一個角色對應多個許可權  
  20.     private List<User> userList;//一個角色對應多個使用者  
  21.     @Id  
  22.     @GeneratedValue(strategy=GenerationType.IDENTITY)  
  23.     public Integer getId() {  
  24.         return id;  
  25.     }  
  26.     public void setId(Integer id) {  
  27.         this.id = id;  
  28.     }  
  29.     public String getRolename() {  
  30.         return rolename;  
  31.     }  
  32.     public void setRolename(String rolename) {  
  33.         this.rolename = rolename;  
  34.     }  
  35.     @OneToMany(mappedBy="role")  
  36.     public List<Permission> getPermissionList() {  
  37.         return permissionList;  
  38.     }  
  39.     public void setPermissionList(List<Permission> permissionList) {  
  40.         this.permissionList = permissionList;  
  41.     }  
  42.     @ManyToMany  
  43.     @JoinTable(name="t_user_role",joinColumns={@JoinColumn(name="role_id")},inverseJoinColumns={@JoinColumn(name="user_id")})  
  44.     public List<User> getUserList() {  
  45.         return userList;  
  46.     }  
  47.     public void setUserList(List<User> userList) {  
  48.         this.userList = userList;  
  49.     }  
  50.     @Transient  
  51.     public List<String> getPermissionsName(){  
  52.         List<String> list=new ArrayList<String>();  
  53.         List<Permission> perlist=getPermissionList();  
  54.         for (Permission per : perlist) {  
  55.             list.add(per.getPermissionname());  
  56.         }  
  57.         return list;  
  58.     }  
  59. }  
Java程式碼  
  1. package com.cn.pojo;  
  2. import javax.persistence.Entity;  
  3. import javax.persistence.GeneratedValue;  
  4. import javax.persistence.GenerationType;  
  5. import javax.persistence.Id;  
  6. import javax.persistence.JoinColumn;  
  7. import javax.persistence.ManyToOne;  
  8. import javax.persistence.Table;  
  9. @Entity  
  10. @Table(name="t_permission")  
  11. public class Permission {  
  12.     private Integer id;  
  13.     private String permissionname;  
  14.     private Role role;//一個許可權對應一個角色  
  15.     @Id  
  16.     @GeneratedValue(strategy=GenerationType.IDENTITY)  
  17.     public Integer getId() {  
  18.         return id;  
  19.     }  
  20.     public void setId(Integer id) {  
  21.         this.id = id;  
  22.     }  
  23.     public String getPermissionname() {  
  24.         return permissionname;  
  25.     }  
  26.     public void setPermissionname(String permissionname) {  
  27.         this.permissionname = permissionname;  
  28.     }  
  29.     @ManyToOne  
  30.     @JoinColumn(name="role_id")  
  31.     public Role getRole() {  
  32.         return role;  
  33.     }  
  34.     public void setRole(Role role) {  
  35.         this.role = role;  
  36.     }  
  37. }  

 使用SHIRO的步驟:
1,匯入jar
2,配置web.xml
3,建立dbRelm
4,在Spring中配置

pom.xml中配置如下:

Xml程式碼  
  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  2.   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  
  3.   <modelVersion>4.0.0</modelVersion>  
  4.   <groupId>com.hyx</groupId>  
  5. 相關推薦

    SpringMVC+Shiro許可權管理簡單例子

    什麼是許可權呢?舉個簡單的例子:我有一個論壇,註冊的使用者分為normal使用者,manager使用者。對論壇的帖子的操作有這些:新增,刪除,更新,檢視,回覆我們規定:normal使用者只能:新增,檢視,回覆manager使用者可以:刪除,更新normal,manager對應

    Spring Boot shiro 許可權管理例子

    1.引入基本依賴 <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   xsi:schema

    ShiroSpringMVC+Shiro許可權管理

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://maven.apache.org/

    SpringMVC+Shiro許可權管理

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://maven.apache.org/

    Shiro許可權管理】1.Shiro簡介

    一、簡介 在Web系統中我們經常要涉及到許可權問題,例如不同角色的人登入系統,他操作的功能、按鈕、選單是各不相同的,這就是所謂的許可權。 Apache Shiro是Java的一個安全(許可權)框架,Shiro可以完成認證、授權、加密、會話管理、Web整合、快取等功能。適用於JavaSE和JavaEE

    SSM整合shiro許可權管理

    這幾天在學習了shiro許可權管理框架,在剛開始的時候學的時候因為這個配置問題困擾了我很長時間,所以在這篇文章我整合了自己用SSM搭建shiro許可權框架的過程。   1.配置   1.1jar包 在專案配置開始前需要先匯入shiro的相關jar包,下載地址:ht

    Springboot2.x+shiro+redis整合填坑 (一)redis只做快取的情況 Springboot2.0 整合shiro許可權管理

    主要記錄關鍵和有坑的地方 前提: 1、SpringBoot+shiro已經整合完畢,如果沒有整合,先查閱之前的Springboot2.0 整合shiro許可權管理 2、redis已經安裝完成 3、redis客戶端使用Lettuce,這也是sprinboot2.0後預設的,與jedis的區別,自行百度

    SpringBoot整合Shiro許可權管理框架

    專案目錄結構 1.pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://

    springboot配置shiro許可權管理,網搜搜採集網站許可權控制程式碼

    import outshine.shiro.authc.AccountSubjectFactory; import outshine.shiro.filter.AuthenticatedFilter; import outshine.shiro.realm.AccountRealm; import or

    Shiro許可權管理框架(1)

    許可權管理:  1.什麼是許可權管理:基本上涉及到使用者參與的系統都要進行許可權管理,許可權管理屬於系統安全範疇,許可權管理實現對使用者訪問系統的控制,按照安全規則或者安全策略可以訪問而且只能訪問自己被授權的資源。    許可權管理包括使用者身份認證和授權兩

    詳解spring整合shiro許可權管理與資料庫設計

    現在基本上所有的後臺系統都逃不過許可權管理這一塊,這算是一個剛需了。現在我們來整合shiro來達到顆粒化許可權管理,也就是從連線選單到頁面功能按鈕,都進行許可權都驗證,從前端按鈕的顯示隱藏,到後臺具體功能方法的許可權驗證。 首先要先設計好我們的資料庫,先來看一張比較粗糙的資

    Neo4j: RBAC許可權管理簡單圖模型(實現概述)

    建模RBAC許可權管理系統 對於CRUD操作, 角色和資源有4條關係. 分別是CREATE,UPDATE,READ,DELETE. 如果對應的操作許可權不存在, 表示沒有許可權. 這裡ID為 c508b480-082e-11e8-9f0c-b8e8563f0d3a的資源有兩條操作

    Spring Boot Shiro許可權管理1

    原文地址:https://412887952-qq-com.iteye.com/blog/2299732 (1). Shiro簡單介紹 (2). 整合Shiro核心分析 (3). 無Shiro的Spring Boot (4). 整合Shiro 進行使用者授權

    Spring Boot Shiro許可權管理2

    原文地址:https://412887952-qq-com.iteye.com/blog/2299777  整合shiro大概分這麼一個步驟: (a) pom.xml中新增Shiro依賴; (b) 注入Shiro Factory和SecurityManager。 (c) 身份認證 (d

    Spring Boot Shiro許可權管理--自定義 FormAuthenticationFilter驗證碼整合

    驗證碼 思路 shiro使用FormAuthenticationFilter進行表單認證,驗證校驗的功能應該加在FormAuthenticationFilter中,在認證之前進行驗證碼校驗。 需要寫FormAuthenticationFilter的子類,繼承FormAuth

    2.詳解SecurityManager(shiro許可權管理門面)

    SecurityManager 介面主要作用 為什麼要先說SecurityManager呢?因為我覺得他是shiro的主要入口,幾乎所有相關的許可權操作,都由他代理了。 1.可以說是所有配置的入口,簡化配置,方便使用。 2.一個介面就可以實現,驗證的操作(

    基於SSM + Redis的Shiro許可權管理專案

    一、專案介紹(準備工作) 執行前申明 請看完本頁面的所有細節,對你掌握這個專案來說很重要,別一上來就搞,你不爽,我也不爽。 本專案需要一定的Java功底,需要對SpringMvc,Mybatis,有基本的瞭解,其次對Redis有了解和使用更佳。 本專案理論上,只需要一個Redis,然後一個Mysql

    springboot shiro許可權管理

     整合shiro大概分這麼一個步驟:(一) pom.xml中新增Shiro依賴;(二) 注入Shiro Factory和SecurityManager。(三) 身份認證(四) 許可權控制一: pom.xml中新增Shiro依賴1.1:要使用Shiro進行許可權控制,那麼很明顯

    shiro許可權框架簡單入門demo

    shiro和spring security都是開源的許可權框架,shiro相對於spring security來說更簡單學習成本更低,並且提供的API也明瞭,下面是shiro官方的一個圖: 其中把上面的東西抽象出來主要分為幾個塊(網上找的文件摳出來的):

    4.SSM配置shiro許可權管理

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSch