Spring Cloud 组件入门学习---Security

SpringBoot项目Spring Security与OAuth2各组件版本、关系、选择与迁移指南 在Spring生态系统中,Spring Security和OAuth2是两个紧密相连的领域,它们共同为现代应用程序提供安全认证和授权机制。随着技术的不断发展,Spring团队也在不断更新和完善这些组件。本文将为您梳理Spring Security和OAuth2相关组件的逻辑关系,介绍它们的功能,并提供一些迁移建议。通过本文的介绍,希望您对Spring Security和OAuth2相关组件有了更清晰的认识。在选择和使用这些组件时,请务必考虑项目的实际需求和未来发展方向。已经过期,不建议在新项目中使用。 阅读详情

简介

Spring Cloud Security 为构建安全的SpringBoot应用提供了一系列解决方案,结合Oauth2可以实现单点登录、令牌中继、令牌交换等功能,OAuth 2.0是用于授权的行业标准协议。OAuth 2.0为简化客户端开发提供了特定的授权流,包括Web应用、桌面应用、移动端应用等。

OAuth2 相关名词解释

Resource owner(资源拥有者):拥有该资源的最终用户,他有访问资源的账号密码;
Resource server(资源服务器):拥有受保护资源的服务器,如果请求包含正确的访问令牌,可以访问资源;
Client(客户端):访问资源的客户端,会使用访问令牌去获取资源服务器的资源,可以是浏览器、移动设备或者服务器;
Authorization server(认证服务器):用于认证用户的服务器,如果客户端认证通过,发放访问资源服务器的令牌。

四种授权模式

Authorization Code(授权码模式):正宗的OAuth2的授权模式,客户端先将用户导向认证服务器,登录后获取授权码,然后进行授权,最后根据授权码获取访问令牌;
Implicit(简化模式):和授权码模式相比,取消了获取授权码的过程,直接获取访问令牌;
Resource Owner Password Credentials(密码模式):客户端直接向用户获取用户名和密码,之后向认证服务器获取访问令牌;
Client Credentials(客户端模式):客户端直接通过客户端认证(比如client_id和client_secret)从认证服务器获取访问令牌。

Oauth2的使用

源码地址(案例使用授权码模式)

oauth2-server创建

1、引入依赖

		<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-oauth2</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

2、修改配置

server:
  port: 9401
spring:
  application:
    name: oauth2-service

3、添加UserService实现UserDetailsService接口,用于加载用户信息:

@Service
public class UserService implements UserDetailsService {
    private List<User> userList;
    @Autowired
    private PasswordEncoder passwordEncoder;

    @PostConstruct
    public void initData() {
        String password = passwordEncoder.encode("123456");
        userList = new ArrayList<>();
        userList.add(new User("macro", password, AuthorityUtils.commaSeparatedStringToAuthorityList("admin")));
        userList.add(new User("andy", password, AuthorityUtils.commaSeparatedStringToAuthorityList("client")));
        userList.add(new User("mark", password, AuthorityUtils.commaSeparatedStringToAuthorityList("client")));
    }

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        List<User> findUserList = userList.stream().filter(user -> user.getUsername().equals(username)).collect(Collectors.toList());
        if (!CollectionUtils.isEmpty(findUserList)) {
            return findUserList.get(0);
        } else {
            throw new UsernameNotFoundException("用户名或密码错误");
        }
    }
}

4、添加认证服务器配置,使用@EnableAuthorizationServer注解开启

@Configuration
@EnableAuthorizationServer
public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {

    @Autowired
    private PasswordEncoder passwordEncoder;

    @Autowired
    private AuthenticationManager authenticationManager;

    @Autowired
    private UserService userService;

    /**
     * 使用密码模式需要配置
     */
    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) {
        endpoints.authenticationManager(authenticationManager)
                .userDetailsService(userService);
    }

    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        clients.inMemory()
                .withClient("admin")//配置client_id
                .secret(passwordEncoder.encode("admin123456"))//配置client_secret
                .accessTokenValiditySeconds(3600)//配置访问token的有效期
                .refreshTokenValiditySeconds(864000)//配置刷新token的有效期
                .redirectUris("http://www.baidu.com")//配置redirect_uri,用于授权成功后跳转
                .scopes("all")//配置申请的权限范围
                .authorizedGrantTypes("authorization_code","password");//配置grant_type,表示授权类型
    }
}

