微服务调用时,开放某个接口设置不需要oauth2 认证即可访问

目标

  • 是把不需要认证的接口给资源服务permitAll

思路

  • 创建一个自定义的注解
  • 把所有带注解的URL给资源服务permitAll

1、创建不鉴权注解@AuthIgnore

/*** @author czx* @title: AuthIgnore* @projectName ms* @description: TODO 忽略token 直接开放api* @date 2019/7/24 19:21*/
@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface AuthIgnore {}

2、在服务启动时把有@AuthIgnore 注解的接口保存到一个集合


/*** @Description //TODO $忽略认证URL配置* @Date  2019/7/24 19:26* @Author czx**/
@Configurable
@ConfigurationProperties(prefix = "security.oauth2.client.ignore-urls")
public class AuthIgnoreConfig implements InitializingBean {@Autowiredprivate WebApplicationContext applicationContext;private static final Pattern PATTERN = Pattern.compile("\\{(.*?)\\}");private static final String ASTERISK = "*";@Getter@Setterprivate List<String> ignoreUrls = new ArrayList<>();@Overridepublic void afterPropertiesSet() throws Exception {RequestMappingHandlerMapping mapping = applicationContext.getBean(RequestMappingHandlerMapping.class);Map<RequestMappingInfo, HandlerMethod> map = mapping.getHandlerMethods();map.keySet().forEach(mappingInfo -> {HandlerMethod handlerMethod = map.get(mappingInfo);AuthIgnore method = AnnotationUtils.findAnnotation(handlerMethod.getMethod(), AuthIgnore.class);Optional.ofNullable(method).ifPresent(authIgnore -> mappingInfo.getPatternsCondition().getPatterns().forEach(url -> ignoreUrls.add(ReUtil.replaceAll(url, PATTERN, ASTERISK))));AuthIgnore controller = AnnotationUtils.findAnnotation(handlerMethod.getBeanType(), AuthIgnore.class);Optional.ofNullable(controller).ifPresent(authIgnore -> mappingInfo.getPatternsCondition().getPatterns().forEach(url -> ignoreUrls.add(ReUtil.replaceAll(url, PATTERN, ASTERISK))));});}
}

3、把@AuthIgnore集合给资源服务器设置为忽略验证

/*** @Author czx* @Description //TODO 资源服务器配置* @Date 17:03 2019/4/3**/
@Slf4j
@AllArgsConstructor
public class ResourceServerConfig extends ResourceServerConfigurerAdapter {private final AuthIgnoreConfig authIgnoreConfig;代码忽略...../*** @Description //TODO http 请求的一些过滤配置**/@Overridepublic void configure(HttpSecurity http) throws Exception {String[] urls = authIgnoreConfig.getIgnoreUrls().stream().distinct().toArray(String[]::new);http.headers().frameOptions().disable().and().authorizeRequests().antMatchers(urls).permitAll().anyRequest().authenticated().and().csrf().disable();}代码忽略.....
}

最后

服务启动后自动加载所有的@AuthIgnore标注的URL给资源服务设置为忽略认证

具体代码:传送门 : https://github.com/yzcheng90/ms

