,好记性不如烂笔头


前面的示例都是把用户名或密码以及权限信息放在ini文件中,但实际的Web项目开发过程中,实际上一般是user<--->role、role<-->permission进行关联关系的配置,每次登录时加载其拥有的权限或者是每次访问时再判断其权限。

jdbc-shiro.ini

[main]#默认是/login.jspauthc.loginUrl=/loginroles.unauthorizedUrl=/unauthorizedperms.unauthorizedUrl=/unauthorized# 配置JDBC数据库连接dataSource=com.alibaba.druid.pool.DruidDataSourcedataSource.driverClassName=com.mysql.jdbc.DriverdataSource.url=jdbc:mysql://localhost:3306/spring_testdataSource.username=rootdataSource.password=Mvtech123!@# JdbcRealmjdbcRealm=org.apache.shiro.realm.jdbc.JdbcRealmjdbcRealm.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

/** 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

    
shiroConfigLocations
    
classpath:shiro/jdbc-shiro.ini

Servlet及Jsp同之前的。