1.Shiro作用
认证(登录),授权(权限分配,权限控制). 密码加密,会话管理,缓存功能.
2.Shiro中核心对象
主体Subject: 登录的用户或者程序.
安全管理器SecurityManager: 请求的入口.Subject所有的方法都会交给SecurityManager进行处理
数据源Realm: SecurityManage会关联Realm.进行认证或者鉴权的时候,通过Realm从数据库中查询用户信息和权限信息.
3.基于ini实现Shiro认证(入门,不需要掌握)
基于自定义Realm实现Shiro认证(实际使用,需要掌握)
认证流程:
1.需要把SecurityManager和Realm定义出来并关联.
2.将SecurityManager绑定到当前的环境中(把对象设置SecurityUtils的静态属性中)
3.通过SecurityUtils创建Subject对象. 对象默认就会关联SecurityManager
4.进行登录需要将用户名和密码封装到UsernamePasswordToken中.
5.调用subject.login(token);====>将请求交给SecurityManager,将请求交给认证器,认证器调用Realm返回用户信息info.把前台的密码和返回的info密码进行比对.
4.基于ini实现Shiro鉴权(入门,不需要掌握)
基于自定义Realm实现Shiro鉴权(实际使用,需要掌握)
提供这些API
isPermited()===>返回boolean类型
hasRole()===>返回boolean类型
checkPermission(); ===>如果没有权限,会抛出异常
checkRole();===>如果没有角色,会抛出异常
认证流程:
1.必须先登录
2.调用subject.hasRole();===>调用SecurityManager的鉴权方法.将当前登录用户的对象作为参数传入,需要检查的权限传入.
3.调用Realm根据登录用户的信息查询数据库的角色和权限集合,返回info对象给鉴权器.
4.鉴权器根据用户返回的info,判断该用户是否有该权限信息.
5.Shiro加盐加密(了解)
为什么进行加密: 为了用户的信息安全.
为什么要进行加盐: 如果多个用户使用的密码都是一样,最终数据库没有加盐,密文都是一样>
操作步骤:
1.数据库存储的密文和盐.
2.需要Realm中返回盐的信息.
return new SimpleAuthenticationInfo(user,user.getPassword(), ByteSource.Util.bytes(user.getSalt()),getName());
3.在Realm中设置匹配匹配器(设置加密算法和加密次数)
HashedCredentialsMatcher matcher = new HashedCredentialsMatcher("md5");//加密算法
matcher.setHashIterations(3);//加密次数
在realm进行关联
realm.setCredentialsMatcher(matcher);
Shiro的了解和作用(一)
最新推荐文章于 2024-03-24 09:51:22 发布