openfegin怎么实现模块互访鉴权

news2024/9/20 6:21:04

在使用OpenFeign进行微服务之间的调用时,实现模块间的互访鉴权是一个重要的安全考虑。OpenFeign本身是一个声明式的Web服务客户端,它使得编写Web服务客户端变得更加容易。然而,OpenFeign本身并不直接处理鉴权逻辑,这通常需要通过集成其他安全框架或自定义拦截器来实现。以下是一些实现模块互访鉴权的方法

1. 使用Spring Security集成OAuth2

如果你的微服务架构中使用了OAuth2作为鉴权机制,你可以通过Spring Security来集成OAuth2客户端,并在OpenFeign客户端中配置这些安全设置。

配置OAuth2客户端:在Spring Boot应用中配置OAuth2客户端,包括客户端ID、客户端密钥、授权服务器URL等。

配置Feign客户端:使用@FeignClient注解创建Feign客户端,并通过配置类或注解的方式注入OAuth2的RestTemplate或WebClient,这些客户端已经配置了必要的OAuth2拦截器。

自定义Feign配置:如果需要更细粒度的控制,可以自定义Feign的配置,比如添加请求拦截器来自动添加OAuth2的token到请求头中。

2. 使用Spring Cloud Security和OAuth2

如果你的微服务架构是基于Spring Cloud的,你可以使用Spring Cloud Security来简化OAuth2的集成。

添加依赖:在pom.xml中添加Spring Cloud Security和OAuth2的依赖。

配置OAuth2:在配置文件中配置OAuth2的客户端和授权服务器信息。

使用Feign客户端:通过@FeignClient注解创建Feign客户端,Spring Cloud Security会自动处理OAuth2的token注入。

3. 自定义Feign请求拦截器

如果你不使用OAuth2或需要更灵活的鉴权方式,你可以自定义Feign的请求拦截器。

创建请求拦截器:实现RequestInterceptor接口,在apply方法中添加鉴权逻辑,比如从某个地方获取token并添加到请求头中。

配置Feign客户端:在Feign客户端的配置类中,通过@Bean注解注册你的请求拦截器。

指定配置类:确保Feign客户端使用了这个配置类。

以下是一个简单的例子,展示如何自定义Feign请求拦截器

创建一个Feign的拦截器来添加OAuth 2.0的访问令牌:
import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.springframework.security.oauth2.client.OAuth2ClientContext;
import org.springframework.security.oauth2.common.OAuth2AccessToken;
 
import java.util.Collections;
 
public class OAuth2FeignRequestInterceptor implements RequestInterceptor {
    private final OAuth2ClientContext oAuth2ClientContext;
    private final String resource;
 
    public OAuth2FeignRequestInterceptor(OAuth2ClientContext oAuth2ClientContext, String resource) {
        this.oAuth2ClientContext = oAuth2ClientContext;
        this.resource = resource;
    }
 
    @Override
    public void apply(RequestTemplate template) {
        OAuth2AccessToken accessToken = oAuth2ClientContext.getAccessToken();
        if (accessToken != null && !accessToken.isExpired()) {
            template.header("Authorization", "Bearer " + accessToken.getValue());
        }
    }
}
在你的Feign客户端配置中添加这个拦截器:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableOAuth2Client;
import org.springframework.security.oauth2.config.annotation.web.configurers.ClientDetailsServiceConfigurer;
 
@Configuration
@EnableOAuth2Client
public class FeignConfig {
 
    @Bean
    public RequestInterceptor oauth2FeignRequestInterceptor() {
        return new OAuth2FeignRequestInterceptor(/* your OAuth2ClientContext, resource */);
    }
}
确保你的Feign客户端使用了这个配置类:
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
 
@FeignClient(name = "remote-service", configuration = FeignConfig.class)
public interface RemoteServiceClient {
    @GetMapping("/endpoint")
    String getData();
}

这样,每次Feign客户端发起远程服务调用时,都会自动在HTTP请求头中添加OAuth 2.0的访问令牌,实现了鉴权。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2148234.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

茴香豆:企业级知识问答工具实践闯关任务

基础任务 在 InternStudio 中利用 Internlm2-7b 搭建标准版茴香豆知识助手,并使用 Gradio 界面完成 2 轮问答(问题不可与教程重复,作业截图需包括 gradio 界面问题和茴香豆回答)。知识库可根据根据自己工作、学习或感兴趣的内容调…

pytorch学习笔记一:作用、安装和基本使用方法、自动求导机制、自制线性回归模型、常见tensor格式、hub模块介绍

文章目录 一、安装二、基本使用方法①创建一个矩阵②获得随机值③初始化全零矩阵④直接传入数据⑤构建矩阵,然后随机元素值⑥展示矩阵大小⑦矩阵计算8、取索引9、view操作:改变矩阵维度10、与numpy的协同操作 三、自动求导机制1)定义tensor成…

【error】The minimum required version for Powerlevel10k is 5.1

文章目录 一、背景二、原因三、解决1、安装 ZSH 最新版本2、效果3、下载了还是显示 ZSH 版本为 5.0.2 怎么办 一、背景 安装 ZSH 主题 Powerlevel10k 时报错: You are using ZSH version 5.0.2. The minimum required version for Powerlevel10k is 5.1. Type ‘ec…

ppt一键生成免费版软件有哪些?如何高效生成论文答辩?

答辩经验丰富的人都知道,制作论文答辩ppt是一项既繁琐又耗时的工作。 我们需要从数万字的论文中提炼关键点,梳理内容的逻辑关系,然后进行细致的排版和美化,最后还要进行反复的检查和试讲。整个过程不仅耗费时间,而且需…

