2016-06-15 3 views
0

Я настроил Apache shiro, и он отлично работает с моим приложением.Максимальные сеансы пользователя для каждого пользователя - apache shiro

Теперь мне нужно настроить максимальное количество сеансов для каждого пользователя, то есть один пользователь не может войти на другой компьютер или если он попытается войти в систему, он должен аннулировать предыдущий сеанс или, возможно, он не сможет войти в новый сеанс.

В один момент времени должна быть только одна пользовательская сессия.

LoginServlet

UsernamePasswordToken token = new UsernamePasswordToken(username , password); 
org.apache.shiro.subject.Subject subject = SecurityUtils.getSubject(); 
subject.login(token); 
loginSuccessful = true; 
token.clear(); 

конфигурация XML

<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"> 
     <property name="securityManager" ref="securityManager" /> 
    </bean> 

<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager"> 
     <property name="cacheManager" ref="shiroCacheManager" /> 
     <property name="realm" ref="myRealm" /> 
    </bean> 

    <bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor" /> 

    <bean id="shiroCacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager"> 
    </bean> 

    <bean id="myRealm" class="com.mypackage.service.shiro.RoleSecurityJdbcRealm"> 
     <property name="dataSource" ref="shiroDatasource" /> 
     <property name="permissionsLookupEnabled" value="true"></property> 
    </bean> 

ответ

0

Вам необходимо осуществить doAuthenticate (AuthenticationToken authenticationToken) из класса ModularRealmAuthenticator и бросить ConcurrentAccessException если вы найдете другой активный сеанс для этого пользователя.

Все активные сеансы могут быть получены из

Коллекция activeSessions = ((DefaultSessionManager) SecurityUtils.getSecurityManager()). GetActiveSessions()

+0

я постараюсь как предложил вам –

+0

'getActiveSessions()' защищен внутри 'DefaultSessionManager', как это сделать .. ?? –

+0

Я использую 'DefaultWebSecurityManager' –

Смежные вопросы