1. 程式人生 > >spring+mybatis+shiro入門實例

spring+mybatis+shiro入門實例

primary admin ring cnblogs sts word 功能 con code

sql:

 1 /*
 2 SQLyog Ultimate v11.33 (64 bit)
 3 MySQL - 5.1.49-community : Database - db_shiro
 4 *********************************************************************
 5 */
 6 
 7 
 8 /*!40101 SET NAMES utf8 */;
 9 
10 /*!40101 SET SQL_MODE=‘‘*/;
11 
12 /*!40014 SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
13 /*!40014 SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
14 /*!40101 SET @[email protected]@SQL_MODE, SQL_MODE=‘NO_AUTO_VALUE_ON_ZERO‘ */;
15 /*!40111 SET @[email protected]@SQL_NOTES, SQL_NOTES=0 */;
16 CREATE DATABASE /*!32312 IF NOT EXISTS*/`db_shiro` /*!40100 DEFAULT CHARACTER SET utf8 */;
17 
18 USE `db_shiro`;
19 
20 /*Table structure for table `t_permission` */
21 
22 DROP TABLE IF EXISTS `t_permission`;
23 
24 CREATE TABLE `t_permission` (
25   `id` int(11) NOT NULL AUTO_INCREMENT,
26   `permissionName` varchar(50) DEFAULT NULL,
27   `roleId` int(11) DEFAULT NULL,
28   PRIMARY KEY (`id`),
29   KEY `roleId` (`roleId`),
30   CONSTRAINT `t_permission_ibfk_1` FOREIGN KEY (`roleId`) REFERENCES `t_role` (`id`)
31 ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
32 
33 /*Data for the table `t_permission` */
34 
35 insert  into `t_permission`(`id`,`permissionName`,`roleId`) values (1,user:*‘,1),(2,student:*‘,2);
36 
37 /*Table structure for table `t_role` */
38 
39 DROP TABLE IF EXISTS `t_role`;
40 
41 CREATE TABLE `t_role` (
42   `id` int(11) NOT NULL AUTO_INCREMENT,
43   `roleName` varchar(20) DEFAULT NULL,
44   PRIMARY KEY (`id`)
45 ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
46 
47 /*Data for the table `t_role` */
48 
49 insert  into `t_role`(`id`,`roleName`) values (1,admin‘),(2,teacher);
50 
51 /*Table structure for table `t_user` */
52 
53 DROP TABLE IF EXISTS `t_user`;
54 
55 CREATE TABLE `t_user` (
56   `id` int(11) NOT NULL AUTO_INCREMENT,
57   `userName` varchar(20) DEFAULT NULL,
58   `password` varchar(100) DEFAULT NULL,
59   `roleId` int(11) DEFAULT NULL,
60   PRIMARY KEY (`id`),
61   KEY `roleId` (`roleId`),
62   CONSTRAINT `t_user_ibfk_1` FOREIGN KEY (`roleId`) REFERENCES `t_role` (`id`)
63 ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
64 
65 /*Data for the table `t_user` */
66 
67 insert  into `t_user`(`id`,`userName`,`password`,`roleId`) values (1,‘java1234‘,‘123456‘,1),(2,‘jack‘,‘123‘,2),(3,‘marry‘,‘234‘,NULL),(4,‘json‘,‘345‘,NULL);
68 
69 /*Table structure for table `users` */
70 
71 DROP TABLE IF EXISTS `users`;
72 
73 CREATE TABLE `users` (
74   `id` int(11) NOT NULL AUTO_INCREMENT,
75   `userName` varchar(20) DEFAULT NULL,
76   `password` varchar(20) DEFAULT NULL,
77   PRIMARY KEY (`id`)
78 ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
79 
80 /*Data for the table `users` */
81 
82 insert  into `users`(`id`,`userName`,`password`) values (1,‘java1234‘,‘123456‘);
83 
84 /*!40101 SET [email protected]_SQL_MODE */;
85 /*!40014 SET [email protected]_FOREIGN_KEY_CHECKS */;
86 /*!40014 SET [email protected]_UNIQUE_CHECKS */;
87 /*!40111 SET [email protected]_SQL_NOTES */;

我們要實現的功能是針對不同用戶允許其訪問不同的資源。

用戶表:

技術分享

角色表:

技術分享

權限表:

技術分享

我們發現,用戶java1234擁有admin的角色的user:*權限,用戶jack擁有teacher的角色的student.*權限。marry和json用戶無角色。

實例項目地址:[email protected]:zhaojiatao/shiroweb2.git

我們在spring配置文件中配置匹配規則:

 1 <!-- Shiro過濾器 -->
 2     <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">  
 3         <!-- Shiro的核心安全接口,這個屬性是必須的 -->  
 4         <property name="securityManager" ref="securityManager"/>
 5         <!-- 身份認證失敗,則跳轉到登錄頁面的配置 -->  
 6         <property name="loginUrl" value="/index.jsp"/>
 7         <!-- 權限認證失敗,則跳轉到指定頁面 -->  
 8         <property name="unauthorizedUrl" value="/unauthor.jsp"/>  
 9         <!-- Shiro連接約束配置,即過濾鏈的定義 -->  
10         <property name="filterChainDefinitions">  
11             <value>  
12                  /login=anon
13                 /admin*=authc
14                 /student=roles[teacher]
15                 /teacher=perms["user:create"]
16             </value>  
17         </property>
18     </bean>  

如上所示,訪問admin路徑需要身份認證通過即可。訪問/student路徑需要擁有teacher的角色。訪問/teacher路徑需要擁有user:create權限。

我們開啟web服務,進入登錄頁面,登錄不同的用戶會發現shiro已經實現了權限驗證。

spring+mybatis+shiro入門實例