2016-06-15 5 views
0

아파치 시로을 구성했으며 내 응용 프로그램과 잘 작동합니다.사용자 당 최대 사용자 세션 - apache shiro

이제 사용자 당 최대 세션을 구성해야합니다. 즉 한 사용자가 다른 컴퓨터에 로그인 할 수 없거나 로그인을 시도하면 이전 세션이 무효화되거나 새로운 세션으로 로그인 할 수 없습니다.

단일 시점에서 하나의 사용자 세션 만 있어야합니다.

LoginServlet

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

구성 클래스 ModularRealmAuthenticator에서 XML 당신은 doAuthenticate (인증 토큰 인증 토큰)를 구현해야합니다

<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

와이 사용자에 대한 다른 활성 세션을 찾을 경우 ConcurrentAccessException을 던져.

모든 활성 세션은

컬렉션 activeSessions에서 얻을 수 = ((DefaultSessionManager) SecurityUtils.getSecurityManager()). getActiveSessions는()

) (당신
+0

가'이다 보호 내부 DefaultSessionManager', 이것에 대해 어떻게 갈 .. ?? –

+0

'getActiveSessions에 의해 제안 내가하려고합니다 –

+0

'DefaultWebSecurityManager'를 사용하고 있습니다 –

관련 문제