版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Shiro高频面试题及详细真实答案(实战口语版)一、Shiro基础认知面试题1、简单说说你对Shiro的理解,它是做什么的?Shiro是Java领域一个轻量级的、开源的安全权限框架,主要用来做系统的身份认证、授权、会话管理、加密,相比于SpringSecurity它更轻、上手简单、依赖少,不绑定Spring环境,普通Java项目、Web项目都能用。日常开发中,我们主要用它解决登录校验、接口权限控制、角色访问限制、用户会话管理这些通用的安全问题,不用自己手写复杂的权限逻辑。2、Shiro和SpringSecurity的区别?工作中怎么选择?核心区别:1)轻量化:Shiro非常轻,独立框架,无强依赖;SpringSecurity绑定Spring生态,较重、配置多。2)适配场景:Shiro不仅能用于Web,普通Java项目、桌面项目都能用;SpringSecurity基本只用于Web项目。3)功能强度:SpringSecurity功能更全面,自带OAuth2、单点登录、防护机制更完善;Shiro基础权限够用,高级特性需要自己扩展。4)学习成本:Shiro简单易懂,上手快;SpringSecurity门槛更高。选型:小型项目、非Spring项目、追求开发效率选Shiro;大型微服务、需要OAuth2、第三方登录、高安全防护选SpringSecurity。3、Shiro的核心四大功能是什么?Authentication认证:校验用户账号密码,判断用户能不能登录,也就是“你是谁”。Authorization授权:登录成功后,判断用户有哪些角色、哪些权限,能不能访问某个接口/资源,也就是“你能干什么”。SessionManagement会话管理:管理用户登录会话,支持普通Web会话、离线会话,就算不是Web项目也能使用session。Cryptography加密:提供密码加密、加盐、哈希算法,比如MD5、SHA256,避免明文存密码。4、Shiro的核心架构组件有哪些?各自作用?1)Subject:当前操作的用户主体,所有和用户相关的操作(登录、退出、鉴权)都通过Subject执行,是我们代码层面直接打交道的对象。2)SecurityManager:安全管理器,Shiro的核心中枢,统筹所有安全操作,相当于总调度,所有Subject的操作最终都会交给SecurityManager处理。3)Realm:数据源,Shiro不会自己查数据库,需要通过Realm从数据库中获取用户信息、角色、权限数据,相当于Shiro和业务数据的桥梁。4)Authenticator:认证器,专门负责登录身份校验,比对账号密码是否正确。5)Authorizer:授权器,专门负责权限、角色校验,判断用户是否有访问权限。6)SessionManager:会话管理器,负责session的创建、销毁、过期管理。7)CacheManager:缓存管理器,缓存用户权限、角色数据,避免每次请求都查数据库。二、认证与登录核心面试题5、Shiro完整的登录认证流程是怎样的?我按实际代码执行流程说,非常清晰:1)前端传用户名密码,后端封装成UsernamePasswordToken;2)获取当前Subject,调用subject.login(token)发起登录;3)Subject会把登录请求交给底层的SecurityManager;4)SecurityManager调用Authenticator认证器开始认证;5)认证器会调用自定义Realm的doGetAuthenticationInfo方法;6)我们在Realm中根据用户名查询数据库,返回用户信息、加密后的密码;7)Shiro自动对比前端传的密码(加密后)和数据库密码是否一致;8)一致则登录成功,创建会话;不一致直接抛出对应异常(账号不存在、密码错误等)。6、Realm中doGetAuthenticationInfo返回值的作用?参数含义?这个方法是用来获取数据库用户信息,完成密码比对的。返回的SimpleAuthenticationInfo三个核心参数:1)principal:用户身份信息,一般存用户账号、用户ID,后续鉴权可以获取;2)credentials:数据库中加密后的密码,Shiro用这个和token密码做比对;3)realmName:当前Realm的名称。注意:密码校验不用自己写if判断,交给Shiro自带的密码匹配器自动校验即可。7、Shiro登录常见异常有哪些?工作中怎么处理?都是开发中常遇到的:-UnknownAccountException:账号不存在-IncorrectCredentialsException:密码错误-LockedAccountException:账号被锁定-ExcessiveAttemptsException:登录次数过多被限制工作中我会在登录接口try-catch捕获这些异常,给前端返回友好提示,而不是直接抛堆栈错误。8、Shiro密码加密怎么做?加盐的意义是什么?生产环境绝对不用明文密码,我一般用Shiro的HashedCredentialsMatcher做密码校验,搭配MD5或SHA256加密。流程:用户注册时,密码+随机盐值+多次哈希加密,存入数据库;登录时,Shiro用同样的盐值和算法加密前端密码,和库中对比。加盐的意义:防止彩虹表破解,就算数据库泄露,黑客也无法通过通用密码表反推原始密码,极大提升安全性。每个用户单独一个盐值,安全性最高。三、授权与权限控制面试题9、Shiro授权的流程?和认证的区别?授权流程:1)用户登录成功后,访问需要权限的接口;2)Shiro拦截请求,触发授权流程;3)调用Realm的doGetAuthorizationInfo方法;4)从数据库查询当前用户的角色、权限标识;5)封装成SimpleAuthorizationInfo返回给Shiro;6)Shiro校验用户是否拥有当前资源的权限,通过则放行,没有则拦截报无权限。区别:认证是登录阶段,校验账号密码;授权是访问资源阶段,校验角色和权限。10、Shiro有哪些权限控制方式?四种常用方式,工作中混用:1)注解式:最常用,控制器/方法上加注解,比如@RequiresPermissions、@RequiresRoles,简洁方便;2)代码式:代码中手动判断,subject.checkPermission、subject.hasRole,适合复杂业务判断;3)配置文件拦截:在Shiro过滤器中配置url对应的权限,统一拦截接口;4)页面标签:前端页面通过shiro标签控制按钮、菜单显示隐藏。11、@RequiresPermissions和@RequiresRoles的区别?-@RequiresRoles:角色校验,比如admin、user,粒度比较粗,适合整体模块权限控制;-@RequiresPermissions:权限标识校验,粒度更细,比如sys:user:add、sys:user:list,适合按钮、接口级别的精准控制;实际开发主流用权限标识,因为角色可以自定义,权限标识更统一、更灵活。12、权限不生效、授权方法不执行是什么原因?这个是面试高频坑点,我遇到过好几次,常见原因:1)没有开启Shiro注解支持,没配置DefaultAdvisorAutoProxyCreator;2)方法是内部调用(同类方法互相调用),AOP拦截失效,注解不生效;3)授权数据被缓存了,修改权限后没清空缓存,导致一直读旧数据;4)Realm中返回的权限标识和注解/配置的标识不一致,大小写、符号问题;5)未登录状态直接访问,优先拦截未登录,不会进入授权判断。四、会话与缓存面试题(实战重点)13、Shiro的Session和Web原生Session有什么区别?原生Session依赖Web容器,只能在Web项目用;Shiro自己封装了一套Session机制,不依赖Web容器,普通Java项目也能使用。而且Shiro会话可以自定义超时时间、持久化、分布式缓存,比原生Session更灵活,适配前后端分离、分布式项目。14、为什么Shiro需要开启权限缓存?不开启会有什么问题?如果不开启缓存,用户每访问一次需要权限的接口,都会执行一次doGetAuthorizationInfo,频繁查数据库,并发大的时候数据库压力非常大。开启缓存后,用户第一次登录授权后,角色、权限数据会被缓存,后续请求直接读缓存,不用反复查库,提升接口性能。一般我们用Redis实现Shiro缓存,适配分布式项目。15、用户权限更新后,为什么需要手动清空缓存?怎么处理?Shiro默认会缓存用户权限,缓存没过期的情况下,就算数据库改了用户角色、权限,用户前端权限还是旧的,不会实时生效。所以在后台新增、修改、删除用户权限/角色的接口里,需要手动清除当前用户或所有用户的权限缓存,保证权限实时刷新。五、过滤器与拦截机制面试题16、Shiro常用的内置过滤器有哪些?工作中最常用的几个:-anon:匿名访问,无需登录,比如登录接口、验证码接口;-authc:必须登录认证后才能访问;-perms:需要指定权限才能访问;-roles:需要指定角色才能访问;-user:必须是记住我或登录状态的用户;-logout:退出登录拦截器。17、authc和user过滤器的区别?-authc:必须是主动登录的用户,记住我状态无法访问;-user:主动登录、记住我自动登录的用户都可以访问,范围更广。六、前后端分离+分布式Shiro面试题18、前后端分离项目,Shiro怎么改造?解决什么问题?传统Shiro依赖Session、页面跳转,前后端分离项目不能用页面跳转,需要自定义改造:1)废弃原生Session,使用Token令牌机制(JWT);2)自定义过滤器,拦截前端请求,解析Header中的token;3)校验token有效性,有效则绑定Subject,完成认证;4)所有异常统一返回JSON格式,不跳转页面,给前端返回错误码;5)用Redis缓存token、用户权限、会话信息,实现分布式会话共享。19、分布式项目中Shiro会遇到什么问题?怎么解决?核心问题:默认Shiro会话、缓存都是本地内存,多台服务器部署时,用户请求落到不同服务器,会话不共享、权限缓存不一致,会导致重复登录、权限失效。解决方案:统一使用Redis实现Session持久化和权限缓存,所有服务节点共享同一份会话和权限数据,保证分布式环境下登录状态、权限一致。七、高频坑点&进阶面试题20、Shiro的记住我功能原理?安全隐患是什么?记住我会在用户登录成功后,把用户身份信息加密存入Cookie,下次访问不用登录,自动认证。隐患:记住我只是完成认证,不会刷新会话,且如果Cookie被盗取,会被冒用。所以核心接口必须搭配权限校验,不能只依靠登录状态。生产环境一般对后台管理系统关闭记住我,或者缩短过期时间。21、Shiro如何实现账号登录锁定(输错密码锁定)?自定义密码匹配器,记录用户密码输错次数,存入Redis;每次登录失败次数+1,超过阈值(比如5次)就锁定账号,设置锁定过期时间。登录成功后清空错误次数。同时捕获ExcessiveAttemptsException异常提示用户账号锁定。22、说说Shiro的认证流程中,哪些地方可以自定义扩展?1)自定义Realm:自定义用户
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 智能电网建设合作投资协议合同三篇
- 期中素养测试卷(1-2单元试卷)2026-2027学年三年级科学上册教科版(含答案)
- 航空航天领域技术研究员科研成果KPI考核表
- 财务分析师绩效季度评价表
- 智能物流系统效能考评表
- VR技术助力电商直播营销方案手册
- 电商运营人员库存管理流程手册
- 绩效年度分析表
- 网络内容运营人员KPI考核表
- 农业科技公司农业技术专员KPI考核表
- 施工方案审查监理实施细则
- 大型机械设备运行路线及作业位置承载能力校核方案
- 新教科版 三年级上册 《天气》单元 第 8课《天气的影响》 教学课件
- 聚丙烯(PP)原材料MSDS报告(PPH-T03牌号)
- 企业负责人带班检查记录表
- 2026全球劳动力市场洞察报告
- 《灌区泵站系统水锤消除罐选型及应用技术规程》
- 塞尔维亚国家介绍
- 子宫内膜异位症中医课件
- 韵达快递运输合同协议
- 糖尿病血糖管理
评论
0/150
提交评论