2013-08-08 23 views
5

これはすでに尋ねられていますが、動作させることができません。 これは私が達成したいものです:Spring Security 3.2トークン認証

私はSpring Security 3.2を使ってRESTのようなサービスを確保しています。サーバー側のセッションはありません。 基本認証を使用していません。これは、ユーザーのパスワードをクライアント側のCookieに保存する必要があるためです。そうしないと、ユーザーは各ページのリフレッシュ/変更時にログインする必要があります。トークンを保存することは、それほど悪くはないと思います。

  1. Webクライアント(ブラウザ、モバイルアプリ)がログインするRESTのようなURLを呼び出して、ユーザー名とパスワード
  2. と「/ログイン」サーバーは、ユーザーを認証し、クライアント
  3. にトークンを送信クライアントは、サーバーがトークンの有効性をチェックし、私もまだトークン生成部分を見ていなかったに応じ

応答を送信するトークンを格納し、各API呼び出し

  • でHTTPリクエストヘッダに追加します。私はそれが後方にあることを知っていますが、私は最初に実装されたトークン検証部分を取得したかったのです。

    私はカスタムフィルタ(AbstractAuthenticationProcessingFilterの実装)を使用してこれを達成しようとしていますが、私はそれについて間違った考えをしているようです。

    public TokenAuthenticationFilter() { 
        super("/"); 
    } 
    

    はこれだけ正確なURLのフィルタをトリガします。このようにそれを定義

    。 私は、ワイルドカードを受け入れないAbstractAuthenticationProcessingFilter#requiresAuthenticationを呼び出すいくつかのサンプル実装に固執しています。 私はもちろん、その動作を変更することができますが、これはどういうわけか私が間違った道にいると思います。

    また、私はカスタムAuthenticationProviderの実装を開始しました。多分それは正しいことでしょうか? 誰かが私に正しい方向へのプッシュを与えることができますか?

  • +1

    私はまったく同じことをしようとしています。春のセキュリティで成功しましたか?あなたのソリューションを詳しくお聞かせください。 – fvisticot

    +0

    あなたは解決策を見つけましたか? – sinu

    答えて

    1

    私は、事前認証フィルタがあなたのシナリオに適していると思います。 AbstractPreAuthenticatedProcessingFilterのgetPrincipalおよびgetCredentialsメソッドをオーバーライドします。 トークンがヘッダーに存在しない場合は、getPrincipalからnullを戻します。

    フロー:通常の認証 プロセス、すなわちExceptionTranslationフィルタは、/ログインにユーザ をredirtects以下

    • ユーザ初めてログインすると、無ヘッダ渡さのでSecurityContextがに設定されない 認証対象、フォームログオンフィルタまたはカスタムauthenticationEntryPointに基づくページ
    • 認証に成功すると、ユーザーは保護されたURLを要求し、pre-authフィルタは securityCに設定されたヘッダー認証オブジェクトからのトークンを取得しますユーザがアクセス権を持っているかどうかを確認する url
    関連する問題