学习目标
1、shiro介绍
2、SSM整合Shiro
学习内容
1.shiro介绍
1.1介绍
- shiro是一个java的 安全框架,apache的一个开源框架。简单易用。
- 实现的功能:认证、授权、会话管理和密码加密等功能。
- 可以用在java SE环境中,java EE环境中。
1.2shrio功能特点:
Authentication:认证
Authorization:授权
Session Management:session会话管理
Cryptography:密码加密
Caching:缓存
web Support:web支持
Concurrency:多线程、并发
Testing:测试
Run as: 以 某种 身份 运行
Remember Me:记住我
1.3shiro运行原理
可以看到:应用代码直接交互的对象是Subject,也就是说Shiro的对外API核心就是Subject;其每个API的含义:
Subject:主体,抽象的身份:当前的用户,网络爬虫、第三方的程序、进程
SecurityManager:安全管理器,管理所有的subjects;委托给SecurityManager进行安全管理。门面模式:Facade;需求----》委托人————分发下去;
Realm:域,数据域。获取数据库中用户信息、权限信息。
接下来我们来从Shiro内部来看下Shiro的架构,如下图所示:
1.4过滤器
Shiro内置了很多默认的拦截器,比如身份验证、授权等相关的。默认拦截器可以参考org.apache.shiro.web.filter.mgt.DefaultFilter中的枚举拦截器:
解释:
- /admins/**=anon # 表示该 uri 可以匿名访问
- /admins/**=auth # 表示该 uri 需要认证才能访问
- /admins/**=authcBasic # 表示该 uri 需要 httpBasic 认证
- /admins/*=perms[user:add:] # 表示该 uri 需要认证用户拥有 user:add:* 权限才能访问
- /admins/**=port[8081] # 表示该 uri 需要使用 8081 端口
- /admins/=rest[user] # 相当于 /admins/=perms[user:method],其中,method 表示 get、post、delete 等
- /admins/**=roles[admin] # 表示该 uri 需要认证用户拥有 admin 角色才能访问
- /admins/**=ssl # 表示该 uri 需要使用 https 协议
- /admins/**=user # 表示该 uri 需要认证或通过记住我认证才能访问
- /logout=logout # 表示注销,可以当作固定配置
注意:
- anon,authcBasic,auchc,user 是认证过滤器。
- perms,roles,ssl,rest,port 是授权过滤器。
2、shiro的hello world
参考官网的示例
public static void main(String[] args) { //初始化工厂实例 Factory factory = new IniSecurityManagerFactory("classpath:shiro.ini"); //实例化一个安全管理器 SecurityManager securityManager = factory.getInstance(); //设置安全管理器 SecurityUtils.setSecurityManager(securityManager); //获取Subject:当前用户 Subject currentUser = SecurityUtils.getSubject(); //从session中查询中当前登录的用户信息 ,类似于登录时从session中获取登录信息 Session session = currentUser.getSession(); session.setAttribute("someKey