首页 > 编程知识 正文

shiro框架详解,shiro安全框架

时间:2023-05-03 13:59:33 阅读:46844 作者:3380

另一方面,Shiro简档1.Shiro框架是Java的安全认证框架。

2.Shiro不仅在JavaSE环境中,而且在JavaEE环境中也可以方便地开发足够好的APP应用程序。

3.Shiro可以完成认证、授权、加密、会话管理、与web集成、缓存等。

二、Shiro基本功能介绍

1 .验证/登录身份验证:验证用户是否具有相应的身份。

2 .用户可以执行哪些操作,包括授权:授权(即权限验证)、验证经过验证的用户是否具有权限(即验证用户是否具有某个角色) 或者,细化验证用户是否对资源具有权限。

3.Session Manager :会话管理,即用户登录时为一个会话,未完成时所有信息都在会话中; 会话可以是常规JavaSE环境或Web环境。

4 .保护4.Cryptography:加密、密码加密等数据安全,存储在数据库中而不是明文。

5 .网络支持:网络支持。 非常容易集成到Web环境中。

6.Caching :缓存,如用户登录成功后,其用户信息、拥有的角色/权限无需每次查询,可以提高效率。

7.Concurrency:Shiro支持多线程APP应用程序的并发身份验证。 这意味着,如果在一个线程上打开另一个线程,权限将自动传播。

8 .测试:提供测试支持

9.Run As:允许一个用户假扮另一个用户进行访问。

10.Remember Me :这是一个非常常见的功能,登录一次后,下次来就不需要登录了。

三. Shiro体系结构及其关键组件

1.Subject:本质上是对当前访问的对象的抽象描述。 也就是说,APP应用代码直接对话的对象是Subject。 也就是说,Shiro的对外API核心是Subject。 Subject代表当前的“用户”,该用户不一定是具体的人,与当前的APP应用程序(如网络爬虫和机器人)进行交互的都是Subject。 所有与Subject的交互都将委托给安全管理器; Subject实际上是场面话,安全管理器才是实际的执行者。

2 .安全管理器:安全管理器; 这意味着所有与安全相关的操作都与安全管理器交互。 而且,管理着所有的Subject。 这是整个Shiro框架的核心,负责与Shiro的其他组件进行交互。 这相当于SpringMVC中的dispatcher servlet的作用。

3.Realm:Shiro从Realm中检索安全数据,如用户、角色和权限。 这意味着,安全管理器要验证用户的身份,必须从Realm中检索相应的用户并进行比较,以确定用户的身份是否正确。 此外,还必须从Realm中获取用户角色/权限,以验证用户是否可以操作。 Realm可以被认为是数据源,它定义了连接到不同数据源时如何访问数据。

四、使用Shiro框架进行认证的过程1 .首先在pom文件中添加与Shiro直接或间接相关的相应依赖包。

2 .创建JSP或html文件,向浏览器发送url请求,Controller类的方法接收该请求,并使用shiro框架处理该请求。

创建Config类,使用注释@Configuration说明该类是配置类,然后将该类实例化并放入IOC容器中。

4 .然后创建和定义Realm类,继承AuthorizingRealm接口,生成doGetAuthenticationInfo和doGetAuthorizationInfo方法。 这两种方法是认证和授权两种主要方法。

编写检索Realm对象和securityManager对象的两个方法,并使用@Bean注释将这两个对象的实例放入容器中。

6 .创建过滤器方法ShiroFilterFactoryBean,并创建常规过滤器,如anon (无需验证即可访问)、authc (权限)和perms (权限)。 实际上,拦截器的基础是创建封装相应key (相应操作)和value (验证类型)的Map集合。 然后,可以将此集合作为参数传递给shirofilterfactorychaindefinitionmap方法,并设置稍后使用setLoginUrl方法验证失败后返回的登录页。

7 .如果需要身份验证的请求太多,我们无法创建很多具体的url拦截。 可以使用/*拦截所有请求,但不能拦截所有请求。 例如,不能监听登录请求。 可以使用anon释放登录请求。注意:放行等请求一定需要放在负责拦截所有请求的前面,不然会不起作用。

8 .返回上一步2,继续在Controller类中编写,使用UsernamePasswordToken生成token对象,然后使用SecurityUtils的getSubject方法创建subject对象

t.login(token)方法。之后便回到doGetAuthenticationInfo方法,之后利用与数据库的交互获得相应的账户名和密码,使用用户输入的账户名和密码与数据库中查询到的密码进行比较,若一致,则登录成功,不一致就登录失败。(注意:AuthenticationToken与UsernamePasswordToken是父子关系)

五、Shiro框架实现授权

1.首先得在数据库中有专门的一列用来标记授权,比如使用1表示添加权限,2表示修改权限等。

2.之后在MyConfig配置类中进行配置,如filterMap.put("/add",“perms[1]”)表示要想进行添加操作,该用户必须要有perms[1]这个授权,否则无法进行操作。注意这个配置类中仅仅是对操作进行限制,还未进行真正的授权,之后需要在doGetAuthorizationInfo方法中进行权限的授予。

3.在Controller中编写用来接收请求,并将未授权的信息返回到未授权页面,之后也需要在MyConfig中进行shiroFilterFactoryBean.setUnauthor(“/**”)实现授权未成功后跳转的页面。

4.在doGetAuthorizationInfo方法中编写核心的授权方法。首先创建一个SimpleAuthorizationInfo的info对象使用SecurityUtils.getSubject()方法获取一个subject对象,之后使用subject.getPrincipal()对象获得user对象,之后再通过user获得相应的权限值,最后通过info.addStringPermissions(perms)进行权限的授予。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。