5、添加资源服务器配置,使用@EnableResourceServer注解开启:

@Configuration
@EnableResourceServer
public class ResourceServerConfig extends ResourceServerConfigurerAdapter {

    @Override
    public void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .anyRequest()
                .authenticated()
                .and()
                .requestMatchers()
                .antMatchers("/user/**");//配置需要保护的资源路径
    }
}

6、添加SpringSecurity配置,允许认证相关路径的访问及表单登录:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

    @Bean
    @Override
    public AuthenticationManager authenticationManagerBean() throws Exception {
        return super.authenticationManagerBean();
    }

    @Override
    public void configure(HttpSecurity http) throws Exception {
        http.csrf()
                .disable()
                .authorizeRequests()
                .antMatchers("/oauth/**", "/login/**", "/logout/**")
                .permitAll()
                .anyRequest()
                .authenticated()
                .and()
                .formLogin()
                .permitAll();
    }
}

7、添加controller需要登录的接口用于测试:

@RestController
@RequestMapping("/user")
public class UserController {
    @GetMapping("/getCurrentUser")
    public Object getCurrentUser(Authentication authentication) {
        return authentication.getPrincipal();
    }
}

验证:

使用授权码模式
启动oauth2-server服务;
在浏览器访问该地址进行登录授权:http://localhost:9401/oauth/authorize?response_type=code&client_id=admin&redirect_uri=http://www.baidu.com&scope=all&state=normal
输入账号密码进行登录操作:
在这里插入图片描述
在这里插入图片描述
授权同意后即可跳转到指定网页并获得授权码

https://www.baidu.com/?code=CHE5wl&state=normal

使用授权码请求该地址获取访问令牌:http://localhost:9401/oauth/token

接下来使用postman进行测试验证:
在这里插入图片描述
在这里插入图片描述
项目参考:https://juejin.im/post/5dc013bae51d456e817cec30

spring cloud security做统一认证中心 说说在使用spring cloud security微服务统一权限+nuxtjs做前后端分离时,的一些经验吧 在谈之前,我先把spring cloud security的原理罗嗦一遍 Spring cloud security 是包含了spring security 和spring security oauth,这可以算是两个框架。Spring security实现了一组过滤器链,我直接把之前... 阅读详情

相关推荐

告别I2C和SPI:用FPGA驱动DS18B20,一根线搞定温度采集(附Verilog代码)

本文详细介绍了如何利用FPGA通过单总线协议(One-Wire)驱动DS18B20温度传感器,仅用一根数据线实现高效温度采集。内容涵盖协议解析、Verilog代码实现及调试技巧,帮助开发者节省IO资源并提升系统性能。

weixin_42696271的博客 389

实现UserDetailsService

是 Spring Security 中用于加载用户信息的接口,它包含了一个方法,用于根据用户名加载用户信息。开发者可以通过实现接口,并重写方法来实现自定义的用户信息加载逻辑。下面是一个实现// 从数据库中根据用户名加载用户信息 User user = userRepository . findByUsername(username);

码字不易,大家的支持就是我坚持下去的动力 1218

SAP BTP开发入门:从PaaS到CAP/UI5的30天学习路线

