服务注册
服务发现
发布配置
获取配置对于基本方法中的中的一些注解,涉及到权限管理的:@Secured自定义注解:
了解自定义注解之前需要先了解相关的元注解,
java.lang.annotation提供了四种元注解,专门注解其他的注解(自定义注解的时候需要使用到元注解)
@Documented :注解将包含在javaDoc中
@Retention :什么时候使用该注解
@Target :注解用于什么地方
@Inherited :是否允许子类继承zhu'jie@Retention :什么时候使用该注解--定义生命周期RetentionPolicy.SOURCE :在编译阶段丢弃,这些注解在编译结束后就不再有任何的意义,
所以不会写入字节码,@Override,@SuppressWarnings都属于这类注解。
RetentionPolicy.CLASS:在类加载的时候丢弃,在字节码文件中处理有用,注解默认使用这种方式。RetentionPolicy.RUNTIME:始终不会丢弃,运行期间是有保留这个注解的,因此可以使用反射机制读取该注解的信息,我们自定义的注解通常需要使用这种方式。
2、Target 表示该注解用于什么地方,默认任何元素,表示注解用于什么地方,可以用的ElementType参数包括:● ElementType.CONSTRUCTOR: 用于描述构造器● ElementType.FIELD: 成员变量、对象、属性(包括enum实例)● ElementType.LOCAL_VARIABLE: 用于描述局部变量● ElementType.METHOD: 用于描述方法● ElementType.PACKAGE: 用于描述包● ElementType.PARAMETER: 用于描述参数● ElementType.TYPE: 用于描述类、接口(包括注解类型) 或enum声明3.)@Documented – 一个简单的Annotations 标记注解,表示是否将注解信息添加在java 文档中。4.)@Inherited – 定义该注释和子类的关系@Inherited 元注解是一个标记注解,@Inherited 阐述了某个被标注的类型是被继承的。如果一个使用了@Inherited 修饰的annotation 类型被用于一个class,则这个annotation 将被用于该class 的子类。自定义注解类编写的而一些规则:
1、annotation 型定义为@interface,所有的annotation会自动继承java.lang.Annotation这一个接口,并且不能再去继承别的类的接口。
2、参数成员只用使用public或者默认的defalut这两个访问权修饰符号。
3、数成员只能用基本类型byte、short、char、int、long、float、double、boolean八种基本数据类型和String、Enum、Class、annotations等数据类型,以及这一些类型的数组.
4、要获取类方法和字段的注解信息,必须通过Java的反射技术来获取 Annotation 对象,因为你除此之外没有别的获取注解对象的方法。文章二:自定义注解与使用场景 https://www.jianshu.com/p/a7bedc771204
一般的使用场景为:自定义注解+拦截器或者aop,使用自定义的注解来自己设计框架,使得代码看起来非常的优雅。Target:描述了注解修饰的对象范围,取值在java.lang.annotation.ElementType定义,常用的包括:
METHOD:用于描述方法
PACKAGE:用于描述包
PARAMETER:用于描述方法变量
TYPE:用于描述类、接口或enum类型
Retention: 表示注解保留时间长短。取值在java.lang.annotation.RetentionPolicy中,取值为:
SOURCE:在源文件中有效,编译过程中会被忽略
CLASS:随源文件一起编译在class文件中,运行时忽略
RUNTIME:在运行时有效
关于nacos中使用的自定义注解 @Secured
主要的作用还是权限管理,具体的自定义的注解的作用需要看拦截器中基于注解进行了哪些逻辑
在nacos中,@Secored的作用流程为// 如果方法上有@Secored注解需要进行对应的逻辑判断。
if (method.isAnnotationPresent(Secured.class) && authConfigs.isAuthEnabled()) {if (Loggers.AUTH.isDebugEnabled()) {Loggers.AUTH.debug("auth start, request: {} {}", req.getMethod(), req.getRequestURI());}Secured secured = method.getAnnotation(Secured.class);String action = secured.action().toString();String resource = secured.resource();if (StringUtils.isBlank(resource)) {ResourceParser parser = getResourceParser(secured.parser());resource = parser.parseName(req);}if (StringUtils.isBlank(resource)) {// deny if we don't find any resource:throw new AccessException("resource name invalid!");}authManager.auth(new Permission(resource, action), authManager.login(req));}chain.doFilter(request, response);
}
1、过滤器逻辑:
如果已经校验过是否还需要校验呢?// 从设计上应该是可以保存校验过的信息,不用每次访问都去校验。
a
authConfigs.isAuthEnabled()authConfigs.isEnableUserAgentAuthWhite()根据请求头查询 :userAgent
直接返回对应的值
如果userAgent字段是以Nacos-Server开头的(需要进一步逻辑处理)

一个适配器模式的例子:

/** Licensed to the Apache Software Foundation (ASF) under one or more* contributor license agreements.  See the NOTICE file distributed with* this work for additional information regarding copyright ownership.* The ASF licenses this file to You under the Apache License, Version 2.0* (the "License"); you may not use this file except in compliance with* the License.  You may obtain a copy of the License at**     http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an "AS IS" BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*/
package com.alibaba.nacos.samples.spring.config;import java.io.IOException;import com.alibaba.nacos.api.config.convert.NacosConfigConverter;
import com.alibaba.nacos.samples.spring.domain.Pojo;
import com.fasterxml.jackson.databind.ObjectMapper;/*** {@link Pojo} Jackson {@link NacosConfigConverter}** @author <a href="mailto:mercyblitz@gmail.com">Mercy</a>* @since 0.1.0*/
public class PojoNacosConfigConverter implements NacosConfigConverter<Pojo> {private ObjectMapper objectMapper = new ObjectMapper();@Overridepublic boolean canConvert(Class<Pojo> targetType) {return objectMapper.canSerialize(targetType);}@Overridepublic Pojo convert(String config) {try {return objectMapper.readValue(config, Pojo.class);}catch (IOException e) {throw new RuntimeException(e);}}
}

自定义注解:具体的设计作用一般看过滤器的实现(以@Secured为例子部分理解)相关推荐

  1. AndroidStudio 3.4 自定义注解处理器不起作用

    解决方案有两个: 1. 将根项目的gradle版本降到3.2.1同时将项目的gradle版本降到4.6即可(这里可以不是4.6,只是我之前的版本是4.6) 如图 2. 在Gradle 5.0将忽略co ...

  2. 谈谈 Java 中自定义注解及使用场景

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:快给我饭吃 www.jianshu.com/p/a7bedc ...

  3. Java 自定义注解及使用场景

    文章目录 1 什么是注解(Annotation) 2 元注解 2.1 @Target 2.2 @Retention 2.3 @Repeatable 2.4 @Inherited 示例1 反射获取注解 ...

  4. java自定义注解解析

    开始接触java注解的时候,感觉是个很高深的概念,经过一段时间的学习,对注解有了新的认识,并没有想象的那么复杂. 注解本质上就是一个标记,是给程序看的. 如果自定义了一个注解,但是没有对自定义的注解做 ...

  5. @retention注解作用_分分钟带你玩转SpringBoot自定义注解

    在工作中,我们有时候需要将一些公共的功能封装,比如操作日志的存储,防重复提交等等.这些功能有些接口会用到,为了便于其他接口和方法的使用,做成自定义注解,侵入性更低一点.别人用的话直接注解就好.下面就来 ...

  6. Java反射自定义注解底层设计原理

    文章目录 一.反射 1. 反射概念 2. 反射机制的优缺点 3. 反射的用途 4. 反射技术的使用 5. 反射常用的Api 6. 反射执行构造函数 7. 反射执行给属性赋值 8. 反射执行调用方法 二 ...

  7. java 外部覆盖内部配置,Spring 与自定义注解、外部配置化的结合使用

    Spring 与自定义注解.外部配置化的结合使用 一.Java注解的简单介绍 注解,也叫Annotation.标注,是 Java 5 带来的新特性. 可使用范围 类.字段.方法.参数.构造函数.包等, ...

  8. 深入理解Java:注解(Annotation)基本概念、自定义注解、注解解析器

    深入理解Java:注解(Annotation)基本概念 什么是注解(Annotation): Annotation(注解)就是Java提供了一种元程序中的元素关联任何信息和着任何元数据(metadat ...

  9. 5.概念(maven,ssm,springMvc,spring,自定义注解,二级缓存,范式,事务,mysql,线程池,map,hashmap,redis,饿汉,懒汉)

    maven是啥: 1.Maven是一个项目管理和综合工具.Maven提供了开发人员构建一个完整的生命周期框架. 创建-导入jar报–编写配置文件-实现业务功能-测试-发布上线. 2.开发团队可以自动完 ...

  10. 自定义注解!绝对是程序员装大佬的利器!!

    作者 l Hollis 来源 l Hollis(ID:hollischuang) 相信很多人对Java中的注解都很熟悉,比如我们经常会用到的一些如@Override.@Autowired.@Servi ...

最新文章

  1. spring boot security ajax_Spring 和 SpringBoot 之间到底有啥区别?
  2. EOF的意义及用法(while(scanf(“%d“,n) != EOF))
  3. 设计模式---读书笔记
  4. 一份对过去120年奥运数据的可视化分析报告
  5. 增加RSS订阅量的35个方法
  6. 史上四大“杀人”建筑,烧掉几百亿,却犯低级错误,网友:有钱人的智商,我不懂
  7. 数据库Sharding的基本思想和切分策略(转)
  8. Jquery 1.4.2 animate的BUG
  9. - 贪心基础入门讲解二——活动安排问题
  10. Java使用pdfbox将PDF转成JPG格式图片
  11. Blake2b算法 php,Blake2b算法是什么?Blake2b算法币种盘点
  12. 计算机视觉知识体系图,计算机视觉系统框架的新构思
  13. 愿你历尽千帆,归来仍少年
  14. MAC 用了Mounty之后移动硬盘文件夹、文件消失
  15. Java岗大厂面试百日冲刺【Day52】— 数据库8 (日积月累,每日三题)
  16. 携创教育:2022学历改革解读系列|提升学历、迫在眉睫
  17. python 之 arrow
  18. 英语六级(包含作文)
  19. Support Vector Machine学习笔记
  20. python面试技术面都过了,薪资都谈好了20K*13结果还是被刷了,问HR原因竟是...

热门文章

  1. 【转】Windows批处理学习(一)——MS-DOS命令
  2. Ubuntu上安装QQ2015
  3. CentOS 7 以太网卡配置文件代码含义(ifcfg)
  4. C#MessageBox 自动关闭窗口
  5. 辐射照度、辐射强度、光照度、发光强度(差异以及如何相互转换)(易懂讲解)
  6. 【转】Ogre 1.7版本重大改进by 诡辩
  7. FastDFS Destination image dimensions must not be less than 0 pixels
  8. java银行项目_javabank项目
  9. python实现简易聊天室程序
  10. 邮箱有效性验证(是否真实存在可发送)