魯春利的工做筆記,好記性不如爛筆頭html
http://shiro.apache.org/web-features.htmlmysql
前面的示例都是把用戶名或密碼以及權限信息放在ini文件中,但實際的Web項目開發過程當中,實際上通常是user<--->role、role<-->permission進行關聯關係的配置,每次登陸時加載其擁有的權限或者是每次訪問時再判斷其權限。web
jdbc-shiro.inispring
[main] #默認是/login.jsp authc.loginUrl=/login roles.unauthorizedUrl=/unauthorized perms.unauthorizedUrl=/unauthorized # 配置JDBC數據庫鏈接 dataSource=com.alibaba.druid.pool.DruidDataSource dataSource.driverClassName=com.mysql.jdbc.Driver dataSource.url=jdbc:mysql://localhost:3306/spring_test dataSource.username=root dataSource.password=Mvtech123!@ # JdbcRealm jdbcRealm=org.apache.shiro.realm.jdbc.JdbcRealm jdbcRealm.permissionsLookupEnabled = true # 身份認證 jdbcRealm.authenticationQuery=SELECT `password` FROM `users` WHERE `username` = ? AND is_delete = '0' # 判斷是否有擁有角色 jdbcRealm.userRolesQuery=SELECT `role_name` FROM `user_roles` WHERE `username` = ? AND is_delete = '0' # 判斷是否具備權限 jdbcRealm.permissionsQuery=SELECT `permission` FROM `roles_permissions` WHERE `role_name` = ? AND is_delete = '0' # 指定數據源 jdbcRealm.dataSource=$dataSource # 指定securityManager的realms實現 securityManager.realms=$jdbcRealm [urls] /login=anon /static/**=anon /role=authc,roles[admin] /permission=authc,perms["user:create"] /unauthorized=anon /logout=logout
DB
sql
/** Table structure for table `users` */ CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵', `username` varchar(20) DEFAULT NULL COMMENT '用戶名', `password` varchar(50) DEFAULT NULL COMMENT '密碼', `password_salt` varchar(10) DEFAULT NULL COMMENT '生成密碼時用的隨機種子', `create_by` varchar(50) DEFAULT NULL COMMENT '建立人', `create_time` datetime DEFAULT NULL COMMENT '建立時間', `update_by` varchar(50) DEFAULT NULL COMMENT '更新人', `update_time` datetime DEFAULT NULL COMMENT '更新時間', `is_delete` char(1) DEFAULT '0' COMMENT '刪除標識(0:正常;1:已刪除)', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; /** Data for the table `users` */ insert into `users`(`id`,`username`,`password`,`password_salt`,`create_by`,`create_time`,`update_by`,`update_time`,`is_delete`) values (1,'lucl','e10adc3949ba59abbe56e057f20f883e','123456','1','2016-07-29 10:40:55','1','2016-07-29 10:40:57','0'); insert into `users`(`id`,`username`,`password`,`password_salt`,`create_by`,`create_time`,`update_by`,`update_time`,`is_delete`) values (2,'wang','e10adc3949ba59abbe56e057f20f883e','123456','1','2016-07-29 10:41:30','1','2016-07-29 10:41:32','0'); /** Table structure for table `user_roles` */ CREATE TABLE `user_roles` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵', `username` varchar(20) DEFAULT NULL COMMENT '用戶名', `role_name` varchar(50) DEFAULT NULL COMMENT '角色', `create_by` varchar(50) DEFAULT NULL COMMENT '建立人', `create_time` datetime DEFAULT NULL COMMENT '建立時間', `update_by` varchar(50) DEFAULT NULL COMMENT '更新人', `update_time` datetime DEFAULT NULL COMMENT '更新時間', `is_delete` char(1) DEFAULT '0' COMMENT '刪除標識(0:正常;1:已刪除)', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; /** Data for the table `user_roles` */ insert into `user_roles`(`id`,`username`,`role_name`,`create_by`,`create_time`,`update_by`,`update_time`,`is_delete`) values (1,'lucl','admin','1','2016-07-29 10:44:33','1','2016-07-29 10:44:36','0'); /** Table structure for table `roles_permissions` */ CREATE TABLE `roles_permissions` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵', `role_name` varchar(50) DEFAULT NULL COMMENT '角色', `permission` varchar(20) DEFAULT NULL COMMENT '權限', `create_by` varchar(50) DEFAULT NULL COMMENT '建立人', `create_time` datetime DEFAULT NULL COMMENT '建立時間', `update_by` varchar(50) DEFAULT NULL COMMENT '更新人', `update_time` datetime DEFAULT NULL COMMENT '更新時間', `is_delete` char(1) DEFAULT '0' COMMENT '刪除標識(0:正常;1:已刪除)', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; /** Data for the table `roles_permissions` */ insert into `roles_permissions`(`id`,`role_name`,`permission`,`create_by`,`create_time`,`update_by`,`update_time`,`is_delete`) values (1,'admin','user:*','1','2016-07-29 10:45:54','1','2016-07-29 10:45:57','0'); insert into `roles_permissions`(`id`,`role_name`,`permission`,`create_by`,`create_time`,`update_by`,`update_time`,`is_delete`) values (2,'admin','system:edit:1','1','2016-07-29 10:46:08','1','2016-07-29 10:46:10','0'); insert into `roles_permissions`(`id`,`role_name`,`permission`,`create_by`,`create_time`,`update_by`,`update_time`,`is_delete`) values (3,'audit','system:log:*','1','2016-07-29 10:46:45','1','2016-07-29 10:46:49','0');
web.xml數據庫
<context-param> <param-name>shiroConfigLocations</param-name> <param-value>classpath:shiro/jdbc-shiro.ini</param-value> </context-param>
Servlet及Jsp同以前的。apache