shiro 基本用法。

本文介绍了Apache Shiro的基本用法,重点讨论了认证和授权流程。认证中讲解了加盐密码验证,授权则涉及权限和角色的设置,以及路径匹配的过滤器链配置。此外,还提到了Shiro的缓存、session管理和Remember Me功能的实现。

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

 

 

 

 

 

 

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值