2016-12-01 2 views
0

Я ищу лучшее решение для архитектуры. В настоящее время мы имеем следующий конечную точку:Spring Security: isAuthenticated with Ajax

/** 
* Endpoint for frontend to be sure we are logged in 
*/ 
@RequestMapping(value = "/is_auth") 
public boolean getAuth() { 
    return true; 
} 

Эта конечная точка покрыта Spring Security и только идентифицированные пользователи имеют доступ к нему.

Какова наилучшая практика, позволяющая сообщать об аутентификации пользователя?

ответ

1

Похоже, вы используете пул, чтобы проверить статус входа в систему. Ваш метод управления

@RequestMapping(value = "/is_auth") 
public boolean getAuth() { 
    return true; 
} 

никогда не вернется false. Поэтому в общем случае нет необходимости иметь возвращаемое значение.

@ResponseStatus(value = HttpStatus.OK) 
@RequestMapping(value = "/is_auth") 
public void ping() { 
    // log ? 
} 

Я считаю, что лучшим решением будет WebSocket соединение между клиентом и сервером. Если затем реализовать SessionListener, вы можете очень легко отправить состояние входа в соответствующем клиент, если его сеанс прибудет истекли:

// 
// pseudo code 
// 
@Component 
public class SessionListener implements HttpSessionListener { 

    private static final Logger logger = LoggerFactory.getLogger(SessionListener.class); 

    @Autowired 
    private IWebsocketService websocketService; // you own service here 

    @Override 
    public void sessionCreated(HttpSessionEvent se) { 
     logger.debug("sessionCreated: {}", se.getSession().getId()); 

    } 

    @Override 
    public void sessionDestroyed(HttpSessionEvent se) { 
     String sessionId = se.getSession().getId(); 
     logger.debug("sessionDestroyed: {}", sessionId); 

     websocketService.sendLoginStatus(sessionId, false); 
    } 

} 

EDIT: здесь очень хороший пример того, как реализовать WebSockets с весной и JavaScript: Using WebSocket to build an interactive web application

+0

Спасибо за ответ! @dit, я поддерживаю сеанс на стороне сервера, используя auth2 и SSO. Но проблема в том, что я не знаю, как поддерживать состояние аутентификации на интерфейсе. Не могли бы вы привести пример кода JS. –

+0

@ Rudziankoŭ см. Мое редактирование. Пример действительно хорош. – dit

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