java获得jsp的name注解_记录Java注解在JavaWeb中的一个应用实例
概述
在學習注解的時候,學了個懵懵懂懂。學了JavaWeb之后,在做Demo項目的過程中,借助注解和反射實現了對頁面按鈕的權限控制,對于注解才算咂摸出了點味兒來。
需求
以"角色列表"頁面為例,該頁面包含"新建","編輯","啟用/禁用","刪除"四個權限。根據用戶所屬角色的權限,來控制這些按鈕是否顯示。問題是,如何確定哪些頁面下包含哪些按鈕?
實現
定義注解
package com.ttpfx.bean;
import java.lang.annotation.*;
@Target(ElementType.METHOD) // 注解的作用對象:只能用于方法
@Retention(RetentionPolicy.RUNTIME) // 注解的級別:運行時有效,可以通過反射獲取注解信息
@Repeatable(Buttons.class) // 可重復注解: 一個方法可以有多個Button注解,一個方法的多個Button注解將組成一個Buttons返回
public @interface Button {
String servlet(); // ServletName
String action(); // ActionName, 每個action是Servlet中的一個方法,代表一個請求地址:servletName?action=actionName
String name(); // 按鈕名稱
}
package com.ttpfx.bean;
import java.lang.annotation.*;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Buttons {
Button[] value(); // Button注解的數組,通過Btuuons.value()獲取頁面的多個Button
}
在Servlet中使用注解
public class RoleServlet extends BaseServlet {
private RoleService roleService = new RoleServiceImpl();
// RoleServlet.index() 對應角色列表頁面,訪問地址為:/role?action=index
// 該頁面包含"新建","編輯","啟用/禁用","刪除"四個權限
@Button(servlet = "role", action = "add", name = "add")
@Button(servlet = "role", action = "edit", name = "edit")
@Button(servlet = "role", action = "changeStatus", name = "changeStatus")
@Button(servlet = "role", action = "delete", name = "delete")
protected void index(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// ....
}
}
在BaseServlet中校驗頁面按鈕的權限,并將結果保存在requestScope中
// method:Servlet中的方法, 如上面RoleServlet.index()
private Map getButtonPermissions(Method method) {
// buttonMap是一個以Button.name為key, 以是否有權限的布爾值為value的鍵值對
// 該結果會被保存在requestScope中,供jsp頁面使用
Map buttonMap = new HashMap<>();
Button[] buttonAnnotations = null;
// 頁面有一個Button注解的時候可以直接獲取
// 頁面有多個Button注解的時候,只能獲取到Buttons注解,再通過Buttons.value()方法得到多個Button注解
Buttons buttonsAnnotation = method.getAnnotation(Buttons.class);
Button buttonAnnotation = method.getAnnotation(Button.class);
if (buttonsAnnotation != null) {
buttonAnnotations = buttonsAnnotation.value();
} else if (buttonAnnotation != null){
buttonAnnotations = new Button[] {buttonAnnotation};
}
if (buttonAnnotations != null) {
for (Button button : buttonAnnotations) {
// 在這里實現對每個按鈕的權限驗證,將結果put至buttonMap
// 真正的驗證過程已省略
buttonMap.put(button.name, true);
}
}
return buttonMap;
}
在頁面的jsp文件中,控制按鈕是否顯示
新建角色
總結
以上是生活随笔為你收集整理的java获得jsp的name注解_记录Java注解在JavaWeb中的一个应用实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt实现浮动窗口
- 下一篇: mysql 全文索引 权重_MySQL中