一文看懂安全控制框架Apache Shiro

举报
且听风吟 发表于 2019/10/28 20:50:25 2019/10/28
【摘要】 什么是Shiro?它是一款轻量级的Java安全框架提供以下服务:Authentication(认证)Authorization(授权)Session Management(会话管理):并不是我们熟知的HTTP Session,而是一个独立的Session管理框架,不管是否为Web应用,都可以用这套框架。Cryptography(加密):封装了许多密码学算法。Hello ShiroMaven依...

什么是Shiro?

  • 它是一款轻量级的Java安全框架

  • 提供以下服务:

  • Authentication(认证)

  • Authorization(授权)

  • Session Management(会话管理):并不是我们熟知的HTTP Session,而是一个独立的Session管理框架,不管是否为Web应用,都可以用这套框架。

  • Cryptography(加密):封装了许多密码学算法。

Hello Shiro

Maven依赖

image.png

提供log4j.properties

image.png

以上配置将日志输出到控制台,并配置日志输出格式。

提供一个shiro.ini

image.png

表示用户名为shiro,密码为201314。

main方法

image.png

分析此Demo

  • 需要读取classpath下的shiro.ini配置文件,并通过工厂类创建SecurityManager对象,最终将其放入SecurityUtils中,供Shiro框架随时获取。

  • 通过SecurityUtils获取Subject对象,其实就是当前用户,只不过被Shiro称为主体(Subject)。

  • 然后使用Username与Password来创建一个UseramePasswordToken对象,然后通过调用Sbuject对象的login方法并传入token对象,让Shiro进行用户身份验认证。

  • 最后可以通过subject的logout方法来注销本次Session。

在Web开发中使用Shiro

直接使用官方提供的Web模块

image.png

在web.xml中添加一个Listener和一个Filterimage.png

其实就是使用EnvironmentLoaderListener来初始化SecurityManager,并通过ShiroFilter来完成认证和授权。

5个表及结构

  • SQL语句

image.png

表结构

640?wxfrom=5&wx_lazy=1&wx_co=1

在shiro.ini做如下配置

通过Shiro的JdbcRealm来进行认证和授权:

image.png

分析以上配置

  • 在[main]片段中,定义了一个authc.loginUrl=/login,表示要跳转的Url地址,映射后可以得到相应的login页面。

  • 然后定义了一个DBCP的Datasource,用于获取JDBC数据库连接。

  • 接着,定义JdbcRealm并指定Datasource,通过以下几条SQL来完成认证和授权。

  • authenticationQuery:提供身份验证。

  • userRolesQuery:授权验证,即查询某个用户的角色。

  • permisisonsQuery:权限验证,即查询某个角色拥有的权限。

  • 最后在[urls]片段中,定义了一些Url过滤规则,shiro已经提供了一些默认的过滤器,我们也可以自定义扩展自己的过滤器。

  • /=anon:对于“/”请求(根目录)可以匿名访问。

  • /space/**=authc:对于“/space/”开头的请求,均由authc过滤器完成。

    • (一个*表示一层目录,两个**表示多层目录)

默认过滤器

640?wxfrom=5&wx_lazy=1&wx_co=1

Shiro注解

注解功能
RequiresGuest确保被注解的方法可以被匿名用户访问
RequiresUser确保被注解的方法只能被已登录的用户访问(包括已认证或已记住)
RequiresAuthentication确保被注解的方法只能被已认证的用户访问(不包括已记住)
RequiresRoles确保被注解的方法仅被指定用户访问
RequiresPermissions确保被注解的方法仅被指定权限的用户访问

Shiro缓存

image.png

在[main]片段中加入以上部分,就可以使用Shiro缓存。此时Shiro会在内存中会用一个Map来缓存查询结果,从而减少数据库的交互次数。Shiro也提供了EhCache扩展。

Shiro加密

image.png

数据库密码加密

image.png


本文转载自微信公众号【java学习之道】。

原文链接:https://mp.weixin.qq.com/s?__biz=MzU4NzYwNDAwMg==&mid=2247484273&idx=1&sn=65d8a65e45b900302ad2db87288be6dc&chksm=fde8ca3cca9f432adb050c7873cf319eb3c92ae3cd07ec5a5e94ce2ac91554607097fec4b0a7&scene=0#rd


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。