示例:用自定義註解實現對權限的控制。如果只有讀權限就只可見頁面上查詢部分,如果有寫權限或全部權限就不但能操作查詢部分還能操作修改部分。(查詢部分和修改部分用文字代替,但只要在頁面可見就表示可以操作)
首先是定義註解類和使用這個自定義註解的類:
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 LevelAnnotation {
public enum AuthLevel{read,write,all}
public AuthLevel getAuthLevel() default AuthLevel.read;
public String memberName() default "";
}
import com.taobao.member.web.module.screen.prop.LevelAnnotation.AuthLevel;
public class MemberInfo {
@LevelAnnotation(memberName="")
//使用註解的參數memberName如果爲空,就會執行下面用隨機數形成權限等級的部分;如果由@LevelAnnotation(memberName="")改成@LevelAnnotation(memberName="zirou"),即memberName爲"zirou"就賦給全部權限,只會出現(頁面三)
public AuthLevel getMemberLevel(String memberName) {
AuthLevel level = null;
if("zirou".equals(memberName)){
level = AuthLevel.all;
}else{
int i = 1+(int)(Math.random()*3);
if(i==1){
level = AuthLevel.read;
}else if(i==2){
level = AuthLevel.write;
}else if(i==3){
level = AuthLevel.all;
}
}
return level;
}
}
然後是這個自定義註解的處理類:
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import com.taobao.member.web.module.screen.prop.LevelAnnotation.AuthLevel;
public class AnnotationParse {
public AuthLevel parseMethod(Class clazz) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException, SecurityException, NoSuchMethodException, InstantiationException{
Object obj = clazz.getConstructor(new Class[]{}).newInstance(new Object[]{});
for(Method method : clazz.getDeclaredMethods()){
LevelAnnotation levelAnnotation = method.getAnnotation(LevelAnnotation.class);
if(levelAnnotation != null){
AuthLevel level = (AuthLevel) method.invoke(obj, levelAnnotation.memberName());
return level;
}
}
return null;
}
}
展現效果最直接的方式就是用頁面展現了,眼見爲實嘛:
public class Screen {
public void execute(Context context) throws IllegalArgumentException, SecurityException, IllegalAccessException, InvocationTargetException, NoSuchMethodException, InstantiationException {
AnnotationParse annotationParse = new AnnotationParse();
AuthLevel auth = annotationParse.parseMethod(MemberInfo.class);
if(auth.equals(AuthLevel.read)){
context.put("memberLevel", Integer.toString(1));
}else if(auth.equals(AuthLevel.write)){
context.put("memberLevel", Integer.toString(2));
}else if(auth.equals(AuthLevel.all)){
context.put("memberLevel", Integer.toString(3));
}
}
}
<form action="" method="post" enctype="multipart/form-data">
<table width="100%" align="center" border="1" cellpadding="12" cellspacing="0" bgcolor="white">
memberLevel=$memberLevel
<br/>
---------------------------------------------
#if("$memberLevel"=="1"||"$memberLevel"=="2"||"$memberLevel"=="3")
<div class="bd">
<h2>查詢部分</h2>
</div>
---------------------------------------------
#end
#if("$memberLevel"=="2"||"$memberLevel"=="3")
<div class="bd">
<h2>修改部分</h2>
</div>
#end
</table>
</form>
頁面效果是這樣滴:
(頁面一)等級是1只有讀權限的如下圖
(頁面二)等級是2有讀、寫權限的如下圖
(頁面三)等級是3有全部權限的如下圖