您的位置:首页 > 其它

shiro学习笔记二-----基础知识

2018-02-11 14:54 155 查看

Shiro的3个核心组件:



Subject :可以看作当前用户操作。

SecurityManager : 用于管理所有的Subject 。

Realms : 用于进行权限信息的验证,需要自己实现的,类似于数据库,至少要设置一个,可以设置多个。需要实现Realms的Authentication 和 Authorization。

认证实现

Shiro的认证过程最终会交由Realm执行,这时会调用Realm的getAuthenticationInfo(token)方法。

该方法主要执行以下操作:

1、检查提交的进行认证的令牌信息

2、根据令牌信息从数据源(通常为数据库)中获取用户信息

3、对用户信息进行匹配验证。

4、验证通过将返回一个封装了用户信息的AuthenticationInfo实例。

5、验证失败则抛出AuthenticationException异常信息。

我们需要自己写realm类,继承AuthorizingRealm,重载doGetAuthenticationInfo (),重写获取用户信息的方法

Shiro可以对以下4个方面进行安全控制:

Authentication : 用来验证用户身份,可以理解为登录操作。

Authorization : 授权访问控制,用于对用户进行授权,证明该用户是否允许进行当前操作,如访问某个URL,某个Resource等。

SessionManager:通过Shiro 提供的会话管理来获取Session中的信息,如:sso单点登录,进行session共享。

Cryptography: 密码管理,加密操作,shiro内部提供了使用MD5加密的方法,也可以自定义加密的方法。

完整架构图:



Shiro的核心:

ShiroFilterFactory:Shiro过滤器工厂类,具体的实现类是:ShiroFilterFactoryBean,此实现类是依赖于SecurityManager安全管理器。

SecurityManager:Shiro的安全管理,主要是身份认证的管理,缓存管理,cookie管理,所以在实际开发中我们主要是和SecurityManager进行打交道的,ShiroFilterFactory主要配置好了Filter就可以了。

Realm:用于身份信息权限信息的验证,类似于从数据库中读取数据。

Cache Manager(缓存管理):记住登录信息,登录用户所拥有的权限,总是从数据库中查询,效率很低,需要自己进行简单的实现,然后注入到SecurityManager让Shiro的安全管理器进行管理就好了。shiro提供了Ehcache的缓存管理,也可以使用Redis进行缓存管理。使用redis需要自己编写方法RedisCacheManager实现CacheManager接口。

Shiro内置的FilterChain:

Filter Name     |       Class
----------------|--------------------------------------------------------------------------
anon            |       org.apache.shiro.web.filter.authc.AnonymousFilter
authc           |       org.apache.shiro.web.filter.authc.FormAuthenticationFilter
authcBasic      |       org.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter
perms           |       org.apache.shiro.web.filter.authz.PermissionsAuthorizationFilter
port            |       org.apache.shiro.web.filter.authz.PortFilter
rest            |       org.apache.shiro.web.filter.authz.HttpMethodPermissionFilter
roles           |       org.apache.shiro.web.filter.authz.RolesAuthorizationFilter
ssl             |       org.apache.shiro.web.filter.authz.SslFilter
user            |       org.apache.shiro.web.filter.authc.UserFilter


通常可将过滤器分为两组 :

anon,authc,authcBasic,user : 第一组认证过滤器

anon: 所有url都都可以匿名访问;

authc: 需要认证才能进行访问;

authcBasic: 表示httpBasic认证

user: 配置remenberMe或认证通过可以访问

perms,port,rest,roles,ssl : 第二组授权过滤器

perms: perms[userInfo:view]表示用户必须通过认证,并且需要拥有userInfo:view的权限,才可以访问/userInfo

port : 根据端口号,port[8080]表示访问URL端口如果不是8080,怎会跳转到8080端口

rest:根据请求的方法,rest[user]相当于prems[user:method]

ssl: 根据安全的URL请求,协议是https

注意:user和authc不同,user表示不一定通过了认证,只要被shiro的remenberMe记住过登录状态,就可以访问,而authc必须要进行认证之后才可以访问。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  shiro