【shiro】基于url的权限管理和shiro的对比
2017-12-20 11:13
417 查看
♦基于URL的权限管理
这种是企业中比较常用的,用的是web应用中filter来实现,用户请求URL,通过filter拦截,判断用户身份是否合法(用户认证),判断请求的地址是否是用户权限范围内的URL(授权)
认证过程:
①判断是否是公开的地址url(不登录也能用的)
②判断session里面是否存在值。(验证成功,登陆的时候,会把用户信息存到session里面)
③如果前两者都不符合,就用Interceptor拦截器,去跳转登陆页面,去进行登陆。(登陆的时候去查询数据库,一般的验证用户名和密码是否一致的方法就行)
登陆的结果:如果认证成功,则返回用户的信息(并存到session)里面,如果不成功,则返回null
授权过程:
①判断是否公共的地址(任何登陆的人都能用的)
② 通过登陆的人的信息,(根据这个人的角色,去查看这个人拥有哪些url地址的访问权限,这些信息都在数据库里存放,建5个表,吧user /role/资源url连接起来就行)但是这个信息通常是存在redis(session)这种不影响数据库性能,而且快速的缓存中。
③如果访问的地址在②查出来的循环一下的列表里,就放行,如果不在就直接跳转页面(无法访问)
♦shiro
shiro是一个权限管理框架,相比于Spring security框架更简单灵活,Spring security对Spring依赖性较强,shiro可以实现web系统,cs,分布式系统等系统的权限管理。
认证流程:
1、subject(主体)请求认证,调用subject.login(token)
2、SecurityManager (安全管理器)执行认证
3、SecurityManager通过ModularRealmAuthenticator进行认证。
4、ModularRealmAuthenticator将token传给realm,realm根据token中用户信息从数据库查询用户信息(包括身份和凭证)
5、realm如果查询不到用户给ModularRealmAuthenticator返回null,ModularRealmAuthenticator抛出异常(用户不存在)
6、realm如果查询到用户给ModularRealmAuthenticator返回AuthenticationInfo(认证信息)
7、ModularRealmAuthenticator拿着AuthenticationInfo(认证信息)去进行凭证(密码 )比对。如果一致则认证通过,如果不致抛出异常(凭证错误)。
授权过程:
1、对subject进行授权,调用方法isPermitted("permission串")
2、SecurityManager执行授权,通过ModularRealmAuthorizer执行授权
3、ModularRealmAuthorizer执行realm(自定义的CustomRealm)从数据库查询权限数据调用realm的授权方法:doGetAuthorizationInfo
4、realm从数据库查询权限数据,返回ModularRealmAuthorizer
5、ModularRealmAuthorizer调用PermissionResolver进行权限串比对
6、如果比对后,isPermitted中"permission串"在realm查询到权限数据中,说明用户访问permission串有权限,否则 没有权限,抛出异常。
这种是企业中比较常用的,用的是web应用中filter来实现,用户请求URL,通过filter拦截,判断用户身份是否合法(用户认证),判断请求的地址是否是用户权限范围内的URL(授权)
认证过程:
①判断是否是公开的地址url(不登录也能用的)
②判断session里面是否存在值。(验证成功,登陆的时候,会把用户信息存到session里面)
③如果前两者都不符合,就用Interceptor拦截器,去跳转登陆页面,去进行登陆。(登陆的时候去查询数据库,一般的验证用户名和密码是否一致的方法就行)
登陆的结果:如果认证成功,则返回用户的信息(并存到session)里面,如果不成功,则返回null
授权过程:
①判断是否公共的地址(任何登陆的人都能用的)
② 通过登陆的人的信息,(根据这个人的角色,去查看这个人拥有哪些url地址的访问权限,这些信息都在数据库里存放,建5个表,吧user /role/资源url连接起来就行)但是这个信息通常是存在redis(session)这种不影响数据库性能,而且快速的缓存中。
③如果访问的地址在②查出来的循环一下的列表里,就放行,如果不在就直接跳转页面(无法访问)
♦shiro
shiro是一个权限管理框架,相比于Spring security框架更简单灵活,Spring security对Spring依赖性较强,shiro可以实现web系统,cs,分布式系统等系统的权限管理。
认证流程:
1、subject(主体)请求认证,调用subject.login(token)
2、SecurityManager (安全管理器)执行认证
3、SecurityManager通过ModularRealmAuthenticator进行认证。
4、ModularRealmAuthenticator将token传给realm,realm根据token中用户信息从数据库查询用户信息(包括身份和凭证)
5、realm如果查询不到用户给ModularRealmAuthenticator返回null,ModularRealmAuthenticator抛出异常(用户不存在)
6、realm如果查询到用户给ModularRealmAuthenticator返回AuthenticationInfo(认证信息)
7、ModularRealmAuthenticator拿着AuthenticationInfo(认证信息)去进行凭证(密码 )比对。如果一致则认证通过,如果不致抛出异常(凭证错误)。
授权过程:
1、对subject进行授权,调用方法isPermitted("permission串")
2、SecurityManager执行授权,通过ModularRealmAuthorizer执行授权
3、ModularRealmAuthorizer执行realm(自定义的CustomRealm)从数据库查询权限数据调用realm的授权方法:doGetAuthorizationInfo
4、realm从数据库查询权限数据,返回ModularRealmAuthorizer
5、ModularRealmAuthorizer调用PermissionResolver进行权限串比对
6、如果比对后,isPermitted中"permission串"在realm查询到权限数据中,说明用户访问permission串有权限,否则 没有权限,抛出异常。
相关文章推荐
- shiro教程(1)-基于url权限管理
- Shiro学习笔记——(2)前奏-基于url的权限管理
- 【基于url权限管理 shiro(一)】--基础
- 【基于url权限管理 shiro(一)】--基础
- 003-基于URL的权限管理[不使用shiro]
- shiro-5基于url的权限管理
- shiro教程(1)-基于url权限管理
- 【基于url权限管理 shiro(二)】--权限管理解决方案
- SpringBoot整合mybatis、shiro、redis实现基于数据库的细粒度动态权限管理系统实例(转)
- 提供一套基于SpringBoot-shiro-vue的权限管理思路.
- 【权限管理】基于shiro的权限管理开发实现
- 本文主要介绍使用SpringBoot与shiro实现基于数据库的细粒度动态权限管理系统实例。
- 【Struts2进阶】Struts2拦截器实现基于Url的权限管理
- 【权限管理】基于shiro的权限管理开发实现
- 【shiro】(5)---基于Shiro的权限管理
- 【迁移2016-03-28 14:53】Shiro(一):基于资源的权限管理(RBAC)
- 基于shiro的权限管理-002授权
- SpringBoot整合mybatis、shiro、redis实现基于数据库的细粒度动态权限管理系统实例(转)
- SpringBoot整合mybatis、shiro、redis实现基于数据库的细粒度动态权限管理系统实例
- 基于AOP实现权限管理:通过shiro认证身份和模拟授权认证