分布式整合之认证服务配置文件编写和测试|学习笔记

简介: 快速学习分布式整合之认证服务配置文件编写和测试

开发者学堂课程【Spring Security知识精讲与实战演示(三)分布式整合之认证服务配置文件编写和测试学习笔记与课程紧密联系,让用户快速学习知识

课程地址https://developer.aliyun.com/learning/course/732/detail/13073


分布式整合之认证服务配置文件编写和测试

 

认证服务配置文件编写和测试

之前的课程写了两个过滤器,但是没有配置文件这两个过滤器是没有作用的,此时需要提供Spring Security的配置文件,配置文件放在com.itheima.config里。

在原有webSecurityConfig.java文件中,在Spring Security配置信息下只需要如下内容:

public void configure(HttpSecurity http) throws Exception {

http.authorizeRequests()ExpressionInterceptUrlRegistry

.antMatchers(...antPatterns:"/product").hasAnyRole ...roles:"USBR")ExpressionUrlAuthorizationConfigurer<Hitt. .anyRequest().authenticated()ExpressionUrlAuthorizationConfigurer<HttpSecurity>.ExpressionInterceptUrlRegis

.and() HttpSecurity

.csrf() CsrfConfigurer<HttpSecurity>

.disable() HttpSecurity

此时,如果在最后输入.and返现不能输入,因为在Spring Security中,如果将csrf()放到最后一步,后续不能在做任何配置,故要将其放在如下位置:

public void configure(HttpSecurity http) throws Exception {

http.csrf() CsrfConfigurer<HttpSecurity>

.disable() HttpSecurity

.authorizeRequests()ExpressionInterceptUrlRegistry

.antMatchers(...antPatterns:"/product").hasAnyRole ...roles:"USBR")

.anyRequest()ExpressionUrlAuthorizationConfigurer<Hittpsed.authenticated()ExpressionUrlAuthorizationConfigurer<HttpSecurity>.ExpressionInterceptUrlRegistry

}

}

之后就可以在其中加入一些过滤器。

. and() HttpSecurity

.addFilter(newJwtLoginFilter(super.authenticationManager(),prop)) HttpSecurity

注:prop的对象不存在,要在 private UserService userService;下进行注入,输入@autowired  private PsaKeyProperties Prop

.addFilter(newJwtVerifyFilter(super.authenticationManager(),prop);

之后可以做优化性配置,分布式认证是不需要用session绘画的,要将其禁用。.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) ;

注:SessionCreationPolicy.STATELESS表示禁用session

配置的全部内容:

import …

@Configuration

@EnableWebSecurity

@EnableGlobalMethodSecurity(securedEnabled=true)

public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

@Autowired

private UserService userService,

@Autowired

private RsaKeyProperties prop;

@Bean

public BCryptPasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); }

//指定认证对象的来源

public void configure(AuthenticationManagerBuilder auth)throws Exception {

auth. userDetailsService(userService).passwordEncoder(passwordEncoder());

}

//Spring Security 配置信息

public void configure(HttpSecurity http) throws Exception {

http.csrf() CsrfConfigurer<HttpSecurity>

.disable() HttpSecurity

.authorizeRequests()ExpressionInterceptUrlRegistry

.antMatchers(...antPatterns:"/product").hasAnyRole ...roles:"USBR")

.anyRequest()ExpressionUrlAuthorizationConfigurer<Hittpsed.authenticated()ExpressionUrlAuthorizationConfigurer<HttpSecurity>.ExpressionInterceptUrlRegistry

.and() HttpSecurity

.addFilter(newJwtLoginFilter(super.authenticationManager(),prop)) HttpSecurity

.addFilter(newJwtVerifyFilter(super.authenticationManager(),prop);.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) ;

}

}

然后进行运行,可在如下图所示的窗口运行:

image.png

在上图可看到端口号是 :9001/,运行正常

接下来做认证操作,做认证操作需要借助工具,打开postman,地址是login

使用的是http://loaclhost:9001/login,点击body,注意在body里要选raw和json数据。

image.png

点击 send,出现

{

“msg”:“认证通过”

“code”:200

}

认证通过之后会在header里加"Authorization","Beaer "+token。在header里面会有如下token:

