shiro面试题

1.shiro可以完成哪些工作?
shiro可以帮助我们完成:认证、授权、加密、会话管理、与Web集成、缓存等

2.Apache Shiro 的三大核心组件
a、Subject :当前用户的操作

b、SecurityManager:用于管理所有的Subject

c、Realms:用于进行权限信息的验证

3.shiro有哪些组件?
a、Authentication:身份认证/登录,验证用户是不是拥有相应的身份;

b、Authorization:授权,即权限验证,验证某个已认证的用户是否拥有某个权限;即判断用户是否能做事情,常见的如:验 证某个用户是否拥有某个角色。或者细粒度的验证某个用户对某个资源是否具有某个权限;

c、Session Manager:会话管理,即用户登录后就是一次会话,在没有退出之前,它的所有信息都在会话中;会话可以是普通JavaSE环境的,也可以是如Web环境的;

d、Cryptography:加密,保护数据的安全性,如密码加密存储到数据库,而不是明文存储; e、Web Support:Web支持,可以非常容易的集成到Web环境;

f、Caching:缓存,比如用户登录后,其用户信息、拥有的角色/权限不必每次去查,这样可以提高效率;

g、Concurrency:shiro支持多线程应用的并发验证,即如在一个线程中开启另一个线程,能把权限自动传播过去; h、Testing:提供测试支持;

i、Run As:允许一个用户假装为另一个用户(如果他们允许)的身份进行访问;

g、Remember Me:记住我,这个是非常常见的功能,即一次登录后,下次再来的话不用登录了。

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

5.Shiro 的优点
a、简单的身份认证, 支持多种数据源

b、对角色的简单的授权, 支持细粒度的授权(方法级) c、支持一级缓存,以提升应用程序的性能

d、内置的基于 POJO 企业会话管理, 适用于 Web 以及非 Web 的环境e、非常简单的加密 API

f、不跟任何的框架或者容器捆绑, 可以独立运行

1、 什么是shiro
Shiro是一个强大易用的java安全框架,提供了认证、授权、加密、会话管理、与web集成、缓存等功能,对于任何一个应用程序,都可以提供全面的安全服务,相比其他安全框架,shiro要简单的多。

2、 Shiro的核心概念Subject、SecurityManager、Realm
Subject:主体,代表了当前“用户”,这个用户不一定是一个具体的人,与当前应用交互的任何东西都是Subject,如爬虫、机器人等;即一个抽象概念;所有Subject都绑定到SecurityManager,与Subject的所有交互都会委托给SecurityManager;可以把Subject认为是一个门面;SecurityManager才是实际的执行者。
SecurityManager:安全管理器;即所有与安全有关的操作都会与SecurityManager交互;且它管理着所有Subject;可以看出它是shiro的核心, SecurityManager相当于spring mvc中的dispatcherServlet前端控制器。
Realm:域,shiro从Realm获取安全数据(如用户、角色、权限),就是说SecurityManager要验证用户身份,那么它需要从Realm获取相应的用户进行比较以确定用户身份是否合法;也需要从Realm得到用户相应的角色/权限进行验证用户是否能进行操作;可以把Realm看成DataSource,即安全数据源。

3、 Authentication 身份验证
principals:身份,即主体的标识属性,可以是任何东西,如用户名、邮箱等,唯一即可。
credentials:证明/凭证,即只有主体知道的安全值,如密码/数字证书等。
身份认证流程:

1.首先调用Subject.login(token)进行登录,其会自动委托给SecurityManager,调用之前必须通过SecurityUtils.setSecurityManager()设置;
2.SecurityManager负责真正的身份验证逻辑;它会委托给Authenticator进行身份验证;
3.Authenticator才是真正的身份验证者,shiro api中核心的身份认证入口点,此处可以自定义插入自己的实现;
4.Authenticator可能会委托给相应的AuthenticationStrategy进行多Realm身份验证,默认ModularRealmAuthenticator会调用AuthenticationStrategy进行多Realm身份验证;
5.Authenticator会把相应的token传入Realm,从Realm获取身份验证信息,如果没有返回/抛出异常表示身份验证失败了。此处可以配置多个Realm,将按照相应的顺序及策略进行访问。

Authenticator及AuthenticationStrategy

6.Authenticator的职责是验证用户账号,是shiro api中身份验证核心的入口点。