首页 > 其他分享 >shiro面试题

shiro面试题

时间:2024-08-22 12:53:08浏览次数:4  
标签:面试题 SecurityManager 用户 认证 权限 shiro Subject

Shiro面试题

001什么是权限?

①权限管理:一般指根据系统设置的安全策略或者安全规则,用户可以访问而且只能访问自己被授权的资源,不多不少。权限管理几乎出现在任何系统里面,只要有用户和密码的系统。
②权限管理分类:
访问权限:管理员有增删改查权限,普通用户只有查询权限。
数据权限:管理员可以看到所有员工信息,但是员工只能看到自己的信息。

002什么是认证?

身份认证,就是判断一个用户是否为合法用户的处理过程。最常用的简单身份认证方式是系统通过核对用户输入的用户名和密码,看其是否与系统中存储的该用户的用户名和密码一致,来判断用户身份是否正确。例如:密码登录,手机短信验证、三方授权等。

003Shiro框架用过吗?

Apache Shiro是一个强大且易用的Java安全框架,能够非常清晰的处理认证、授权、管理会话以及密码加密。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。

004Shiro的优点?

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

005Shiro的核心组件?

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

006Shiro认证执行流程?

1)通过ini配置文件创建securityManager
2)调用subject.login方法主体提交认证,提交的token
3)securityManager进行认证,securityManager最终由ModularRealmAuthenticator进行认证。
4)ModularRealmAuthenticator调用IniRealm(给realm传入token) 去ini配置文件中查询用户信息
5)IniRealm根据输入的token(UsernamePasswordToken)从 shiro.ini查询用户信息,根据账号查询用户信息(账号和密码)
     如果查询到用户信息,就给ModularRealmAuthenticator返回用户信息(账号和密码)
     如果查询不到,就给ModularRealmAuthenticator返回null
6)ModularRealmAuthenticator接收IniRealm返回Authentication认证信息;
如果返回的认证信息是null,ModularRealmAuthenticator抛出异常(org.apache.shiro.authc.UnknownAccountException)
如果返回的认证信息不是null(说明inirealm找到了用户),对IniRealm返回用户密码 (在ini文件中存在)和 token中的密码 进行对比,如果不一致抛出异常(org.apache.shiro.authc.IncorrectCredentialsException)

007Shiro授权执行流程?

1)对subject进行授权,调用方法isPermitted("permission串")
2)SecurityManager执行授权,通过ModularRealmAuthorizer执行授权
3)ModularRealmAuthorizer执行realm(自定义的Realm)从数据库查询权限数据
调用realm的授权方法:doGetAuthorizationInfo
4)realm从数据库查询权限数据,返回ModularRealmAuthorizer
5)ModularRealmAuthorizer调用PermissionResolver进行权限串比对
6)如果比对后,isPermitted中"permission串"在realm查询到权限数据中,说明用户访问permission串有权限,否则 没有权限,抛出异常。

008Shiro注解有哪些?

1.@RequiresAuthentication : 表示当前Subject已经通过login进行了身份验证;即 Subject.isAuthenticated() 返回 true
2.@RequiresUser : 表示当前Subject 已经身份验证或者通过记住我登录的
3.@RequiresGuest : 表示当前Subject没有身份验证或通过记住我登陆过,即是游客身份
4.@RequiresRoles(value = { “admin”, “user” }, logical = Logical.AND) : 表示当前 Subject 需要角色 admin和user
5.@RequiresPermissions(value = { “user:a”, “user:b” }, logical = Logical.OR) : 表示当前 Subject 需要权限 user:a 或 user:b

 

标签:面试题,SecurityManager,用户,认证,权限,shiro,Subject
From: https://www.cnblogs.com/Jomini/p/18373628

相关文章

  • js面试题 图片懒加载!
    一、原理只加载可视区域内的图片,而那些还未滑动到可视区域的图片先不加载,直到用户滚动到这些资源即将可见的时候才进行加载。若一个页面有大量的图片资源,网页首次打开时,若同时加载完这些资源,需要消耗大量的时间,利用图片懒加载,先加载部分图片,既不会影响用户体验,又能大幅提升首......
  • 高级java每日一道面试题-2024年8月21日-框架篇[Spring篇]-使用IOC容器应该注意哪些?
    如果有遗漏,评论区告诉我进行补充面试官:使用IOC容器应该注意哪些?我回答:1.理解IOC的基本概念控制反转:在传统的编程模式中,程序会主动控制依赖关系的创建和管理。而在IoC容器中,这种控制权被反转给了容器本身。程序员只需要声明依赖关系,而由容器负责实例化和注入这些依......
  • Java笔试面试题AI答之集合(1)
    文章目录1.Java集合类框架的基本接口有哪些?2.为什么Java集合类没有实现Cloneable和Serializable接口?关于Cloneable接口关于Serializable接口为什么不默认实现这些接口?3.Java中的HashMap的工作原理是什么?1.数据结构2.哈希函数3.处理哈希冲突4.动态扩容5.Java8......
  • 前端高频面试题整理
    1.在React中,如何检验props?为什么要验证props?在React中,你可以使用PropTypes库来检查组件的props。这可以确保组件收到的props类型正确,避免在应用运行过程中出现意外错误。具体的做法是导入PropTypes库,并为每个prop定义相应的类型和是否必需。首先,你需要安装prop......
  • 面试题:求[2, n)之间的素数个数
    题目:求[2,n)之间的素数个数素数的定义:素数是指大于1的自然数,除了1和它本身之外没有其他因数的数。也就是说,素数只能被1和它本身整除,不能被其他自然数整除。解法1最简单的实现思路是,实现素数判断函数,然后从2~n逐个判断,然后统计素数个数publicstaticintcountP......
  • TCP,UDP,Socket,Http网络编程面试题 47道
    1.什么是网络编程        1.网络编程的本质是多台计算机之间的数据交换。数据传递本身没有多大的难度,不就是把一个设备中的数据发送给其他设备,然后接受另外一个设备反馈的数据。现在的网络编程基本上都是基于请求/响应方式的,也就是一个设备发送请求数据给另......
  • Java面试题--JVM大厂篇之未来已来:为什么ZGC是大规模Java应用的终极武器?
           ......
  • springboot自动配置原理-面试题
    网络上看很多文章并没什么用,重点没说到,不知道从那里入手讲,刷到的直接按照下面这个,背出来就行了1、当启动springboot应用程序的时候,会先创建SpringApplication的对象,在对象的构造方法中会进行某些参数的初始化工作,最主要的是判断当前应用程序的类型以及初始化器和监听器,在这个......
  • Java笔试面试题AI答之线程(2)
    文章目录7.如何确保N个线程可以访问N个资源同时又不导致死锁?1.资源排序与顺序访问2.资源分配策略3.避免占用并等待4.引入超时机制5.死锁检测与解决6.使用高级并发工具7.编程实践8.Java方法可以同时即是static又是synchronized的吗?9.什么是Java多线程同步?10......
  • Leetcode面试经典面试题-81.搜索旋转排序数组II
    解法都在代码里,不懂就留言或者私信,这个题目一定要注意重复元素的情况shpublicstaticbooleansearch(int[]nums,inttarget){/**空数组不可能找到任何数*/if(nums==null||nums.length==0){returnfalse;}/**如果......