2014-12-17 1 views
0

У меня есть два пользователя: A и B, если пользователь сначала использует логин, пользователь B не может войти в систему, используя пользователя. Выход из системы. Каждому пользователю требуется три регистрационной информации: storeId, storePassword, userPassword.Разрешить только один пользовательский вход в Spring Sercurity

Если пользователь В то же StoreID с пользователем А, не позволяют Войти

Если пользователь B отличается StoreID с пользователем А, позволяют Войти

Я использую ServletContext держать пользователей, зарегистрированных и при входе пользователь нажмет выход из системы , Я удалю этого пользователя из ServletContext. Но я не могу ханлить, когда пользователь закрывает броузер, чтобы закрыть выход из системы. Я думаю, что это не очень хорошая идея

Вот мой код

@Override 
public void onLogoutSuccess(HttpServletRequest request, 
     HttpServletResponse response, Authentication authentication) 
     throws IOException, ServletException { 
    //redirectStrategy.sendRedirect(request, response, "/login"); 
    // do whatever you want 
    ServletContext context = request.getSession().getServletContext(); 
    Object _auths = context.getAttribute("_authentications"); 
    if(_auths != null) { 
     List<String> auths = (List<String>) _auths; 
     auths.remove(authentication.getName()); 
     if(auths.size() == 0) { 
      auths = new ArrayList<String>(); 
     } 
     context.setAttribute("_authentications", auths); 
    } 
    super.onLogoutSuccess(request, response, authentication); 
} 

ли кто-нибудь дать мне хорошее решение? Спасибо

ответ

0

Вы можете использовать JS ниже, чтобы удалить пользователя из ServletContext на закрытии окна:

<script type="text/javascript"> 
    window.onbeforeunload = logout; 

    function logout(){ 
     // Make an ajax call to remove user from ServletContext 
     alert("Window close is being called"); 
     return false; 
    } 
    </script> 
+0

благодарим за быстрый ответ. Я немного запутался. Теперь я не закрываю браузер. Я вхожу в google.com в браузере, а затем я закрываю broswer. Может ли ваш код работать? –

1

я решить мою проблему, я использую SessionRegistry в AuthencationProvide Intead из ServletContext

@Autowired 
@Qualifier("sessionRegistry") 
private SessionRegistry sessionRegistry; 

List<Object> principals = sessionRegistry.getAllPrincipals(); 

for (Object principal: principals) { 
    String[] auths = principal.toString().split(StringPool.DASH); 
    if(auths.length == 4 && auths[1].equals(storeId)) { 
     throw new BadCredentialsException(auths[0]+StringPool.DASH+auths[1]); 
    } 
} 

этот код работает хорошо, когда время сеанса, пользователь закрывает браузер. И мне не нужен какой-либо исходный код js для обработки

+0

приятный произведение ....! – OhadR

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