Shiro总结面试问题

Shiro总结

Shiro可做哪些事:

认证、授权、加密、会话管理、与web集成、缓存等

最简单的Shiro应用是怎样运行的:

应用代码通过Subject来进行认证和授权,而Subject又委托给SecurityManager
我们需要给Shiro的SecurityManager注入Realm,从而让SecurityManager能得到合法的用户及其权限进行判断。

简单Shiro应用运行流程
Apache Shiro的三大核心组件:

  1. Subject:当前用户的操作(所有的Subject实例都被绑定到一个SecurityManager上)
  2. SecurityManager:用于管理所有的Subject(Shiro架构的心脏,用来协调内部各安全组件,管理内部组件实例,并通过它来提供安全管理的各种服务)
  3. Realms:用于进行权限信息的验证(本质上是一个特定的DAO,必须指定至少一个Realm用来进行身份验证和授权 )

Authentication和Authorization:
在Shiro的用户权限认证过程中其通过两个方法来实现:

  1. Authentication:是验证用户身份的过程
  2. Authorization:是授权访问控制,用于对用户进行的操作进行认证授权,证明该用户是否允许进行当前操作,如访问某个链接,某个资源文件等。

其他组件:
除了上述几个组件外:Shiro还有几个组件:

  1. SessionManager:Shiro为任何应用提供了一个会话编程范式。
  2. CacheManager:对Shiro的其他组件提供缓存支持。

Shiro的优点:

  1. 简单你的身份认证,支持多种数据源
  2. 非常简单的加密API
  3. 对角色的简单的授权,支持细粒度的授权(方法级)
  4. 支持一级缓存,以提升应用程序的性能
  5. 内置的基于POJO企业会话管理,适用于Web以及非Web的环境
  6. 不跟任何的框架或者容器捆绑,可以独立运行

比较Spring Security和Apache Shiro:

  1. 相比Spring Security,Shiro在保持强大功能的同时,使用简单性和灵活性
  2. Spring Security:即便是一个一个简单的请求,最少得经过它的8个Filter
  3. Spring Security必须在Spring的环境下使用
  4. 初学Spring Security,曲线还是较大,需要深入学习其源码呵呵框架,配置起来也较费力

Shiro如何自实现认证:

Shiro的认证过程由Realm执行,SecurityManager会调用Realm包下的getAuthenticationInfo(AuthenticationToken token)方法。
实际开发中,通常提供org.apache.shiro.realm.AuthenticatingRealm 的实现类,并在该实现类中提供doGetAuthenticationInfo(AuthenticationToken token)方法的具体实现。

Shiro如何实现自实现授权:

实际开发中,通常提供org.apache.shiro.realm.AuthenticatingRealm 的实现类,并提供doGetAuthorizationInfo(PrincipalCollection principals)方法的具体实现。

配置ShiroConfig

  1. 创建一个方法并给注解@Bean将其交给Spring进行管理,返回类型为ShiroFilterFactoryBean类型 参数为SecurityManager securityManager
  2. 在方法中new ShiroFilterFactoryBean(),运用setSecurityManager()把securityManager传进去进行设置
  3. 运用setLoginUrl让用户在访问某个接口需要登录时跳转页面,运用setUnauthorizedUrl让用户登录后没有权限时跳转页面
  4. new LinkedHashMap<>();把相关路径所需的权限进行设置,之后把其交给setFilterChainDefinitionMap()中。
  5. 创建一个方法并给注解@Bean将其交给Spring进行管理,返回类型为SecurityManager类型的securityManager()方法,new DefaultWebSecurityManager();
  6. 因其securityManager可以管理各种组件,所以可以绑定各种自定义的组件,设置绑定realm推荐放到最后,不然某些情况下不生效。

Shiro有哪些组件:

  1. Authentication:身份认证/登录,验证用户是不是拥有相应的身份。
  2. Authorization:授权,即权限验证,验证某个已认证的用户是否拥有某个权限
  3. Session Manager:会话管理,即用户登录后就是一次会话,在没有退出之前,它的所有信息都在会话中;会话可以是普通JavaSE环境的,也可以是如Web环境的;
  4. Crypotgraphy:加密,保护数据的安全行,如密码加密存储到数据库,而不是明文存储;
  5. Web Support:Web支持,可以非常容易的集成到Web环境。
  6. Remember me:记住我,这是一个非常常见的功能,即一次登录后,下次再来的话不用登录了。
  • 2
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值