发表于: 2018-03-22 22:43:55
1 698
今天完成的事情:开始复盘方案的梳理
整理了下用户登录聚金融后台的一个前后端流程:
后台系统其实对后端的挑战特别大,尤其是权限控制。根据需求文档,我发现这是一个典型的RBAC设计模式,于是我打算用shiro的拦截器链完成这部分功能:
写了个kickoutSessionControlFilter,用于控制并发登录人数的
spring配置:
<bean id="kickoutSessionControlFilter"
class="com.ptteng.shiro.filter.KickoutSessionControlFilter">
<property name="cacheManager" ref="cacheManager"/>
<property name="sessionManager" ref="sessionManager"/>
<property name="kickoutAfter" value="false"/>
<property name="maxSession" value="2"/>
<property name="kickoutUrl" value="xxxxxxxx"/>
</bean>
cacheManager:使用cacheManager获取相应的cache来缓存用户登录的会话;用于保存用户—会话之间的关系的;
sessionManager:用于根据会话ID,获取会话进行踢出操作的;
kickoutAfter:是否踢出后来登录的,默认是false;即后者登录的用户踢出前者登录的用户;
maxSession:同一个用户最大的会话数,默认1;比如2的意思是同一个用户允许最多同时两个人登录;
kickoutUrl:被踢出后重定向到的地址;
shiroFilter相关配置 :
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="securityManager" ref="securityManager"/>
<property name="loginUrl" value="/login"/>
<property name="filters">
<util:map>
<entry key="authc" value-ref="formAuthenticationFilter"/>
<entry key="sysUser" value-ref="sysUserFilter"/>
<entry key="kickout" value-ref="kickoutSessionControlFilter"/>
</util:map>
</property>
<property name="filterChainDefinitions">
<value>
/login = authc
/logout = logout
/authenticated = authc
/** = kickout,user,sysUser
</value>
</property>
</bean>
此处配置除了登录等之外的地址都走kickout拦截器进行并发登录控制。
明天试着跑着看看
明天计划的事情:继续复盘
遇到的问题: 模块管理的功能有点难做,正在思考
收获:锻炼了逻辑能力
评论