spring+mybatis+shiro入門實例
阿新 • • 發佈:2017-09-04
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入門實例