shiro学起来感觉是博大精深,自己学了几天,也只能是初步掌握了用法,但是感觉还是受益无穷。
重点是授权和认证。
认证的过程是只用原始密码和加盐方式,数据库存放的是加盐加密过的密码。(加盐的详解在我的另一篇文章中)
SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo(
activeUser, password,ByteSource.Util.bytes(salt), this.getName());
这个SimpleAuthenticationInfo方法中只有第二参数和第三个参数是认证通过需要的,第一个参数的作用不明显,可以传递给授权过程使用,第四个参数基本上没用,就是保存的时候的key,随便写即可。
授权过程,基本上就是
SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();
//将上边查询到授权信息填充到simpleAuthorizationInfo对象中
simpleAuthorizationInfo.addStringPermissions(permissions);
SimpleAuthorizationInfo
这个方法的基本上就是使用addStringPermissions加权限,
simpleAuthorizationInfo.addRoles(roles);加角色,
权限和角色就是来自认证过程的一个参数的用户信息,根据数据库查找即可。
然后就是路径的匹配认证和匹配授权的编写。
使用过滤器链
| 过滤器简称 | 对应的java类 |
| 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 |
| logout | org.apache.shiro.web.filter.authc.LogoutFilter |
anon:例子/admins/**=anon 没有参数,表示可以匿名使用。
authc:例如/admins/user/**=authc表示需要认证(登录)才能使用,FormAuthenticationFilter是表单认证,没有参数
perms:例子/admins/user/**=perms[user:add:*],参数可以写多个,多个时必须加上引号,并且参数之间用逗号分割,例如/admins/user/**=perms["user:add:*,user:modify:*"],当有多个参数时必须每个参数都通过才通过,想当于isPermitedAll()方法。
user:例如/admins/user/**=user没有参数表示必须存在用户, 身份认证通过或通过记住我认证通过的可以访问,当登入操作时不做检查
除了这种方式匹配登录和匹配权限,还有注解的方式
@RequiresPermissions("item:query"),这是匹配权限,
@RequiresRoles("role1"); 这是匹配角色。
@RequiresAuthentication(); 这是要求调用自定义的CustomRealm的认证方法
其他的使用配置登录login,需要配置formAuthenticationFilter,login.jsp页面的form表单的提交url是无效的,点击提交之后,自动出现访问loginUrl的ref的路径。相当于是login方法 认证过程, 然后就是直接转移到上个路径,没有上个路径就是访问/
shiro 的配置缓存cache之后,授权方法不会因为刷新而调用,这样会造成问题就是修改了用户的权限,但是用户的权限没能体现出来。解决办法是清除缓存。
shiro配置session之后,可以设置过期时间,这个session就是request的session,因为shiro代理了controller层的request, 用 controller层的request获取session和subject.getSession得到的是一样的。
shiro配置remmember me, 用于匹配user这种情况。
最后附上我测试用的代码,基本上很混乱,但是该有的都有。
https://download.youkuaiyun.com/download/a03910/10633397
本文介绍了Apache Shiro的基本用法,重点讨论了认证和授权流程。认证中讲解了加盐密码验证,授权则涉及权限和角色的设置,以及路径匹配的过滤器链配置。此外,还提到了Shiro的缓存、session管理和Remember Me功能的实现。
4374

被折叠的 条评论
为什么被折叠?



