5

コントローラに追加@With(Secure.class)すると、認証されていないアクセスがすべてブロックされます。特定のアクションに対してのみ有効にする方法、またはコントローラーで有効にした後に特定のアクションを除外する方法はありますか?

4

5 に答える 5

9

セキュア モジュールではそれができません。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
}

セキュア モジュールのソース コードを読むことをお勧めします。

于 2010-12-02T10:48:09.823 に答える
4

@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"})

これにより、ローカルおよび継承されたアクションへのアクセスを許可し、コントローラー内のどのアクションが保護されていないかを簡単に確認できます。

于 2010-12-17T17:17:06.900 に答える
2

コントローラーへの注釈を削除@With(Secure.class)し、コントローラー内にこのコードを追加します。

@Before(unless={"show"})
static void checkAccess() throws Throwable {
    Secure.checkAccess();
}

show公開する必要があるアクションはどこにありますか。

于 2013-09-25T13:06:29.340 に答える
1

探していたものを取得するために、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

于 2010-12-03T17:15:34.320 に答える
0

Secure Controller の @Before-Tag で値を設定しない限り、またはのみ設定できます。Secure-Module は、ソリューションというよりは例です。

于 2010-12-02T07:35:06.857 に答える