繁体   English   中英

Java自定义注释

[英]Java custom annotation

我想在方法上写自定义注释。我的用例是-我有一个具有角色的用户,因此当用户尝试访问某个类的方法时,我想检查他的角色。 所以我想传递注释中的角色。

我的代码在这里com.samples包中;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;


@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Roles {

public String roles();
}


package com.samples;

public class AnnotationExample {

@Roles(roles="admin")
public void createAction(){
String userrole = "admin"; // this hardcoded value
            // a
// here i want to compare annotaiton value with user role


}
}

我怎样才能做到这一点 ? 可以将注释值声明为对象值。 像@Roles(Role.AADMIN)

要检查注释,您需要使用反射。

Roles r = AnnotationExample.class.getMethod("createAction").getAnnotation(Roles.class);
if ("admin".equals(r.roles())) //has admin roles

可以将注释值声明为对象值。 像@Roles(Role.AADMIN)

我想您想要的是一个枚举。

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Roles {

   public Role roles();
}

enum Role { ADMIN, USER };

public class AnnotationExample {

   @Roles(roles=Role.ADMIN)
   public void createAction(){
      Role userrole = Role.ADMIN;
    }
}

如果您确实需要重新设计安全性注释(如果您不想使用具有声明性安全性的现有选项,例如EJB或Spring),那么您可能至少想看看它们是如何实现的。 这里以EJB实现之一为例。

但是也许您会重新考虑?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM