关于Apache Shiro的相关面试试题分析

Apache Shiro是一个强大且易用的Java安全框架

文章目录


1. 核心功能

  • 身份验证:验证用户身份,常见方式有用户名密码登录、二维码登录、手机短信登录、脸部识别认证、指纹认证等。
  • 授权:根据用户权限控制对资源的访问,如判断用户是否具有某个操作的使用权限。
  • 会话管理:管理特定于用户的会话,包括创建和销毁会话,以及处理会话超时等。
  • 加密:对数据源使用加密算法加密,保证数据的安全性。

2. 核心组件

  • Subject:代表 “当前操作用户”,可以是人、第三方进程、后台账户等与软件交互的对象,其代表了当前用户的安全操作。
  • SecurityManager:是 Shiro 框架的核心,负责管理所有用户的安全操作,通过它来提供安全管理的各种服务。
  • Realm:充当 Shiro 与应用安全数据间的 “桥梁” 或 “连接器”,当执行认证和授权验证时,从配置的 Realm 中查找用户及其权限信息。

3. 主要特点

  • 易于使用:提供了易于理解的 API,可以快速、轻松地集成到任何应用程序中。
  • 全面性:涵盖了身份验证、授权、加密和会话管理等功能,可作为一站式的安全解决方案。
  • 灵活性:可以在任何应用程序环境中工作,不依赖特定的框架或容器。
  • Web 支持:拥有令人兴奋的 Web 应用程序支持,允许基于应用程序的 URL 创建灵活的安全策略和网络协议,并提供 JSP 库控制页面输出。
  • 低耦合:干净的 API 和设计模式使其容易与许多其他框架和应用程序集成。
  • 被广泛支持:是 Apache 软件基金会的一部分,有友好的开发和用户群体提供帮助。

Shiro 作为一个强大的 Java 安全框架,不仅提供了全面的身份验证、授权、加密和会话管理功能,还具备易于使用、灵活性强、支持多种环境等特点,适用于各种规模的 Java 应用程序。

4. 相关试题

1. Shiro 框架是什么?
  • 答案:Shiro 是一个强大且易用的 Java 安全框架,用于处理认证、授权、会话管理以及密码加密等功能。
2. Shiro 的优点有哪些?
  • 答案:简单的身份验证,支持多种数据源;细粒度的授权;支持一级缓存提升性能;基于 POJO 的企业会话管理;简单的 API 加密;不与任何框架绑定,可独立运行。
3. Shiro 的核心组件有哪些?
  • 答案:Subject、SecurityManager、Realm。
4. Shiro 认证执行流程是什么?
  • 答案:通过配置文件创建 SecurityManager;调用 subject.login 方法提交认证;SecurityManager 进行认证,最终由 ModularRealmAuthenticator 进行认证;从 Realm 获取用户信息并进行比对;返回认证结果。
5. Shiro 授权执行流程是什么?
  • 答案:对 subject 进行授权,调用 isPermitted 等方法;SecurityManager 执行授权,通过 ModularRealmAuthorizer 执行授权;从自定义的 Realm 中查询权限数据并返回结果[。
6. Shiro 注解有哪些?
  • 答案:@RequiresAuthentication、@RequiresUser、@RequiresGuest、@RequiresRoles、@RequiresPermissions。
7. 什么是对称式加密?常用算法有哪些?
  • 答案:对称加密使用同一个密钥进行加密和解密,常用算法有 DES、AES。
8. 什么是非对称加密?常用算法有哪些?
  • 答案:非对称加密使用公钥和私钥,常用算法有 RSA、SHS。
9. 什么是不可逆加密?常用算法有哪些?
  • 答案:不可逆加密无法解密,常用算法有 MD5、SHA256、SHA512。
10. 什么是加盐加密?
  • 答案:将口令和一个随机数相关联进行加密,提高安全性。
11. Spring 如何配置 Shiro?
  • 答案:在 web.xml 中配置 Shiro 的 Filter;在 Spring 配置文件中配置自定义 Realm、缓存策略、SecurityManager 等。
12. 比较 Spring Security 和 Shiro?
  • 答案:Spring Security 功能强大但复杂,需依赖 Spring 环境;Shiro 简单灵活,可独立运行,适用于各种应用。
13. 什么是资源实例的控制称为细粒度权限管理?
  • 答案:控制到数据级别的权限,如用户只允许修改本部门的员工信息。
14. 如何授权粗粒和细粒?
  • 答案:粗粒度可通过过滤器拦截 URL;细粒度可在业务层面进行个性化开发,如在 service 接口中添加验证。
15. Shiro 的过滤器有哪些?分别有什么作用?
  • 答案:authc(证后访问)、anon(匿名访问)、logout(退出登录)。
16. 如何在 Spring Boot 中使用 Shiro 实现记住我功能?
  • 答案:在配置文件中启用 rememberMe 功能,并在登录时设置 RememberMeCookie。
17. Shiro 如何实现单点登录?
  • 答案:配置多个应用共享相同的 SecurityManager 和 Realm,用户在一个应用中登录后,在其他应用中也可免密访问。
18. Shiro 中的 PrincipalCollection 和 CredentialsCollection 有什么区别?
  • 答案:PrincipalCollection 存储主体的身份信息,CredentialsCollection 存储主体的凭证信息。
19. 如何在 Shiro 中创建一个自定义的 Realm?
  • 答案:继承 AuthorizingRealm 类,并实现 doGetAuthenticationInfo 和 doGetAuthorizationInfo 方法。
20. Shiro 如何处理会话超时?
  • 答案:可以在配置文件中设置会话超时时间,也可以在代码中手动使会话失效。
21. Shiro 中的 SessionDAO 有什么作用?
  • 答案:用于会话的持久化操作,如保存、读取、删除会话。
22. 请解释 Shiro 中的缓存机制。
  • 答案:Shiro 提供了缓存机制来存储常用的认证和授权信息,以提高性能。
23. 如何在 Shiro 中实现验证码校验?
  • 答案:在登录表单中添加验证码输入框,并在后端验证用户输入的验证码是否正确。
24. Shiro 中的 AuthenticatingRealm 和 AuthorizingRealm 有什么区别?
  • 答案:AuthenticatingRealm 只处理认证逻辑,AuthorizingRealm 同时处理认证和授权逻辑。
25. Shiro 如何集成第三方身份提供者?
  • 答案:可以通过实现自定义的认证和授权逻辑,与第三方身份提供者进行集成。
26. Shiro 中的 PermissionResolver 有什么作用?
  • 答案:用于将字符串格式的权限串解析为具体的权限对象。
27. 如何在 Shiro 中实现动态权限加载?
  • 答案:可以实现自定义的 Realm,并在需要时动态加载权限数据。
28. Shiro 中的 AOP 权限检查是如何实现的?
  • 答案:通过在方法上添加注解,Shiro 会在方法执行前自动进行权限检查。

5. 相关代码

1. 添加依赖

首先,在你的 Maven 项目中添加 Shiro 的依赖:

<dependency>
    <groupId>org.apache.shiro</groupId
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HappyAcmen

非常感谢大佬的鼓励!感谢感谢!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值