3

@Secured({"ROLE_ADMIN"})execute メソッドを保護するためのstruts2 アクションがあります。execute メソッドでは、メッセージをアクションのメンバー変数に割り当て、SUCCESS を返し、jsp ページに到達します。ページで、actions メンバー変数を取得します<sproperty>

private String greeting;

public String execute() throws Exception {
    this.greeting="Hello";
    return SUCCESS;
}

// getters and setters for greeting
...

<s:property value="greeting" />

問題は、保護された注釈が存在する場合、jsp はメンバー変数に対して何も表示しませんが、@Secured削除するとすべてが適切に動作し、メンバー変数に設定されたメッセージを表示することです。

実際のセキュリティは正常に機能しているように見えますが、アノテーションを介して有効にすると、メンバー変数 (またはアクションのインスタンス) が値スタックに到達しません。

エラーメッセージが表示されません。

4

1 に答える 1

1

を実行する前に<s:property value="greeting" />、「ROLE_ADMIN」が付与された権限として に存在することを確認する必要がありますSecurityContextHolder.getContext()

また、セキュリティ コンテキストを格納するデフォルトの「スレッド ローカル」戦略を使用する場合は、付与された権限が各要求スレッドに適切に格納されていることを確認してください。たとえば、ユーザー資格情報に関する情報を http セッションに保存する場合は、HttpSessionContextIntegrationFilterセットアップが必要です。

最後の手段として、可能であれば、使用している Spring Security Interceptor で段階的なデバッグ セッションを実行し、問題の内容を確認できます。

于 2009-11-06T07:34:14.937 に答える