Bearer eylbGdOUSU21NMS9.eyJl1c2yloie wiaWRcijpudwWsLEFwidXNcnsbhbWcilpcimhpYWsiawsnccis.C.w0YKNxd2972PwiOom51bGisXCldGFOooNcloulistFwlemnAcENclpetwiaRlaeuneeQhiWRmFwifV1livianRpliaTWprNU1HRTFZek10WRObFITMDBZbUlLzTFRedN5UZ3RNV1xTVWpoaU1UUTRORGs0liwiZXnwjoNTY5NTY5MDgO12.TCXkisntIF3CDo2MANjejacVnysz03qxbN9y9yWmOcG1ym3tigTYz11PuyPICe7790dGWwmmjBR_JHBUumCR-yiPuHBpVUSKm3-MSqOR.J4czbgh4Kzd6-b4O06.1Huyb730xwub09do8VO S3Hlbu6HPps _lco-W0C3XPDwt 3 c. SmjurBsFzRAOMtYcmU_R2NCiR4zq25wCCulorurGcanOZox1EmsgpHli2boyC)YMyNlIUGPsOF3gtzowow-mU9xRyTnKxKgP2h6ibOdM018ru6bZAB5MPZ7QYmG_vbX(NNgzca_sA8FLWcplomyPe3oo9SeJ9w

利用这个token进行具体的请求访问:

image.png

一般请求是Get,访问http://localhost:9001/product/findAll,

Key值必须是Authorization,value是上文的header内容,访问之后显示查询成功。如果value中Bearer不变,其他改变,进行请求是没有任何提示的;当bearer改变,进行请求会显示“status”:403,因为在配置文件中没有判断token异常之后如何做。

相关文章
|
2月前
|
存储 缓存 算法
分布式锁服务深度解析:以Apache Flink的Checkpointing机制为例
【10月更文挑战第7天】在分布式系统中,多个进程或节点可能需要同时访问和操作共享资源。为了确保数据的一致性和系统的稳定性,我们需要一种机制来协调这些进程或节点的访问,避免并发冲突和竞态条件。分布式锁服务正是为此而生的一种解决方案。它通过在网络环境中实现锁机制,确保同一时间只有一个进程或节点能够访问和操作共享资源。
88 3
|
4月前
|
存储 监控 负载均衡
检索服务elasticsearch分布式结构
【8月更文挑战第22天】
50 3
|
1月前
|
JSON Java 测试技术
SpringCloud2023实战之接口服务测试工具SpringBootTest
SpringBootTest同时集成了JUnit Jupiter、AssertJ、Hamcrest测试辅助库,使得更容易编写但愿测试代码。
58 3
|
2月前
|
测试技术
自动化测试项目学习笔记(五):Pytest结合allure生成测试报告以及重构项目
本文介绍了如何使用Pytest和Allure生成自动化测试报告。通过安装allure-pytest和配置环境,可以生成包含用例描述、步骤、等级等详细信息的美观报告。文章还提供了代码示例和运行指南,以及重构项目时的注意事项。
254 1
自动化测试项目学习笔记(五):Pytest结合allure生成测试报告以及重构项目
|
2月前
|
测试技术 Python
自动化测试项目学习笔记(四):Pytest介绍和使用
本文是关于自动化测试框架Pytest的介绍和使用。Pytest是一个功能丰富的Python测试工具,支持参数化、多种测试类型,并拥有众多第三方插件。文章讲解了Pytest的编写规则、命令行参数、执行测试、参数化处理以及如何使用fixture实现测试用例间的调用。此外,还提供了pytest.ini配置文件示例。
47 2
|
2月前
|
测试技术 Python
自动化测试项目学习笔记(二):学习各种setup、tearDown、断言方法
本文主要介绍了自动化测试中setup、teardown、断言方法的使用,以及unittest框架中setUp、tearDown、setUpClass和tearDownClass的区别和应用。
76 0
自动化测试项目学习笔记(二):学习各种setup、tearDown、断言方法
|
3月前
|
数据采集 分布式计算 MaxCompute
MaxCompute 分布式计算框架 MaxFrame 服务正式商业化公告
MaxCompute 分布式计算框架 MaxFrame 服务于北京时间2024年09月27日正式商业化!
100 3
|
6月前
|
消息中间件 传感器 Cloud Native
事件驱动作为分布式异步服务架构
【6月更文挑战第25天】本文介绍事件驱动架构(EDA)是异步分布式设计的关键模式,适用于高扩展性需求。EDA提升服务韧性,支持CQRS、数据通知、开放式接口和事件流处理。然而,其脆弱性包括组件控制、数据交换、逻辑关系复杂性、潜在死循环和高并发挑战。EDA在云原生环境,如Serverless,中尤其适用。
210 2
事件驱动作为分布式异步服务架构
|
4月前
|
Java 应用服务中间件 数据库
SpringCloud:服务保护和分布式事务详解
SpringCloud:服务保护和分布式事务详解
133 0
|
4月前
|
缓存 Java Maven
SpringCloud基于Eureka的服务治理架构搭建与测试:从服务提供者到消费者的完整流程
Spring Cloud微服务框架中的Eureka是一个用于服务发现和注册的基础组件,它基于RESTful风格,为微服务架构提供了关键的服务注册与发现功能。以下是对Eureka的详细解析和搭建举例。