发表于: 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拦截器进行并发登录控制。

 

明天试着跑着看看


明天计划的事情:继续复盘


遇到的问题: 模块管理的功能有点难做,正在思考


收获:锻炼了逻辑能力


返回列表 返回列表
评论

    分享到