在云计算与数字化转型的大背景下,企业系统集成与云端扩展需求激增,传统的单点开发模式正面临深刻变革。PaaS(平台即服务)作为云原生的核心概念,将基础设施、开发环境与应用服务统一封装,为企业提供了灵活的扩展能力。SAP BTP正是SAP生态中的PaaS平台,它承载着系统集成、低代码开发、AI服务与数据管理,成为连接S/4HANA等核心业务系统与创新应用的桥梁。对于ABAP开发者而言,掌握BTP不仅是技能升级,更是应对从传统部署向云端订阅模式转型的必由之路。本文从平台基础出发,梳理BTP的核心服务与开发模型(如

weixin_31766003的博客 282

Spring Security详细介绍使用

Spring 是非常流行和成功的 Java 应用开发框架,Spring Security 正是 Spring 家族中的成员。Spring Security 基于 Spring 框架,提供了一套 Web 应用安全性的完整解决方案。正如你可能知道的关于安全方面的两个核心功能是“

书启鸿蒙知秋枫 5514

未来计算的革命:探索存算一体芯片的潜力与挑战

未来计算的革命:探索存算一体芯片的潜力与挑战

jtwqwq的博客 1611

基于最小二乘法蒙特卡洛模拟(LSM)可转债定价原理及算法演示

可转换债券是一种极其复杂的信用衍生产品,除了一般债权外,它还包含着多个期权,包括转股权、回售权、赎回权和发行人的转股价格修正权,条款的复杂性决定了可转债定价的复杂性。可转债定价方法较为普遍的是依据B-S期权定价公式和二叉树模型,在对内嵌期权定价的基础上,加上纯债的价值,从而对可转债进行定价。但是可转债附加的期权不仅仅是一个美式期权,而是附加了赎回、回售和下修等特殊条款,以上定价方法仅可看做对可转债价值的近似估计,难以对其中的条款博弈进行定价。

weixin_43971191的博客 1729

UserDetailsService接口及子类实现

继承图 UserDetailsService(位于org.springframework.security.core.userdetails包下)用户详情信息服务,此接口定义了获取用户详细信息的唯一的一个方法,通过用户名称获取用户信息;但是获取用户信息的源头有很多自己也可定义只要实现了此接口重写loadUserByUsername方法,在方法内部定义自己获取用户信息的逻辑,后续认证工作交由SpringSecurity来完成即可: publicinterfaceUserDetailsService{

程序缘 2506

图像去畸变(相机成像、畸变模型)

首先通过上一步相机标定得到畸变参数和相机内参,同时,由于图像去畸变都是在归一化相机坐标系下进行的,而图像都是像素坐标,所以需要先通过相机内参矩阵将图片上的像素点从像素坐标系转变到归一化坐标系,再通过畸变参数在归一化坐标上进行去畸变的操作。由于畸变是发生在世界点通过透镜投影到相机坐标系这个过程中的,所以去畸变操作是在相机坐标系下进行的。(如图,Pd即为畸变后成像点)3.读取图像和各个参数,调用去畸变函数(opencv自带的cv.undistort函数),就可以完成对图像的去畸变处理,进而得到去畸变的图像。

lm5688jjupm1n28的博客 1050

Spring Authorization Server优化篇:自定义UserDetailsService实现从数据库获取用户信息

本篇文章会带大家实现自定义的UserDetailsService,从数据库获取用户及权限信息;也会带大家了解一下框架是怎么获取用户信息的。

云逸的博客 4009

【WRFDA教程第四期】雷达数据同化(Radar Data Assimilation)

雷达数据同化(Radar Data Assimilation)

WW、forever的博客 1758

Python全栈入门到实战【基础篇 05】核心基础:Python的2种运行模式(交互式+命令行式)

Python代码运行模式详解:交互式与命令行式对比 摘要: Python提供两种核心运行模式:交互式(REPL)和命令行式(脚本式)。交互式模式适合快速测试语法,即时反馈结果,通过终端输入python启动,特点是无需保存、临时执行,适合验证小段代码逻辑。命令行式模式需将代码保存为.py文件后运行,适合开发完整程序,可重复执行和修改。两种模式各有优势:交互式便于学习调试,命令行式适合实际开发。掌握两种模式的使用场景和切换方法,是Python入门的关键技能,能显著提升学习效率。

那些看似不起波澜的日复一日,会在某天让你看到坚持的意义 4554

关于SpringSecurity配置文件中自定义userDetailsService报错

关于SpringSecurity配置文件中自定义userDetailsService报错

TANGYUSHIZHU的博客 2491

ArcMap|时空地理加权回归(GTWR)

ArcGIS的GTWR插件下载地址:https://www.researchgate.net/publication/329518786_GTWR_ADDIN_Valid_till_Dec_31_2022 更详细的操作参考: https://www.bilibili.com/video/BV1fR4y1M7xB?spm_id_from=333.999.0.0 https://blog.youkuaiyun.com/weixin_40008135/article/details/112693520 双击“GTWR_Be

个人学习笔记 1万+

Spring Cloud Security

发博词Spring Cloud Security一共有两个starter: org.springframework.cloud spring-cloud-starter-oauth2 org.s

来啊 快活啊 1万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

spring-cloud-starter-security和spring-cloud-starter-oauth2

之前学过spring-security,最近又在学习spring-cloud-starter-security和spring-cloud-starter-oauth2, 脑子里顿时冒出一个问题: 之前学的spring-security和最近学的spring-cloud-starter-security有什么关系, spring-cloud-starter-security和spring-clou......

qq_30359369的博客 2万+

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

spring-cloud-security

基于webflux的spring security,即spring-cloud-security

weixin_39370859的博客 4891

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Spring Security 与 Spring Cloud Security 的区别与联系

而Spring Cloud Security是基于它的扩展,专门为微服务架构设计,增加了OAuth2集成、单点登录、服务间安全通信等分布式特性。在实际微服务项目中,我们通常在认证中心使用Spring Security处理用户认证,在其他微服务中使用Spring Cloud Security保护API资源,两者协同工作构建完整的安全体系。:说说Spring Security和Spring Cloud Security的区别?资源服务1:Spring Cloud Security。在微服务架构中,二者通常。

weixin_42932609的博客 750

Spring Cloud 之 Gateway、Spring Security、Oauth2 的整合

目录1)learn-shop-public-auth(认证中心)1、生成JKS2、添加pom.xml中主要依赖3、添加主要类3.1 目录结构及主要类说明3.2 WebSecurityConfig3.4 JwtTokenEnhancer3.5 CustomUserDetailsService4、添加公钥访问地址5、添加配置文件2)learn-cloud-gateway(资源中心)1、目录结构2、AuthorizationManager3、ResourceServerConfig4、配置文件 源码地址:看这里,

