在Java教程中,大家会学到shiro框架,Apache Shiro是一个强大而灵活的开源安全框架,它能够干净利落地处理身份认证、授权、企业会话管理和加密。相比spring security框架更简单灵活,spring security对spring依赖较强。shiro可以实现web系统、c/s、分布式等系统权限管理。
核心组件:
Subject:主体,即当前操作用户
SecurityManager:安全管理器,它是Shiro框架的核心,典型的Facade模式,Shiro通过SecurityManager来管理内部组件实例,并通过它来提供安全管理的各种服务
Realm:领域,充当了Shiro与应用安全数据间的“桥梁”或者“连接器”。也就是说,当对用户执行认证(登录)和授权(访问控制)验证时,Shiro会从应用配置的Realm中查找用户及其权限信息
Authenticator:认证器,AuthenticationStrategy如果存在多个realm,则按着具体的策略进行登录控制,例如:如果有一个realm成功即可登录、必须所有realm都成功才能登录等
Authorizer:授权器,决定subject能拥有什么样角色或者权限。
SessionManager:session管理器,创建和管理用户session。通过设置这个管理器,shiro可以在任何环境下使用session。
CacheManager:缓存管理器,可以减少不必要的后台访问。提高应用效率,增加用户体验。
Cryptography:Shiro的api大幅度简化java api中繁琐的密码加密。
subject(主体)请求认证,调用subject.login(token)
SecurityManager (安全管理器)执行认证
SecurityManager通过ModularRealmAuthenticator进行认证。
ModularRealmAuthenticator将token传给realm,realm根据token中用户信息从数据库查询用户信息(包括身份和凭证)
realm如果查询不到用户给ModularRealmAuthenticator返回null,ModularRealmAuthenticator抛出异常(用户不存在)
realm如果查询到用户给ModularRealmAuthenticator返回AuthenticationInfo(认证信息)
ModularRealmAuthenticator拿着AuthenticationInfo(认证信息)去进行凭证(密码)比对。如果一致则认证通过,如果不致抛出异常(凭证错误)。
对subject进行授权,调用方法isPermitted("*")或者hasRole("*")
SecurityManager执行授权,通过ModularRealmAuthorizer执行授权
ModularRealmAuthorizer执行realm(自定义的CustomRealm)从数据库查询权限数据调用realm的授权方法:doGetAuthorizationInfo
realm从数据库查询权限数据,返回ModularRealmAuthorizer
ModularRealmAuthorizer调用PermissionResolver进行权限串比对
如果比对后,isPermitted中"permission串"在realm查询到权限数据中,说明用户访问permission串有权限,否则没有权限,抛出异常。
以上就是关于“Shiro工作原理的解析”的介绍,大家如果对此比较感兴趣,想了解更多相关知识,不妨来关注一下极悦的Shiro入门视频,里面的课程内容由浅到深,通俗易懂,适合小白学习,希望对大家能够有所帮助。
你适合学Java吗?4大专业测评方法
代码逻辑 吸收能力 技术学习能力 综合素质
先测评确定适合在学习