2016-12-01 8 views
0

私はより良いアーキテクチャのソリューションを探しています。現在のところ、次のエンドポイントがあります。春のセキュリティ:isAutaxicated Ajaxを使用して

このエンドポイントは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接続可能と考えています。

// 
// 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:ここに春とJavaScriptでのWebSocketを実装する方法は非常に良い例です:Using WebSocket to build an interactive web application

をあなたが SessionListenerを実装する場合は、彼のセッションの取得の期限が切れた場合、あなたは非常に簡単にクライアントに対応するには、ログイン状態を送信することができます
+0

お返事ありがとうございます! @dit、私はauth2とSSOを使用してサーバー側でセッションを維持します。しかし、問題はフロントエンドでの認証状態の維持方法がわかりません。 JSコードの例を提供してください。 –

+0

@Rudziankoŭ私の編集を参照してください。この例は本当に良いです。 – dit

関連する問題