Shiro 高频面试题及答案(真实面试版)_第1页
Shiro 高频面试题及答案(真实面试版)_第2页
Shiro 高频面试题及答案(真实面试版)_第3页
Shiro 高频面试题及答案(真实面试版)_第4页
Shiro 高频面试题及答案(真实面试版)_第5页
已阅读5页,还剩1页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Shiro高频面试题及答案(真实面试版)一、基础认知类1.简单说说你对Shiro的理解,它的核心作用是什么?Shiro是一款开源的、轻量级Java安全权限框架,相较于SpringSecurity,它更加轻量化、上手简单、依赖少,不强制绑定Spring生态,可独立使用。它的核心作用主要是完成系统的认证、授权、会话管理、加密四大核心安全操作,帮助开发者快速实现登录校验、权限控制、角色拦截、密码加密、会话过期管理等通用安全功能,不用手动重复开发安全底层逻辑。2.Shiro和SpringSecurity的区别?项目中为什么选择Shiro?核心区别:轻量化程度:Shiro轻量、独立、无侵入,依赖极少;SpringSecurity功能全面但较重,和Spring生态深度绑定。上手难度:Shiro配置简单、源码易懂、自定义扩展方便;SpringSecurity配置繁琐,入门成本更高。功能覆盖:SpringSecurity支持OAuth2、微服务、分布式安全等高级特性;Shiro专注单机基础权限,原生不支持分布式。选型原因:传统单体项目、中小型后台管理系统,权限逻辑简单,优先选Shiro,开发效率更高、维护成本更低;微服务、需要第三方登录、分布式认证场景一般选用SpringSecurity。3.Shiro的四大核心功能是什么?分别解释一下?Authentication(认证):校验用户身份,也就是日常的登录验证,判断用户是谁、账号密码是否正确。Authorization(授权):身份认证通过后,校验用户拥有的角色和权限,判断用户能访问哪些接口、哪些页面、能执行哪些操作。SessionManagement(会话管理):独立的会话管理机制,不依赖Web容器,普通Java项目也能使用,支持会话创建、过期、销毁、在线用户统计等。Cryptography(加密):提供开箱即用的加密工具,支持密码加盐、哈希加密、对称/非对称加密,常用MD5、SHA等算法,避免明文存储密码。二、核心架构与原理类1.说说Shiro的核心组件及其职责?Shiro核心组件各司其职,核心常用组件如下:Subject(主体):代表当前操作的用户,所有安全操作都基于Subject完成,是开发者直接交互的对象,封装了用户的所有权限、会话信息。SecurityManager(安全管理器):Shiro的核心中枢,统筹所有安全操作,管理认证、授权、会话、缓存等所有功能,相当于整个框架的调度中心。Realm(领域):数据桥梁,Shiro不会主动查询数据库,所有用户信息、角色权限数据都由Realm从数据库查询并封装,是连接Shiro和业务数据的核心。Authenticator(认证器):专门负责用户登录认证,校验账号密码合法性,处理认证流程。Authorizer(授权器):专门负责权限校验,判断用户是否拥有对应角色、权限标识。SessionManager(会话管理器):管理Shiro自定义会话,脱离Tomcat等容器会话。CacheManager(缓存管理器):缓存用户权限、角色信息,避免每次请求都查询数据库,提升接口性能。2.Shiro的完整登录认证流程是怎样的?整体流程连贯且闭环,实际执行步骤如下:前端传入用户名、密码,后端封装为UsernamePasswordToken令牌对象;获取当前Subject,调用subject.login(token)发起登录认证;Subject将认证请求交给底层SecurityManager;SecurityManager调用Authenticator认证器执行认证逻辑;认证器调用自定义Realm的doGetAuthenticationInfo方法,从数据库查询用户信息;Shiro自动对比传入的密码和数据库加密后的密码,完成校验;校验成功则创建会话,保存用户信息;校验失败抛出对应异常(账号不存在、密码错误、账号锁定等)。3.Realm有哪些类型?自定义Realm怎么做?Shiro自带多种Realm,常用的有IniRealm、JdbcRealm、自定义Realm,官方自带Realm灵活性差,实际项目基本都用自定义Realm。自定义Realm核心步骤:自定义类继承AuthorizingRealm;重写doGetAuthenticationInfo方法:处理登录认证,查询用户、校验账号密码;重写doGetAuthorizationInfo方法:处理授权,查询用户角色、权限标识,封装返回;将自定义Realm注入SecurityManager,完成配置。三、授权与权限实战类1.Shiro的授权流程是什么?用户登录认证成功后,访问需要权限的接口/页面;Shiro拦截请求,触发授权校验;调用自定义Realm的doGetAuthorizationInfo方法,从数据库查询当前用户的角色、权限;将权限信息缓存到内存中(开启缓存后);校验当前用户是否拥有访问所需的角色或权限,通过则放行,无权限则抛出未授权异常。2.Shiro有哪些权限控制方式?项目中常用三种方式,适配不同场景:注解式权限控制(最常用):在接口方法上加注解,简洁高效。

