簡體   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