网站首页 > java教程 正文
背景
最近做的项目是前后端分离的,后端主要是springboot,前端是vue,因为角色比较少所以就没有引入springsecurity,而是单纯使用自定义注解和拦截器实现了一个简单的权限认证。
主要知识点:
1、java自定义注解的使用
2、spring拦截器的使用
3、此示例为简版权限管理,只有用户和角色认证,没有添加url的验证
实现权限管理,首先要明确权限认证的流程:
下面一个简单的流程图
今天分享的内容主要是在3/5/6节点。
注解在Java中应用非常普遍,是从JDK1.5开始提出的,注解也叫元数据,例如我们常见的@Override和@Deprecated,注解是JDK1.5版本开始引入的一个特性,用于对代码进行说明,可以对包、类、接口、字段、方法参数、局部变量等进行注解。最常见的@Override、@param、@return 等,另外常用的各种框架也都有自己的注解体系,例如学习spring肯定会用到的@Autowired、@Component、@Bean等等。使用注解可以让我们的代码非常简洁和灵活,也很容易理解。
一般常用的注解可以分为三类:
一类是Java自带的标准注解,包括@Override(标明重写某个方法)、@Deprecated(标明某个类或方法过时)和@SuppressWarnings(标明要忽略的警告),使用这些注解后编译器就会进行检查。
一类为元注解,元注解是用于定义注解的注解,包括@Retention(标明注解被保留的阶段)、@Target(标明注解使用的范围)、@Inherited(标明注解可继承)、@Documented(标明是否生成javadoc文档。
一类为自定义注解,可以根据自己的需求定义注解。
本文中我们实现一个自定义注解,可以标明某个方法需要某种权限才可以访问,代码如下:
关于Target和Retention:
@Target 表示该注解用于什么地方。如果不明确指出,该注解可以放在任何地方。以下是一些可用的参数。需要说明的是:属性的注解是兼容的,如果你想给7个属性都添加注解,仅仅排除一个属性,那么你需要在定义target包含所有的属性。
ElementType.TYPE:说明该注解只能被声明在一个类前。
ElementType.FIELD:说明该注解只能被声明在一个类的字段前。
ElementType.METHOD:说明该注解只能被声明在一个类的方法前。
ElementType.PARAMETER:说明该注解只能被声明在一个方法参数前。
ElementType.CONSTRUCTOR:说明该注解只能声明在一个类的构造方法前。
ElementType.LOCAL_VARIABLE:说明该注解只能声明在一个局部变量前。
ElementType.ANNOTATION_TYPE:说明该注解只能声明在一个注解类型前。
ElementType.PACKAGE:说明该注解只能声明在一个包名前。
@Retention 定义该注解的生命周期。
RetentionPolicy.SOURCE – 在编译阶段丢弃。这些注解在编译结束之后就不再有任何意义,所以它们不会写入字节码。@Override, @SuppressWarnings都属于这类注解。
RetentionPolicy.CLASS – 在类加载的时候丢弃。在字节码文件的处理中有用。注解默认使用这种方式。
RetentionPolicy.RUNTIME– 始终不会丢弃,运行期也保留该注解,因此可以使用反射机制读取该注解的信息。我们自定义的注解通常使用这种方式。
枚举类RoleType如下:
这个是根据自己的业务确定的
另外就是拦截器,因为我后台用的是springboot,需要使用拦截器拦截请求然后验证其权限:
控制器的方法上是这个样子的:
有了以上的内容,就可以实现简单的权限认证了,另外还需要在用户登录的时候将用户的身份标识放到可以获取的地方,例如session、redis等。
因为我是前后端分离的,所以测试都是用的postman,这里就不晒效果了。
如果项目比较复杂,逻辑比较多,建议使用springsecurity等比较完善的框架,本文介绍的只适用于小型系统或自己学习,毕竟系统庞大了,逻辑就复杂的多,如果全靠自己去实现一个权限认证框架,工作量太大而且也不一定靠谱。
有对此感兴趣或者有问题的,可以一起聊聊。
猜你喜欢
- 2024-09-27 在Spring Boot项目中创建和使用自定义注解
- 2024-09-27 这一篇 Java 注解,写得太好了(java注解使用)
- 2024-09-27 学习廖雪峰的JAVA教程---注解(定义注解@interface)
- 2024-09-27 自定义注解妙用,一行代码搞定用户操作日志记录,你学会了吗?
- 2024-09-27 Spring Boot 整合mybatis,使用注解的方式(自动生成注解)
- 2024-09-27 面试官:实际工作中哪里用到了自定义注解?
- 2024-09-27 使用自定义注解和切面AOP实现Java程序增强
- 2024-09-27 Java-注解有什么用?该怎么用?(java 注解的作用)
- 2024-09-27 Java 17中的元注解:自定义注解的行为
- 2024-09-27 自定义注解你真会用吗?(说说自定义注解的场景及实现)
你 发表评论:
欢迎- 05-16SpringBoot整合Redis实现常用功能
- 05-16基于Redis实现简单的延时消息队列
- 05-16安装Redis
- 05-16Spring系列之Redis的两种集成方式
- 05-16Django连接Redis集群问题排查思路和总结
- 05-16只需5分钟,完成Redis所有命令操作~
- 05-16熟练使用 Redis 的 5 大数据结构:Java 实战教程
- 05-16Redis 常见业务场景及实例(Java)
- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)