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

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

开发者学堂课程【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异常之后如何做。

相关文章
|
7天前
|
消息中间件 传感器 Cloud Native
事件驱动作为分布式异步服务架构
【6月更文挑战第25天】本文介绍事件驱动架构(EDA)是异步分布式设计的关键模式,适用于高扩展性需求。EDA提升服务韧性,支持CQRS、数据通知、开放式接口和事件流处理。然而,其脆弱性包括组件控制、数据交换、逻辑关系复杂性、潜在死循环和高并发挑战。EDA在云原生环境,如Serverless,中尤其适用。
31 2
事件驱动作为分布式异步服务架构
|
11天前
|
存储 分布式计算 监控
分布式系统详解--框架(Hadoop-HDFS的HA搭建及测试)
分布式系统详解--框架(Hadoop-HDFS的HA搭建及测试)
21 0
|
13天前
|
SQL 监控 中间件
【应急响应】拒绝服务&钓鱼指南&DDOS压力测试&邮件反制分析&应用日志
【应急响应】拒绝服务&钓鱼指南&DDOS压力测试&邮件反制分析&应用日志
|
16天前
|
数据可视化 数据挖掘 定位技术
在服务中收集和测试数据
【6月更文挑战第16天】本文讨论了数据收集和测试的重要性,指出样本量应根据时间和预算调整。数据分析涉及比较结果与假设,可视化数据以增强理解,并通过统计测试确认显著性。设计的持续优化是关键,适应变化的业务、技术和用户需求,数据驱动的方法能提供最佳用户体验。
23 5
在服务中收集和测试数据
|
18天前
|
存储 监控 负载均衡
Zookeeper 详解:分布式协调服务的核心概念与实践
Zookeeper 详解:分布式协调服务的核心概念与实践
18 0
|
2月前
|
存储 算法
服务中一个简单的分布式系统
【5月更文挑战第21天】本文介绍一个分布式算法,旨在解决高速和低速网络环境下进程间保持相同通信频率的问题。算法通过frequencyEpoch防止过时信息导致无效切换,确保只有在多数节点检测到当前频率嘈杂时才会切换。
26 0
服务中一个简单的分布式系统
|
2月前
|
关系型数据库 MySQL 数据库
测试部署PolarDB-X 分布式与集中式
在本文中,作者详述了在CentOS 7.9上部署测试PolarDB-X分布式与集中式数据库的过程。PolarDB-X作为阿里云优化的分布式数据库,提供高稳定性和与MySQL的兼容性,是应对单体数据库扩展性和性能瓶颈的解决方案,同时也符合国产化需求。文章介绍了部署环境准备,包括关闭防火墙和SELinux,设置系统参数,安装Python3和Docker,以及配置MySQL客户端。接着,通过PXD工具部署了PolarDB-X的集中式和分布式版,遇到的问题包括阿里云镜像源异常导致的部署失败以及指定版本安装的困扰。最后,作者进行了初步的压力测试,并对文档完善、生态工具建设以及提供更多使用案例提出了建议。
47753 10
测试部署PolarDB-X 分布式与集中式
|
2月前
|
Cloud Native 数据管理 关系型数据库
【阿里云云原生专栏】云原生数据管理:阿里云数据库服务的分布式实践
【5月更文挑战第21天】阿里云数据库服务在云原生时代展现优势,应对分布式数据管理挑战。PolarDB等服务保证高可用和弹性,通过多副本机制和分布式事务确保数据一致性和可靠性。示例代码展示了在阿里云数据库上进行分布式事务操作。此外,丰富的监控工具协助用户管理数据库性能,支持企业的数字化转型和业务增长。
197 1
|
2月前
|
JSON 监控 安全
LabVIEW测试和调试Web服务
LabVIEW测试和调试Web服务
34 1