XiaoY的专栏 8228

SpringCloud Gateway + Spring Security

父模块 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache

zhexiao 9031

如何用Spring Cloud Security保护你的微服务?

本文介绍了Spring Cloud Security在微服务架构中的核心作用。作为安全防护框架,它通过OAuth2实现授权机制,允许使用令牌替代传统认证方式;借助JWT实现安全信息传输,包含头部、载荷和签名三部分。文章通过代码示例展示了如何配置资源服务器和JWT过滤器,并演示了实际项目中通过添加依赖、配置安全参数以及使用@PreAuthorize注解实现API权限控制的具体方法。Spring Cloud Security构建了微服务的安全防线,其核心组件协同工作,为系统提供可靠的身份验证和授权保障。

万猫学社 1483

Spring Cloud Security:Oauth2使用入门

Spring Cloud Security 为构建安全的SpringBoot应用提供了一系列解决方案,结合Oauth2可以实现单点登录、令牌中继、令牌交换等功能,本文将对其结合Oauth2入门使用进行详细介绍。OAuth 2.0是用于授权的行业标准协议。OAuth 2.0为简化客户端开发提供了特定的授权流,包括Web应用、桌面应用、移动端应用等。

weixin_42907150的博客 1165

Spring Cloud 服务安全 Spring Security

Spring Security 是一套功能全面、扩展性强的安全框架,与 Spring Cloud 的深度集成使其成为微服务架构中的首选安全方案。通过合理的配置和最佳实践,开发者可以轻松实现用户认证、服务授权以及服务间安全通信,为微服务提供强大的安全保障。

Flying_Fish_roe的博客 1024

Spring Cloud组件介绍

Spring Cloud Netflix Eureka 是 Spring Cloud 体系中的一个重要组件,它是一个基于 REST 的服务注册与发现框架,主要用于实现微服务架构中的服务治理功能。1.1 Eureka 的核心概念1.2 Eureka 的主要特性二、代码使用示例2.1 Eureka Server 配置pom.xml 依赖 application.yml 配置 启动类 2.2 Eureka Client 配置pom.xml 依赖 application.yml 配置 启动类 2.3 服务发现与调用

weixin_45130169的博客 837

Spring Cloud 之 Spring-Security

一、什么是SpringSecurity Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系...

小尾寒羊的博客 4317

Spring cloud gateway 详解和配置使用(文章较长)

目录 spring cloud gateway 介绍 1. 网关是怎么演化来的 2. 网关的基本功能 3.关于Spring Cloud Gateway 4.Spring Cloud Gateway 功能特征 5.predicate简介 6.GatewayFilter 工厂介绍 7.集成Hystrix的断路器功能 8.请求限流 pom.xml application.ym...

荡漾 21万+
上一篇: JAVA反射机制简单学习
下一篇: Linux命令学习之NetCat(nc命令)
CodersCoder
博客等级 码龄10年 90粉丝 258原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值