MVP 最简可行产品

MVP(最小可行产品)是一种产品开发策略,其主要目的是用最少的时间和资源,开发一个包含最基本必要功能的产品。这样做的目的是能够以最小的成本进入市场,获取用户反馈,再根据反馈逐步优化产品。 MVP是什么 …

1网络安全的基本概念

文章目录 网络安全的基本概念可以总结为以下几个方面: 网络安全的需求: 信息安全的重要性:信息安全是计算机、通信、物理、数学等领域的交叉学科,对于社会的发展至关重要。信息安全的目标:主要包括保密性、完整性、可用…

C/S架构与B/S架构的适用场景分析

C/S架构(客户端/服务器架构)与B/S架构(浏览器/服务器架构)在适用场景上各有特点,主要取决于应用的具体需求、用户群体、系统维护成本、跨平台需求等因素。 一、C/S架构的适用场景 1、高性能与交互性要求高的应用&…

闯关leetcode——58. Length of Last Word

大纲 题目地址内容 解题代码地址 题目 地址 https://leetcode.com/problems/length-of-last-word/description/ 内容 Given a string s consisting of words and spaces, return the length of the last word in the string. A word is a maximal substring consisting of…

docker从容器提取镜像并上传至dockerhub

一、使用commit从容器中提取镜像 例如 //docker commit 容器名 想要创建的镜像名:版本号 docker commit epsilon_planner epsilon_planner:latest导出完成后镜像如图所示 二、登陆dockerhub并创建仓库 登陆dockerhub,点击Create repository创建仓库&#xff0c…

小程序体验版无法正常请求接口,开启 调试可以正常请求

在本地开发工具可以正常访问小程序,上传代码后打开体验版,界面无法请求接口,手机小程序打开调试模式可以正常访问。这可以查看下小程序后台是否设置了服务器域名以及业务域名 然后查看小程序开发工具 - 详情 - 项目配置 重新上传代码&#xf…

北斗盒子TD20——水上作业的安全防线,落水报警守护生命

在广阔的水域上,水上作业人员面临着多变的环境和潜在的风险。近年来,随着海洋经济的快速发展,海上作业活动日益频繁,人员安全问题也日益凸显。传统的海上救援手段存在诸多不足,如救援响应时间长、定位不准确等。 水上…

SpringBoot教程(三十) | SpringBoot集成Shiro(权限框架)

SpringBoot教程(三十) | SpringBoot集成Shiro(权限框架) 一、 什么是Shiro二、Shiro 组件核心组件其他组件 三、流程说明shiro的运行流程 四、SpringBoot 集成 Shiro1. 添加 Shiro 相关 maven2. 添加 其他 maven3. 设计数据库表4.…

JSONC:为JSON注入注释的力量

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛应用于Web开发、配置文件和数据存储等领域。 其简洁的语法和易于解析的特点,使得JSON成为了现代编程中不可或缺的一部分。然而,JSON的一个显著缺点是…

波分技术基础 -- MS-OTN介绍

什么是MS-OTN 由于OTN最小交叉颗粒度为ODU0,承载小颗粒业务时带宽利用率较低;且无法承载分组业务,随着MPLS-TP技术的成熟,MS-OTN时代来临。MS-OTN(Multi-Service Optical Transport Network):核…

【论文解读系列】用于自监督点云表示的生成变分对比学习

Generative Variational-Contrastive Learning for Self-Supervised Point Cloud Representation | IEEE Transactions on Pattern Analysis and Machine Intelligence (acm.org) 作者:Bohua Wang; Zhiqiang Tian; Aixue Ye; Feng Wen; Shaoyi Du; Yue Gao 摘要 三…

VS code 查看 ${workspaceFolder} 目录指代路径

VS code 查看 ${workspaceFolder} 目录指代路径 引言正文 引言 在 VS code 创建与运行 task.json 文件 一文中我们已经介绍了如何创建属于自己的 .json 文件。在 VS code 中,有时候我们需要添加一些文件路径供我们导入自定义包使用,此时,我们…

Github Wiki 超链接 转 码云Gitee Wiki 超链接

Github Wiki 超链接 转 码云Gitee Wiki 超链接 Github 是 :[[相对路径]] Gitee 是 :[链接文字](./相对路径) 查找:\[\[(.*?)\]\] 替换:[$1]\(./$1\) 或替换:**[$1]\(./$1\)** (码云的超链接,很…

实战18-Card封装

import Card from ../../components/Card/Index; import rvp from ../../utils/resposive/rvIndex;Component export default struct DomesticService {build() {Column() {Card() {//默认插槽Text("DomesticService")}}.width(100%).margin({ top: rvp(43) })} } im…

2024 Python3.10 系统入门+进阶(十五):文件及目录操作

目录 一、文件IO操作1.1 创建或打开文件1.2 读取文件1.2.1 按行读取1.2.2 多行读取1.2.3 完整读取 1.3 写入文件1.3.1 写入字符串1.3.2 写入序列 1.4 上下文管理1.4.1 with语句的使用1.4.2 上下文管理器(拓展----可以学了面向对象之后再回来看) 1.5 文件的遍历 二、os.path模块…

大语言模型-教育方向数据集

大语言模型-教育方向数据集 编号论文数据集1Bitew S K, Hadifar A, Sterckx L, et al. Learning to Reuse Distractors to Support Multiple-Choice Question Generation in Education[J]. IEEE Transactions on Learning Technologies, 2022, 17: 375-390.Televic, NL, https…