@RequiresAuthentication:需要登录认证

@RequiresRoles:需要指定角色

@RequiresPermissions:需要指定权限标识代码式权限控制:在业务代码中手动判断,灵活度高,适合复杂权限逻辑。

subject.hasRole()、subject.isPermitted()等方法配置文件/过滤器权限控制:在Shiro过滤器中配置路径拦截,指定哪些路径需要登录、需要对应权限,适合全局路径拦截。3.@RequiresRoles和@RequiresPermissions的区别?@RequiresRoles:基于角色控制,粒度较粗,比如admin、user角色,适合大类权限拦截。@RequiresPermissions:基于权限标识控制,粒度极细,比如sys:user:add、sys:user:edit,适合接口级、操作级精准权限控制,企业项目主流用法。四、加密、会话与缓存1.Shiro密码加密怎么做?为什么要加盐?项目中统一使用MD5加盐+多次哈希的加密方式,避免明文存储密码。实现方式:配置HashedCredentialsMatcher,指定加密算法为MD5、加密次数(一般1024次),自定义Realm中返回带盐值的用户信息,Shiro自动完成密码比对。加盐的作用:防止彩虹表破解。如果不加盐,相同密码加密后结果一致,容易被批量破解;加盐后,每个用户盐值唯一,加密结果唯一,大幅提升密码安全性。2.Shiro自带会话和Web容器会话的区别?Shiro会话是独立的,不依赖Tomcat、Jetty等Web容器,普通Java控制台项目也能使用;支持自定义会话超时时间、会话持久化、在线用户管理、会话强制下线;原生Web会话绑定容器,扩展性差,无法跨容器使用,Shiro会话通用性更强。3.Shiro为什么要开启缓存?缓存失效问题怎么解决?用户授权时,每次请求都会调用Realm查询数据库角色权限,频繁查库会导致接口性能低下,开启缓存后,权限信息会缓存到内存,大幅减少数据库查询次数。缓存失效场景及解决方案:后台修改用户角色、权限后,缓存不会自动更新,导致用户权限不刷新。

解决方式:权限修改完成后,手动清空当前用户的权限缓存,或清空全部权限缓存,让系统重新加载最新权限。五、高频问题与异常处理1.Shiro登录常见异常有哪些?分别代表什么?UnknownAccountException:账号不存在IncorrectCredentialsException:密码错误LockedAccountException:账号被锁定ExcessiveAttemptsException:登录次数过多,被临时锁定AuthenticationException:通用认证异常2.Shiro如何实现账号锁定、登录次数限制?通过自定义CredentialsMatcher或整合Ehcache/Redis,统计用户登录失败次数:登录失败次数达到阈值后,标记账号锁定或设置临时锁定时间,拒绝用户登录,以此防止暴力破解。3.Shiro无法拦截静态资源怎么处理?在Shiro过滤器配置中,将静态资源路径(/css/**、/js/**、/images/**)设置为anon匿名访问,放行静态资源,避免拦截导致页面样式、脚本加载失败。六、进阶面试题(分布式/优化)1.Shiro原生不支持分布式,集群环境怎么解决?单机Shiro的会话、缓存都是本地内存,集群部署会出现会话不共享、权限不一致问题,解决方案:自定义SessionManager,将会话信息存入Redis,实现分布式会话共享;自定义CacheManager,将权限缓存存入Redis,替代本地内存缓存;统一集群节点的会话和权限缓存,保证多节点登录、授权状态一致。2.Shiro和JWT如何整合使用?前后端分离项目常用整合方案:用户登录成功后,后端生成JWT令牌返回前端;前端每次请求携带Token,自定义Shiro过滤器拦截请求,解析Token;校验Token合法性、有效期,通过后封装用户信息,交给Shiro完成认证授权;舍弃Shiro原生会话,实现无状态登录,适配前后端分

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论