Apache Shiro学习笔记(五)Web集成使用JdbcRealm

鲁春利的工作笔记,好记性不如烂笔头



http://shiro.apache.org/web-features.html

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

jdbc-shiro.ini

[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
[email protected]

# 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

/** 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同之前的。

时间: 2024-12-25 09:55:13

Apache Shiro学习笔记(五)Web集成使用JdbcRealm的相关文章

Apache Shiro学习笔记(六)FilterChain

鲁春利的工作笔记,好记性不如烂笔头 Apache Shiro学习笔记(七)IniWebEnvironment

Apache Shiro学习笔记(五)Web集成扩展

鲁春利的工作笔记,好记性不如烂笔头 http://shiro.apache.org/web-features.html 基于Basic的拦截器身份验证 shiro-authc-basic.ini # 基于Basic的拦截器身份验证 [main] # 默认是/login.jsp authc.loginUrl=/login authcBasic.applicationName=请登录 [users] # 用户名=密码,角色 lucl=123456,admin wang=123456 [roles]

Apache Shiro学习笔记(九)Spring集成

鲁春利的工作笔记,好记性不如烂笔头 Integrating Apache Shiro into Spring-based Applications Shiro 的组件都是JavaBean/POJO 式的组件,所以非常容易使用Spring进行组件管理,可以非常方便的从ini配置迁移到Spring进行管理,且支持JavaSE应用及Web 应用的集成. Web Applications 1.web.xml <!-- The filter-name matches name of a 'shiroFil

Apache Shiro学习笔记

鲁春利的工作笔记,好记性不如烂笔头 官网地址:http://shiro.apache.org/ 主要功能包括: Authentication:身份认证/登录,验证用户是不是拥有相应的身份:Authorization:授权,即权限验证,验证某个已认证的用户是否拥有某个权限:即判断用户是否能做事情:常见的如:验证某个用户是否拥有某个角色. Session Manager:会话管理,即用户登录后就是一次会话,在没有退出之前,它的所有信息都在会话中:会话可以是普通JavaSE环境的,也可以是如Web环境

Apache Shiro 学习笔记

一.为什么要学习Shiro Shiro是简单易用的权限控制框架.应用范围广,受到许多开发人员的欢迎.他可以运用于javaSE项目还可以运用于javaEE项目.在项目中Shiro可以帮助我们完成:认证.授权.加密.会话管理.与Web集成.缓存等. 二.与spring security的笔记 Shiro简单易学,尽管功能没有spring security强大,但其功能已足够日常开发使用.spring官网使用的便是Shiro.可见其的方便.Shiro还可与spring整合.更方便了开发者. 三.Shi

Apache Shiro学习笔记(七)Shiro Listener介绍

鲁春利的工作笔记,好记性不如烂笔头 web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"      xmlns="http://java.sun.com/xml/ns/javaee"      xsi:schemaLocation="h

Apache Shiro学习笔记(三)用户授权自定义Permission

鲁春利的工作笔记,好记性不如烂笔头 Shiro配置文件(shiro-customize-permission.ini) [main] myRealmA=com.invicme.apps.shiro.permission.MyRealmOne myPermissionResolver=com.invicme.apps.shiro.permission.MyPermissionResolver securityManager.authorizer.permissionResolver = $myPe

Apache Shiro学习笔记(三)用户授权

鲁春利的工作笔记,好记性不如烂笔头 Shiro默认提供的Realm 认证(Authentication)用来证明用户身份是合法的:而授权(Authorize)用来控制合法用户能够做什么(能访问哪些资源). 实际系统应用中一般继承AuthorizingRealm(授权)即可:其继承了AuthenticatingRealm(即身份验证),而且也间接继承了CachingRealm(带有缓存实现). 在授权中需了解的几个关键对象:主体(Subject).资源(Resource).权限(Permissio

Apache Shiro学习笔记(二)身份验证

鲁春利的工作笔记,好记性不如烂笔头 身份验证,即在应用中谁能证明他就是他本人,应用系统中一般通过用户名/密码来证明.在 shiro 中,用户需要提供principals(身份)和credentials(证明)给shiro,从而应用能验证用户身份:    principals:身份,即主体的标识属性,可以是任何东西,如用户名.邮箱等,唯一即可.一个主体可以有多个principals,但只有一个Primary principals,一般是用户名/密码/手机号.    credentials:证明/凭