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 @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
13 /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
14 /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
15 /*!40111 SET @OLD_SQL_NOTES=@@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 SQL_MODE=@OLD_SQL_MODE */;
85 /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
86 /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
87 /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

我们要实现的功能是针对不同用户允许其访问不同的资源。

用户表:

角色表:

权限表:

我们发现,用户java1234拥有admin的角色的user:*权限,用户jack拥有teacher的角色的student.*权限。marry和json用户无角色。

实例项目地址:git@github.com: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入门实例的更多相关文章

  1. 1. mybatis 的入门实例

    mybatis 的入门实例 1.创建一个普通的Java项目 1.加入jar包(所有mybatis 和mysql) 2.加入配置文件 src 目录下 (1) db.properties mysql.us ...

  2. shiro入门实例,基于ini配置

    基于ini或者关系数据库的,其实都是一样的,重要的是思想. # ==================================================================== ...

  3. springmvc+spring+mybatis分页查询实例版本3,添加条件检索

    在第二个版本上添加了姓名模糊查询,年龄区间查询;自以为easy,结果发现mybatis的各种参数写法基本搞混或是忘了,zuo啊,直接上代码,然后赶紧把mybatis整理一遍再研究自己的项目,应该还会有 ...

  4. springmvc+spring+mybatis分页查询实例版本2.0

    先在改成纯利用js进行分页,首先查询出所有记录,初始化通过jquery控制只知显示首页内容,创建页面切换功能的函数,每次显示固定的内容行并把其他内容行隐藏,这样只需要一次提交就可以实现分页,但是仍有缺 ...

  5. springmvc+spring+mybatis分页查询实例版本1,ver1.0

    无聊做做看看,几乎没有怎么仔细做过这方面的,总是以为很简单,想想就会,实际做起来结合工作经验感觉还是挺有收获的,可以用在自己的项目上 第一版本思路:框架使用ssm,这个无所谓,采用分页语句查询指定页面 ...

  6. Apache Shiro入门实例

    Shiro是一个强大灵活的开源安全框架,提供身份验证.授权.会话管理.密码体系. 1.先创建一个Maven项目 2.配置pom <project xmlns="http://maven ...

  7. Spring Cloud 从入门到精通

    Spring Cloud 是一套完整的微服务解决方案,基于 Spring Boot 框架,准确的说,它不是一个框架,而是一个大的容器,它将市面上较好的微服务框架集成进来,从而简化了开发者的代码量. 本 ...

  8. 3.springMVC+spring+Mybatis整合Demo(单表的增删该查,这里主要是贴代码,不多解释了)

    前面给大家讲了整合的思路和整合的过程,在这里就不在提了,直接把springMVC+spring+Mybatis整合的实例代码(单表的增删改查)贴给大家: 首先是目录结构: 仔细看看这个目录结构:我不详 ...

  9. springmvc+spring+mybatis+maven项目集成shiro进行用户权限控制【转】

    项目结构:   1.maven项目的pom中引入shiro所需的jar包依赖关系 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ...

随机推荐

  1. 《周易》中的君子形象--http://cul.china.com.cn/guoxue/2018-06/04/content_40369049.htm

    中国文学本质上是一种君子文学,君子是中国文学的创作主体,君子与小人的人格冲突是中国文学矛盾冲突的主要形式.最早的君子是居住于城邦的贵族,而西周以来这一语词的道德化倾向愈来越重,渐渐摆脱了阶级意义而成为 ...

  2. os简介

    1. 操作系统(Operation System,OS) 操作系统作为接口的示意图  没有安装操作系统的计算机,通常被称为 裸机 如果想在 裸机 上运行自己所编写的程序,就必须用机器语言书写程序 如 ...

  3. share团队冲刺8

    团队冲刺第八天 昨天:完善代码,解决其中的问题 今天:将除登陆界面之外的界面进行修改和完善,使其美观 问题:bindview不会用,使用时出现问题

  4. ruoyi BeanUtils

    package com.ruoyi.common.utils.bean; import java.lang.reflect.Method; import java.util.ArrayList; im ...

  5. 01 语言基础+高级:1-9 网络编程_day11【网络编程】

    day11[网络编程] 主要内容 软件架构CS/BS 网络通信三要素 TCP通信 Socket套接字 ServerSocket 教学目标 能够辨别UDP和TCP协议特点 能够说出TCP协议下两个常用类 ...

  6. Django专题-ugettext_lazy

    标准翻译 使用函数 ugettext() 来指定一个翻译字符串. 作为惯例,使用短别名 _ 来引入这个函数以节省键入时间. 在下面这个例子中,文本 "Welcome to my site&q ...

  7. python字典常用方法

    字典(Dictionary) 字典是一个无序.可变和有索引的集合.在 Python 中,字典用花括号编写,拥有键和值. 实例 创建并打印字典: thisdict = { "brand&quo ...

  8. 创建Git仓库

    创建Git仓库 一.什么是版本仓库 什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改.删除,Git都能 ...

  9. macbook 一些php相关操作

    开启php: https://jingyan.baidu.com/article/67508eb434539f9cca1ce4da.html 配置多虚拟主机:  https://jingyan.bai ...

  10. goweb-处理静态资源

    处理静态文件 对于 HTML 页面中的 css 以及 js 等静态文件,需要使用使用 net/http 包下的以下 方法来处理 1) StripPrefix 函数 2) FileServer 函数 3 ...