Shiro日记

项目快完工了,领导要求加上用户权限管理。我了个去,这算是地基工程啊,现在才加,可以预见要折腾一番了。

同事已经做了个用户管理系统,负责帐户管理和权限管理。并通过Dubbo注册发布服务,要求我从注册中心获得服务,并根据表单提交的用户名、密码进行鉴权和授权。

首先,给项目添加个Filter,在web.xml中添加shiroFilter

Shiro日记_第1张图片
添加shiroFilter

其次,需要通过Spring MVC注入shiroFilter,其定义如下

Shiro日记_第2张图片
shiroFilter注入

小插曲:在登陆跳转时,按道理是应该跳转到successUrl指定的地址上去,但是,我在无session登陆时候,老是跳转到默认的"/"(如果存在用户session,它会跳转到上次session会话时停留的页面,这个功能挺好)。最后,重写FormAuthenticationFilter类,并指定URL。参考:Shiro登录成功之后跳到指定URL。

Shiro日记_第3张图片
myFormAuthenticationFilter注入
Shiro日记_第4张图片
MyFormAuthenticationFilter类

回到正文:securityManager是Shiro的心脏;所有具体的交互都通过SecurityManager进行控制;它管理着所有Subject、且负责进行认证和授权、及会话、缓存的管理。参考:第一章 Shiro简介——《跟我学Shiro》

Shiro日记_第5张图片
shiro结构
Shiro日记_第6张图片
securityManager注入

这其中最重要的属性当属realm,可以有1个或多个Realm,可以认为是安全实体数据源,即用于获取安全实体的;可以是JDBC实现,也可以是LDAP实现,或者内存实现等等;由用户提供;根据数据源,对用户进行鉴权和授权。

Shiro日记_第7张图片
shiroDbRealm注入

shiroDbRealm类定义如下

Shiro日记_第8张图片
鉴权
Shiro日记_第9张图片
授权

其中,红框内的Service为注册在Dubbo中的分布式服务。可以在Dubbo配置文件中予以声明注入。(在项目启动过程中,可能会去检测服务provider是否存活,而影响项目运行,可以在该处设置check=false,关闭检测)

Shiro日记_第10张图片
Dubbo服务注入

最后,绘制登陆页面,配置首页根据MenuSearchInterface请求资源组织菜单项

Shiro日记_第11张图片
查询menus
Shiro日记_第12张图片
页面显示对应的url

你可能感兴趣的:(Shiro日记)