概述

在学习注解的时候,学了个懵懵懂懂。学了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中的一个应用实例相关推荐

  1. java属性注解_【java自定义注解1】java自定义注解-属性

    关于自定义注解,以前项目种应用的不多,最近看新项目过程中发现了挺多自定义注解相关内容,使用起来比较巧妙,于是 总结了两种方式,记录如下: 第一种:结合反射进行属性注入,代码如下: 1.定义一个注解: ...

  2. java 继承 注解_在java中实现组合注解原理分析(注解继承)

    今天在自定义注解的时候,原计划实现一个类似于Spring中的注解@Component的功能,如果稍有留意一下,会发现,在Spring中我们常见的注解,其实都继承了@Component注解:如下图所示: ...

  3. java jsp取静态常量_获取java静态

    Android NDK开发系列教程4:对类变量进行操作 终于建了一个自己个人小站:https://huangtianyu.gitee.io,以后优先更新小站博客,欢迎进站,O(∩_∩)O~~ 通常我们 ...

  4. java 待在原页面 代码_现在java后台,只要修改一点点代码,前段页面就报500,必须重新登录才行?...

    哪怕是加一行注释,前段也一刷新也会报500错误,必须重新登录系统才行,以前的时候没问题呀? message description The server encountered an internal ...

  5. java static 变量 初始化一次_关于java static变量初始化的疑问

    java中,类的static变量作为类变量,只需要被一次初始化,就可使用,但是,我在程序中遇到一个问题: 在web.xml中配置listener,服务器启动时,ServletContextListen ...

  6. java的jsp要下载吗_jsp、java下载附件

    1 传入此jsp中的参数均已URLDencoder过.2 3 4 5 6 7 boolean isError = false;8 String errorMsg = "";9 re ...

  7. java实验1机动车实验目的_《Java程序设计》实验指导书.doc

    <Java程序设计>实验指导书 实验一.熟悉JDK环境及主要命令 一.实验目的 1) 熟悉JDK的环境配置 2) 掌握JDK的命令 3) 掌握Java Application程序的开发过程 ...

  8. java gc回收堆还是栈_浅析JAVA的垃圾回收机制(GC)

    1.什么是垃圾回收? 垃圾回收(Garbage Collection)是Java虚拟机(JVM)垃圾回收器提供的一种用于在空闲时间不定时回收无任何对象引用的对象占据的内存空间的一种机制. 注意:垃圾回 ...

  9. java jre 与jdk的区别_学习java却不知道JRE和JDK的区别?看完这篇文章,让你受益匪浅...

    JRE和JDK的区别? 1.JRE是Java运行时环境 . 它是运行已编译的Java程序所需的所有程序的包,包括Java虚拟机(JVM),Java类库, java命令和其他基础结构. 但是,它不能用于 ...

最新文章

  1. Worktile完成新一轮融资,将发力研发管理赛道
  2. JDK1.8快速入门
  3. java 数据存储到什么地方?
  4. C语言删除链表的算法(附完整源码)
  5. 计算机技术题目,计算机技术题目.doc
  6. Spring零配置之@Configuration注解详解
  7. 关于过程和线程的常识点汇总
  8. 蚂蚁集团官宣启动上市计划,上交所、港交所表示热烈欢迎...
  9. Motan:目录结构
  10. 电脑qq浏览器怎么滚动截长图_QQ浏览器怎样实现长截图
  11. Java 报表工具选择
  12. 计算机识别外设原理,车牌识别系统的识别原理及触发方式
  13. 转载:50有用的JavaScript和jQuery技术和插件
  14. php查询qq等级,php仿QQ等级太阳显示函数_php
  15. OpenCVSharp 相机棋盘格校正
  16. 了解数据的发展历程--大数据简史
  17. couple和double的区别_DC couple与AC couple的区别? couple与pair的区别
  18. excel图文教程:应用PQ工具进行数据整理
  19. 时隔一个月今日头条又宕机了 这个技术公司的“月经宕”有点频繁
  20. 一对一培训机构如何通过系统来完成课时记录?

热门文章

  1. Apache Cassandra 数据存储模型
  2. 基于MaxCompute的拉链表设计
  3. Mendix:云原生应用是软件的未来
  4. 以“基”取胜:戴尔科技云平台 释放企业新动能
  5. 华为愿出售5G技术渴望对手;苹果将向印度投资10亿美元;华为全联接大会首发计算战略;腾讯自研轻量级物联网操作系统正式开源……...
  6. 从 0 到 300,Instagram 创始人 CTO 分享工程团队成长的经验
  7. 自己虚拟服务器都用json可以吗,vue+webpack项目中使用dev-server搭建虚拟服务器,请求json文件数据,实现前后台分离开发...
  8. 2000坐标系高程与85高程转换_【科普】测量人必须知道的几大坐标系
  9. linux下的socket在哪个头文件,linux下socket编程常用头文件
  10. vue如何在末尾添加_怎样在Linux上开发vue项目