Shiro笔记五:Shiro内置Filter过滤器

shiro内置的过滤器

  1. 核心过滤器类:DefaultFilter,配置哪个路径对应哪个拦截器进行处理。
  2. authc:org.apache.shiro.web.filter.authc.FormAuthenticationFilter

需要认证登录才能访问

  1. user:org.apache.shiro.web.filter.authc.UserFilter

用户拦截器,表示必须存在用户。

  1. anon:org.apache.shiro.web.filter.authc.AnonymousFilter

匿名拦截器,不需要登录即可访问的资源,匿名用户或游客,一般用于过滤静态资源。

  1. roles:org.apache.shiro.web.filter.authz.RolesAuthorizationFilter

角色授权拦截器,验证用户是或否拥有角色。

参数可写多个,表示某些角色才能通过,多个参数时写 roles[“admin,user”],当有多个参数时必须每个
参数都通过才算通过

  1. perms:org.apache.shiro.web.filter.authz.PermissionsAuthorizationFilter

1、权限授权拦截器,验证用户是否拥有权限

2、参数可写多个,表示需要某些权限才能通过,多个参数时写 perms[“user, admin”],当有多个参数时必
须每个参数都通过才算可以

  1. authcBasic:org.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter

httpBasic 身份验证拦截器。

  1. logout:org.apache.shiro.web.filter.authc.LogoutFilter

退出拦截器,执行后会直接跳转到shiroFilterFactoryBean.setLoginUrl(); 设置的 url

  1. port:org.apache.shiro.web.filter.authz.PortFilter

端口拦截器, 可通过的端口。

  1. ssl:org.apache.shiro.web.filter.authz.SslFilter

ssl拦截器,只有请求协议是https才能通过。

Shiro的Filter配置

  1. Filter配置原则

1、路径通配符支持 ?、*、**,注意通配符匹配不 包括目录分隔符“/”

2、* 可以匹配所有,不加*可以进行前缀匹配,但多个冒号就需要多个 * 来匹配

  1. 通配符

URL权限采取第一次匹配优先的方式

? : 匹配一个字符,如 /user? , 匹配 /user3,但不匹配/user/;

* : 匹配零个或多个字符串,如 /add* ,匹配 /addtest,但不匹配 /user/1

