コントローラに@With(Secure.class)
を追加すると、すべての認証されていないアクセスがブロックされます。コントローラーで有効にした後で特定のアクションまたは特定のアクションを除いてのみ有効にする方法はありますか?プレイフレームワーク:一部のアクションでログインを要求する方法(すべてではない)
答えて
セキュアモジュールではこれを行うことはできません。 Niels氏によると、セキュアなモジュールはソリューションよりも一例です。 @Beforeアノテーションで独自のセキュリティシステムを構築することができます。ここに例があります:
public class Admin extends Controller {
@Before(unless={"login", "authenticate", "logout", "otherMethod"})
void checkAccess() {
// check the cookie
}
public void login() {
render();
}
public void authenticate(String email, String password) {
// check the params and set a value in the cookie
}
public void logout() {
// delete cookie
}
セキュアモジュールのソースコードを読むことをお勧めします。
セキュアコントローラの@ Before-Tagに、値を設定することができます。 Secure-Moduleはソリューションよりも優れた例です。
セキュアモジュールは、必要なものをすべて実行するのに十分な拡張性があるようです。私がまだ発見していない他の欠点はありますか? –
私が探していたものを得るために、Check
注釈をコピーしてPublic
注釈を作成しました。
package controllers;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface Public {
}
私はSecure.checkAccess
の先頭に次の2行を追加しました:
if (getActionAnnotation(Public.class) != null)
return;
は今With(Secure.class)
を使用して、コントローラのアクションは、それらに@Public
注釈を追加することにより、ログインせずにアクセス可能にすることができます。
これまでの私の以前の@Public
解決策は、継承されたアクションに対処できないため、幾分制限されています。私の代わりに、クラスレベルの注釈に行ってきた:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface AllowGuest {
String[] value();
}
とSecure.checkAccess()
方法の先頭にこのコードを追加:
AllowGuest guest = getControllerInheritedAnnotation(AllowGuest.class);
if (guest != null) {
for (String action : guest.value()) {
if (action.equals(request.actionMethod))
return;
}
}
次のように使用することができます:@AllowGuest({"list","view"})
これにより、ローカルおよび継承されたアクションへのアクセスを許可し、コントローラ内のどのアクションが保護されていないかを確認することが容易になります。
コントローラに@With(Secure.class)
アノテーションを削除し、このコードをコントローラ内に追加します。
@Before(unless={"show"})
static void checkAccess() throws Throwable {
Secure.checkAccess();
}
ここで、show
は、あなたが一般に公開する必要があるアクションです。
- 1. Rubyでモジュールの一部としてファイルを要求する方法は?
- 2. Elixir Phoenixアプリケーションでログインを要求する方法は?
- 3. HTTP要求ですべての結果を得る方法python
- 4. 一度すべての私のPHPファイルを要求する方法?
- 5. 配列の一部ではなく、すべての整数を取る方法
- 6. は、一度コンパイルすると必要なweb.configのすべての部分です
- 7. パスワードを要求するにはpostgresのログインを要求するにはどうすればいいですか
- 8. zendフレームワークですべてのコントローラとアクションを一覧表示する方法
- 9. ロールに基づいて一部のユーザーに強力なパスワードを要求する
- 10. なぜPythonの要求がソースコードの一部を変換するのですか?
- 11. ユーザーがログインしているときに、一部のページを利用できないようにする方法
- 12. プレイフレームワーク内の別のコントロールにあるアクションを呼び出す方法は?
- 13. sbtが一度必要なすべてをフェッチする方法
- 14. すべての要求のパラメータをRestangularで送信する方法
- 15. Firefoxの一部のバージョンでプリフライトCORS要求が失敗する
- 16. スカラーを使ってプレイフレームワークでリクエストをリダイレクトする方法は?
- 17. 一部のコントローラのアクションにHttpPostedFileを送信する方法
- 18. プレイフレームワークのアクション内で呼び出されたアクションの応答を取得する方法
- 19. すべてのTomcatサーバー要求を遅延させる方法
- 20. Laravel:関係は、要求のすべての方法
- 21. Tomcatの外部ディレクトリからコンテンツを要求する方法は?
- 22. Appiumがすべてのアクションでスクリーンショットを取得する方法
- 23. コード変更なしですべてのHTTP要求をHTTPS要求にリダイレクト
- 24. 一部のデータベース(すべてではない)を復元できるSQL Authユーザー
- 25. Rails以外のRubyアプリケーションですべてのファイルを要求するクリーンな方法はありますか?
- 26. 一部のHTTPS要求がFiddlerで復号化できないのはなぜですか?
- 27. Jmeterでログインとログアウトのアクションを1回シミュレートする方法
- 28. 要求を外部サーバーにロード・バランシングする方法は?
- 29. NSURLConnectionで一連のHTTP要求を送信する最も良い方法
- 30. ブラウザでCKEditorを要求する方法
Secureモジュールでもこれを行うことができます。下の私の答えをチェックしてください。 –