【MS】微服务调用时,开放某个接口设置不需要oauth2 认证即可访问相关推荐

  1. 微服务使用knife4j进行在线接口调试

    微服务使用knife4j进行在线接口调试 前言 之前发布了一个博客是关于SpringBoot使用knife4j进行在线接口调试,那是一个单节点下的教程,那么在微服务情况,每一个服务都是一个独立的kni ...

  2. 《深入理解 Spring Cloud 与微服务构建》第十八章 使用 Spring Security OAuth2 和 JWT 保护微服务系统

    <深入理解 Spring Cloud 与微服务构建>第十八章 使用 Spring Security OAuth2 和 JWT 保护微服务系统 文章目录 <深入理解 Spring Cl ...

  3. 《深入理解 Spring Cloud 与微服务构建》第十七章 使用 Spring Cloud OAuth2 保护微服务系统

    <深入理解 Spring Cloud 与微服务构建>第十七章 使用 Spring Cloud OAuth2 保护微服务系统 文章目录 <深入理解 Spring Cloud 与微服务构 ...

  4. 若依微服务版前端怎样在接口返回500时去掉一直弹窗提示服务未找到

    场景 若依微服务版手把手教你本地搭建环境并运行前后端项目: 若依微服务版手把手教你本地搭建环境并运行前后端项目_BADAO_LIUMANG_QIZHI的博客-CSDN博客_若依微服务 在上面的基础上, ...

  5. SpringCloud微服务使用Feign如何暴露接口并整合SpringBoot测试

    文章目录 一. 问题背景 二. 解决方案 2.1 实现生产者中的接口 2.2 暴露接口 2.3 远程调用 2.4 SpringBoot整合测试 2.5 开始测试 三. 回调处理 四. 踩坑记录 一. ...

  6. springcloud微服务体系(一)— 基于security和jwt实现认证及鉴权服务

    文章目录 需求 知识点讲解 方案 SpringSecurity 具体实现 业务流程 代码 认证服务 鉴权服务 配置 需求 1.RESTfull风格的鉴权服务(路线相同的情况下根据请求方式鉴别访问权限) ...

  7. 若依前后端分离/微服务版怎样构造免密链接实现其他系统免登录访问

    场景 若依前后端分离版手把手教你本地搭建环境并运行项目: 若依前后端分离版手把手教你本地搭建环境并运行项目_BADAO_LIUMANG_QIZHI的博客-CSDN博客 上面在搭建起来前后端分离版的项目 ...

  8. 微服务[学成在线] day16:基于Spring Security Oauth2开发认证服务

  9. docker开放2375端口设置TLS和CA认证

    最近使用idea的docker插件,这个插件我们可以使用tcp的方式连接,但是这种连接方式非常不安全,开放的2375端口非常容易给人入侵,然后整个docker被人控制,这是非常危险的,所以为了解决这个 ...

最新文章

  1. Spring 事务失效?看这篇文章就够了!
  2. ok6410 3.0.1内核调用V4L接口出错解决方法(转)
  3. struts2 中文乱码问题
  4. Junit实现接口类测试
  5. variant php,Variant 是什么数据类型?
  6. 三维CNN:收集一些最近的3d卷积网络PointNet++
  7. 潜藏在人体体内的12种毒素
  8. kaggle账号_Kaggle 数据挖掘比赛经验分享
  9. English Voice of I Knew You Were Trouble.
  10. 输入手机号码 和 金额有效性的判断
  11. java 获取rss_如何使用java代码获取RSS中信息
  12. 百度网盘svip下载时显示下载请求中无下载速度
  13. 52.网络参数管理者: DHCP
  14. 冰雪传奇刷怪计时器_冰雪传奇BOSS计时器
  15. ftl模板引擎遍历list
  16. C语言二维数组指针用法
  17. 移动磁盘拒绝访问要怎样办啊
  18. 力扣刷题 DAY_67 回溯
  19. IM的扫码登录功能如何实现?
  20. TestCenter测试管理工具功能详解十二(Q)

热门文章

  1. 1、Binary Relevance Learning multi-label scene classication
  2. 错题集(已解决):爬虫中碰到请求头header里有冒号‘:‘在key前面,直接调用requests报错valueError: Invalid header name b‘:authority‘
  3. Linux进程间通过pipe通信
  4. skynet lua 代码静态分析
  5. 使用Python分析apache访问日志
  6. DTN设置、运行和参数介绍——ONE Readme 翻译
  7. [附源码]JAVA毕业设计养老智慧服务平台(系统+LW)
  8. 软件测试工程师面试——抓包测试面试话术
  9. 3步就能制作漫画头像的机器人,想拥有一个吗?
  10. 优盘插入电脑后,腾讯电脑管家一直重复扫描优盘如何解决?