** : 匹配路径中的零个或多个路径,如 /user/** 将匹 配 /user/xxx 或 /user/xxx/yyy

例子:

/user/**=filter1

/user/add=filter2

请求 /user/add 命中的是filter1拦截器

  1. 通配符性能

通配符比字符串匹配会复杂点,所以性能也会稍弱,推荐是使用字符串匹配方式

shiro数据安全之数据加解密

  1. 加解密

明文数据容易泄露,比如密码明文存储,万一泄露则会造成严重后果

  1. 散列算法

一般叫hash,简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数,适合存储
密码,比如MD5

  1. 加盐salt

如果直接通过散列函数得到加密数据,容易被对应解密网站暴力破解,一般会在应用程序里面加特殊的
自动进行处理,比如用户id,例子:加密数据 = MD5(明文密码+用户id), 破解难度会更大,也可以使用
多重散列,比如多次md5

  1. Shiro的安全处理

Shiro里面 CredentialsMatcher,用来验证密码是否正确

源码:AuthenticatingRealm -> assertCredentialsMatch()

  1. 一般会自定义规则
public void abc() {@Bean public HashedCredentialsMatcher hashedCredentialsMatcher () {HashedCredentialsMatcher hashedCredentialsMatcher = new HashedCredentialsMatcher(); //散列算法,使用MD5算法; hashedCredentialsMatcher.setHashAlgorithmName("md5"); //散列的次数,比如散列两次,相当于 md5(md5("xxx"));hashedCredentialsMatcher.setHashIterations(2); return hashedCredentialsMatcher; }}
}

shiro权限控制之注解和编程方式还可以使用配置文件方式

  1. 注解方式

@RequiresRoles(value={“admin”, “editor”}, logical= Logical.AND)

需要角色 admin 和 editor两个角色 AND表示两个同时成立

@RequiresPermissions (value={“user:add”, “user:del”}, logical= Logical.OR)

需要权限 user:add 或 user:del权限其中一个,OR是或的意思。

@RequiresAuthentication
已经授过权,调用Subject.isAuthenticated()返回true

@RequiresUser

身份验证或者通过记 住我登录的

  1. 编程方式
Subject subject = SecurityUtils.getSubject();
//基于角色判断
if(subject.hasRole(“admin”)) { //有角色,有权限
} else {//无角色,无权限
}//或者权限判断
if(subject.isPermitted("/user/add")){//有权限
}else{//无权限
}
  1. 常见API

subject.hasRole(“xxx”);
subject.isPermitted(“xxx”);
subject. isPermittedAll(“xxxxx”,“yyyy”);
subject.checkRole(“xxx”); // 无返回值,可以认为内部使用断言的方式

Shiro缓存模块

  1. shiro缓存

shiro中提供了对认证信息和授权信息的缓存。

默认是关闭认证信息缓存的,对于授权信息的缓存shiro默认开启的(因为授权的数据量大)

AuthenticatingRealm 及 AuthorizingRealm 分别提供了对AuthenticationInfo 和 AuthorizationInfo 信息的缓存。

  1. Shiro的缓存模块Cache Manager

Shiro的Session模块和SessionManager

  1. Session

用户和程序直接的链接,程序可以根据session识别到哪个用户,和javaweb中的session类似

  1. 会话管理器SessionManager

1、会话管理器管理所有subject的所有操作,是shiro的核心组件

2、核心方法:
//开启一个session

Session start(SessionContext context);

//指定Key获取session

Session getSession(SessionKey key)

  1. SessionDao会话存储持久化

SessionDAO AbstractSessionDAO CachingSessionDAO EnterpriseCacheSessionDAO
MemorySessionDAO

核心方法:

//创建

Serializable create(Session session);

//获取

Session readSession(Serializable sessionId) throws UnknownSessionException;

//更新

void update(Session session)

//删除,会话过期时会调用

void delete(Session session);

//获取活跃的session

Collection getActiveSessions();

  1. 其他内容

RememberMe

1、 Cookie 写到客户端并 保存

2、 通过调用subject.login()前,设置 token.setRememberMe(true);

3、 关闭浏览器再重新打开;会发现浏览器还是记住你的

4、 注意点:

subject.isAuthenticated() 表示用户进行了身份验证登录的,即Subject.login 进行了登录

subject.isRemembered() 表示用户是通过RememberMe登录的

subject.isAuthenticated()==true,则 subject.isRemembered()==false, 两个互斥

总结:特殊页面或者API调用才需要authc进行验证拦截,该拦截器会判断用户是否是通过 subject.login()登录,安全性更高,其他非核心接口或者页面则通过user拦截器处理即可

Shiro笔记五:Shiro内置Filter过滤器相关推荐

  1. 【若依(ruoyi)】shiro 内置的过滤器(filter)

    前言 shiro: 1.5.3 若依(ruoyi): v4.3 (测试shiro的环境) shiro 内置的过滤器(filter) Filter Name Class anon org.apache. ...

  2. Druid 内置Filter配置

    Druid Spring Boot Starter 对以下 Druid 内置 Filter,都提供了默认配置: StatFilter 通过它可以开启 Druid 的 SQL 监控功能,对 SQL 进行 ...

  3. XSL学习笔记6 XSLT内置模板规则

    XSL学习笔记6 XSLT内置模板规则 定义正确的模板规则来匹配XML树中的节点是XSLT应用的关键.为了让源文档树的节点在没有明确匹配规则的情况下,能够被递归处理,XSLT定义了几个内置的模板规则, ...

  4. angularjs读书笔记:angularjs内置过滤器总结——摘自《Angularjs权威教程》

    过滤器用来格式化需要展示给用户的数据.AngularJS有很多实用的内置过滤器,同时也提 供了方便的途径可以自己创建过滤器. 在HTML中的模板绑定符号{{ }}内通过|符号来调用过滤器.例如,假设我 ...

  5. netfilter的笔记3--那些内置的表

    通过netfilter的笔记2的例子,我们知道了怎么使用netfilter的框架,对于内核的设计原则来说,策略和机制分离,所以提供了iptables来供用户配置防火墙策略. 那么,怎么使用iptabl ...

  6. python内置函数sorted(x)的作用是_Python内置filter与sorted函数

    Python内部提供了序列过滤函数 filter . 接收参数为 一个函数以及一个序列.函数依次作用于序列中的每一个元素,并根据返回值是True 或者 False 判断是否删除该元素. 样例如下 # ...

  7. MySQL学习笔记_7_MySQL常用内置函数

    MySQL常用内置函数 说明: 1)可以用在SELECT/UPDATE/DELETE中,及where,orderby,having中 2)在函数里将字段名作为参数,变量的值就是字段所对应的每一行的值. ...

  8. Python学习笔记3.2-python内置函数大全

    学习python不可避免的首先要了解python的内置函数,熟悉了这些以后可以给编程带来很大的方便. 1.数学运算类 函数名 函数功能 备注 abs(x) 求绝对值 1.参数可以是整型,也可以是复数2 ...

  9. vue.js 数据替换_Vue.js实战笔记之Vue内置指令

    指令是Vue模板中最常用的一项功能,它带有前缀v-,主要职责是当其表达式的值改变时,相应的将某些行为应用在 DOM 上. 基本指令 v-clock v-clock 不需要表达式,它会在 Vue 实例结 ...

最新文章

  1. 联结你与万物的8种元素
  2. 【APIO2014】Palindromes
  3. MJRefresh iphonx 显示问题
  4. 皮一皮:现在想上个节目一定要注明这些...
  5. css高级教程第一章笔记
  6. 数据中心冷却塔结冰应急演练
  7. RTC_WaitForSynchro()
  8. bugzilla perl mysql apache windows,windows下apache安装bugzilla
  9. 【学习笔记】springboot中的全局异常处理 和@ControllerAdvice的使用
  10. 从操作系统的PV操作理解JAVA的synchronized同步方法,同步代码块实现,及比较
  11. 洛谷 - P3358 最长k可重区间集问题(最大费用最大流+思维建边)
  12. php 做积分策略,积分策略
  13. spring--打印hello--注解component--自动创建对象
  14. XSSFWorkbook 设置单元格样式_openpyxl3.0官方文档(25)—— 使用样式
  15. 数据库服务器操作系统升级方案,PostgreSQL 数据库跨版本升级常用方案解析
  16. js 前端 银行卡图标处理
  17. android提权工具包,安卓手机root权限一键提权工具_kingroot PC V4.8.5 免费版
  18. js实现彩票机选效果
  19. JSD-2204-API-线程并发-集合-Day08
  20. 苹果怎么换行打字_2周内将你的打字速度提高3倍的方法

热门文章

  1. 李群李代数-大师兄(简化版)
  2. STP、RSTP与MSTP也不过就这些区别
  3. CF #737 (Div. 2) B. Moamen and k-subarrays
  4. 着眼用户需求,vivo 致力于用 AI 实现“1001 个便利”
  5. 教徒计划出品:Open-E + Esxi5 + MDS9124 FC存储配置
  6. 自己开店怎么办会员卡-云上铺会员管理系统
  7. Dynamics CRM项目实例之七:站点地图修改,联系人-订单-积分管理
  8. php+发送邮件标题乱码_php邮件标题乱码的解决方法
  9. COLMAP简介及通过2D序列图像进行3D重建操作流程
  10. 移动阅读APP开发功能有哪些?