项目快完工了,领导要求加上用户权限管理。我了个去,这算是地基工程啊,现在才加,可以预见要折腾一番了。
同事已经做了个用户管理系统,负责帐户管理和权限管理。并通过Dubbo注册发布服务,要求我从注册中心获得服务,并根据表单提交的用户名、密码进行鉴权和授权。
首先,给项目添加个Filter,在web.xml中添加shiroFilter

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

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


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


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

shiroDbRealm类定义如下


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

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


网友评论