2010-12-01 5 views

答えて

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 
} 

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

+0

Secureモジュールでもこれを行うことができます。下の私の答えをチェックしてください。 –

0

セキュアコントローラの@ Before-Tagに、値を設定することができます。 Secure-Moduleはソリューションよりも優れた例です。

+0

セキュアモジュールは、必要なものをすべて実行するのに十分な拡張性があるようです。私がまだ発見していない他の欠点はありますか? –

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注釈を追加することにより、ログインせずにアクセス可能にすることができます。

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

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

2

コントローラに@With(Secure.class)アノテーションを削除し、このコードをコントローラ内に追加します。

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

ここで、showは、あなたが一般に公開する必要があるアクションです。

関連する問題