6

アプリケーションのSpringコントローラーにSpringSecurity式を実装しました。

@Controller
@RequestMapping("init")
public class InitController {
    @PreAuthorize("hasRole('ROLE_ADMIN')")
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public @ResponseBody String home(){
        return "This is the init page";
    }
}

このセキュリティ構成では、次のようになります。

<http auto-config="true" create-session="stateless" use-expressions="true">
    <intercept-url pattern="/_ah*" access="permitAll" />
    <intercept-url pattern="/init/*" access="hasRole('ROLE_ADMIN')"/>
    <intercept-url pattern="/init*" access="hasRole('ROLE_ADMIN')"/>
</http>

このリソースにアクセスすると、デフォルトのSpringログインフォームが表示されます(http://localhost:8888/spring_security_login)。ただし、これを発生させたくないので、「x-authorization-key」などのクレデンシャルをリクエストヘッダーに挿入するだけです。それはシナリオに適合します。

これに対する可能な解決策は何ですか?

  • x-authorization-keyをリクエストに含めるだけでよいですか?
  • もしそうなら、それはどのようにSpringセキュリティメカニズムに適合しますか、それはそれが「hasRole」式にどのように適合するかです
  • 私のWebサービスがステートレスであり、各リクエストが認証されることが重要です
  • 最後に、Springログインフォームを処理せずにSpringセキュリティを処理する方法

ヘッダ

4

1 に答える 1

8

おそらく、何をするauto-configについての説明を読んでから、それを削除して無効にする必要がありform-loginます。使用するものを具体的に構成すると、構成がより明確になります。

x-authorization-keyあなたの質問から、あなたがヘッダーに何を含めたいのかは明確ではありません。クライアントIDと共有シークレットを使用して認証する場合は、基本認証を使用することをお勧めします。これは、すぐに使用できる状態ですでにサポートされており<http-basic />、構成に追加するだけでよいためです。よりカスタマイズされたものを念頭に置いている場合は、カスタムフィルターを実装し、それをSpring Securityフィルターチェーンに追加して、資格情報を抽出して処理する必要があります。

認証メカニズムがどのように適合するかは、実際に何で構成されているかによっても異なります。通常、ユーザーには、通常はある種のデータベースから、認証時にロードされるロールが割り当てられます。このhasRole式は、現在のユーザーが指定された役割を持っているかどうかを確認するだけです。UserDetailsService多くの場合、フレームワークに簡単にプラグインできる標準形式でユーザー情報をロードするを作成するだけで済みます。これについては、他の場所で詳しく説明しています。よりカスタマイズされたものが本当に必要な場合は、GAE統合に関するこのブログ記事に、より複雑なシステムとの統合方法の詳細が含まれています。

を使用する場合、 SpringSecurityはセッションを作成または使用しませんcreate-session='stateless'

PS URLレベルと、同じURLを処理するコントローラーの両方に同じセキュリティ属性を含める必要はありません。

于 2012-08-16T12:23:34.613 に答える