@Restricted
ユーザーがログインして特定の役割を持っている場合にのみ、ユーザーがアクセスできるようにコントローラーメソッドを保護するために、注釈を実装しようとしています。私はJSFとCDIを使用してTomcat 7を使用しているため、EJBはありません。インターセプターは、注釈インターフェースがパラメーターを指定しない限り呼び出されます。パラメーターを追加するとすぐに@Nonbinding Role value() default Role.ADMIN;
、インターセプターもコントローラー メソッドも実行されません。エラーも例外もありません。これが私のコードです。何が問題なのか本当にわかりません。
注釈:
@InterceptorBinding
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE, ElementType.METHOD })
public @interface Restricted {
@Nonbinding Role value() default Role.ADMIN; // ###
}
インターセプター:
@Interceptor
@Restricted
public class RoleBasedRestrictingInterceptor implements Serializable {
@Inject
ISecurityManager security;
@AroundInvoke
public Object intercept(final InvocationContext ctx) throws Exception {
final Restricted annotation = ctx.getClass().getAnnotation(Restricted.class);
log.info("Intercepted, required role is: {}", annotation.value()); // ###
log.info("User is logged in: {}", security.isLoggedIn());
return ctx.proceed();
}
}
コントローラ:
@Named("manageUsers")
@SessionScoped
public class ManageUsersBacking extends implements Serializable {
@Restricted(Role.ADMIN) // ###
public void testRestricted() {
log.info("testRestricted()");
}
}
オカレンスは、###
再び機能させるために変更または削除する必要があるものを示します。インターセプターはWEB-INF/beans.xml
、アノテーションに role パラメーターがなくても機能するため、 で適切に定義されています。
16:04:33.772 [http-apr-8080-exec-11] INFO c.m.s.RoleBasedRestrictingInterceptor - User is logged in: true
16:04:33.772 [http-apr-8080-exec-11] INFO c.m.c.admin.ManageUsersBacking - testRestricted()