【MS】微服务调用时,开放某个接口设置不需要oauth2 认证即可访问
微服务调用时,开放某个接口设置不需要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 认证即可访问相关推荐
- 微服务使用knife4j进行在线接口调试
微服务使用knife4j进行在线接口调试 前言 之前发布了一个博客是关于SpringBoot使用knife4j进行在线接口调试,那是一个单节点下的教程,那么在微服务情况,每一个服务都是一个独立的kni ...
- 《深入理解 Spring Cloud 与微服务构建》第十八章 使用 Spring Security OAuth2 和 JWT 保护微服务系统
<深入理解 Spring Cloud 与微服务构建>第十八章 使用 Spring Security OAuth2 和 JWT 保护微服务系统 文章目录 <深入理解 Spring Cl ...
- 《深入理解 Spring Cloud 与微服务构建》第十七章 使用 Spring Cloud OAuth2 保护微服务系统
<深入理解 Spring Cloud 与微服务构建>第十七章 使用 Spring Cloud OAuth2 保护微服务系统 文章目录 <深入理解 Spring Cloud 与微服务构 ...
- 若依微服务版前端怎样在接口返回500时去掉一直弹窗提示服务未找到
场景 若依微服务版手把手教你本地搭建环境并运行前后端项目: 若依微服务版手把手教你本地搭建环境并运行前后端项目_BADAO_LIUMANG_QIZHI的博客-CSDN博客_若依微服务 在上面的基础上, ...
- SpringCloud微服务使用Feign如何暴露接口并整合SpringBoot测试
文章目录 一. 问题背景 二. 解决方案 2.1 实现生产者中的接口 2.2 暴露接口 2.3 远程调用 2.4 SpringBoot整合测试 2.5 开始测试 三. 回调处理 四. 踩坑记录 一. ...
- springcloud微服务体系(一)— 基于security和jwt实现认证及鉴权服务
文章目录 需求 知识点讲解 方案 SpringSecurity 具体实现 业务流程 代码 认证服务 鉴权服务 配置 需求 1.RESTfull风格的鉴权服务(路线相同的情况下根据请求方式鉴别访问权限) ...
- 若依前后端分离/微服务版怎样构造免密链接实现其他系统免登录访问
场景 若依前后端分离版手把手教你本地搭建环境并运行项目: 若依前后端分离版手把手教你本地搭建环境并运行项目_BADAO_LIUMANG_QIZHI的博客-CSDN博客 上面在搭建起来前后端分离版的项目 ...
- 微服务[学成在线] day16:基于Spring Security Oauth2开发认证服务
- docker开放2375端口设置TLS和CA认证
最近使用idea的docker插件,这个插件我们可以使用tcp的方式连接,但是这种连接方式非常不安全,开放的2375端口非常容易给人入侵,然后整个docker被人控制,这是非常危险的,所以为了解决这个 ...
最新文章
- Spring 事务失效?看这篇文章就够了!
- ok6410 3.0.1内核调用V4L接口出错解决方法(转)
- struts2 中文乱码问题
- Junit实现接口类测试
- variant php,Variant 是什么数据类型?
- 三维CNN:收集一些最近的3d卷积网络PointNet++
- 潜藏在人体体内的12种毒素
- kaggle账号_Kaggle 数据挖掘比赛经验分享
- English Voice of I Knew You Were Trouble.
- 输入手机号码 和 金额有效性的判断
- java 获取rss_如何使用java代码获取RSS中信息
- 百度网盘svip下载时显示下载请求中无下载速度
- 52.网络参数管理者: DHCP
- 冰雪传奇刷怪计时器_冰雪传奇BOSS计时器
- ftl模板引擎遍历list
- C语言二维数组指针用法
- 移动磁盘拒绝访问要怎样办啊
- 力扣刷题 DAY_67 回溯
- IM的扫码登录功能如何实现?
- TestCenter测试管理工具功能详解十二(Q)
热门文章
- 1、Binary Relevance Learning multi-label scene classication
- 错题集(已解决):爬虫中碰到请求头header里有冒号‘:‘在key前面,直接调用requests报错valueError: Invalid header name b‘:authority‘
- Linux进程间通过pipe通信
- skynet lua 代码静态分析
- 使用Python分析apache访问日志
- DTN设置、运行和参数介绍——ONE Readme 翻译
- [附源码]JAVA毕业设计养老智慧服务平台(系统+LW)
- 软件测试工程师面试——抓包测试面试话术
- 3步就能制作漫画头像的机器人,想拥有一个吗?
- 优盘插入电脑后,腾讯电脑管家一直重复扫描优盘如何解决?