2

メソッドへのアクセスを、特定のロールを持つユーザーのみに制限する必要があります。IdentityManager は正しく構築されています。

私はこのコントローラークラスを持っています。

@Named
@RequestScoped
@LoggedIn
public class UserController{

    @RolesAllowed({"tt"})
    public String saveUserChanges() {
        ...
        ...
    }
}

そして、このクラスはAccessDeniedException上記のメソッドによってスローされたものを処理しsaveUserChangesます。

@ExceptionHandler
public class SecurityExceptionHandler {

    public void onAccessDeniedException(@BeforeHandles ExceptionEvent<AccessDeniedException> event) {

        ...
        ...
    }
}

問題は、AccessDeniedExceptionが正しくスローされ、SecurityExceptionHandlerクラスによってキャッチされることですが、メソッドsaveUserChanges()はとにかく実行されます。

そうですか?saveUserChanges()ユーザーが「tt」ロールを持っていない場合、メソッドが実行されないようにしたい。

4

1 に答える 1

0

saveUserChanges()完了後に失敗する他の関数に注釈を付けましたか? で注釈を付けUserController@Loggedので、少なくともログインしている人は誰でもすべての関数を実行でき、@RolesAllowed注釈がまったく機能していない可能性があります。

于 2014-08-25T22:22:32.077 に答える