Spring Security:使用Ajax进行身份验证

时间:2016-12-01 09:24:35

标签: java ajax spring authentication spring-security

我正在寻找更好的架构解决方案。目前我们有以下终点:

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

Spring Security涵盖了此终点,只有经过身份验证的用户才能访问它。

让前端了解用户身份验证状态的最佳做法是什么?

1 个答案:

答案 0 :(得分: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);
    }

}

编辑:这是一个很好的例子,如何使用spring和javascript实现websockets:Using WebSocket to build an interactive web application