springsecurity与gateway网关整合配置
本项目的登录认证和鉴权功能在不同的服务器模块里面运行,其中登录认证功能在内部的应用服务器里面实现,鉴权功能在网关实现,这里着重讲springsecurity在gateway网关里面的鉴权功能的配置。
1、核心配置类如下
@EnableWebFluxSecurity
public class SecurityWebfluxConfig {@BeanSecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {http.authorizeExchange().pathMatchers("/sys/faceLogin/**","/sys/login").permitAll().pathMatchers(HttpMethod.GET,"/company/department/{id}").hasAuthority("department:findById").anyExchange().authenticated().and().csrf().disable().exceptionHandling().authenticationEntryPoint(new UnauthorizedEntryPoint()).accessDeniedHandler(new AccessDeniedHandler()).and().cors().configurationSource(corsConfigurationSource());return http.build();}private CorsConfigurationSource corsConfigurationSource() {CorsConfigurationSource source=new UrlBasedCorsConfigurationSource();CorsConfiguration corsConfiguration = new CorsConfiguration();corsConfiguration.addAllowedOrigin("*"); //同源配置,*表示任何请求都视为同源,若需指定ip和端口可以改为如“localhost:8080”,多个以“,”分隔;corsConfiguration.addAllowedHeader("*");//header,允许哪些header,本案中使用的是token,此处可将*替换为token;corsConfiguration.addAllowedMethod("*"); //允许的请求方法,PSOT、GET等((UrlBasedCorsConfigurationSource) source).registerCorsConfiguration("/**",corsConfiguration); //配置允许跨域访问的urlreturn source;}@Beanpublic WebSessionIdResolver sessionIdResolver(){HeaderWebSessionIdResolver sessionIdResolver=new HeaderWebSessionIdResolver();sessionIdResolver.setHeaderName("Authorization");return sessionIdResolver;}
}
其中,配置了部分访问路径所需的权限,未登录的处理方法以及没有权限的处理方法,支持跨域以及从请求头获取sessionid创建session解析器。
2、创建未登录的处理方法,代码如下
public class UnauthorizedEntryPoint implements ServerAuthenticationEntryPoint {@Overridepublic Mono<Void> commence(ServerWebExchange serverWebExchange, AuthenticationException e) {ServerHttpResponse response = serverWebExchange.getResponse();return ResponseUtil.out(response,new Result(ResultCode.UNAUTHENTICATED));}
}
3、创建没有权限的处理方法,代码如下
public class AccessDeniedHandler implements ServerAccessDeniedHandler {@Overridepublic Mono<Void> handle(ServerWebExchange serverWebExchange, AccessDeniedException e) {ServerHttpResponse response = serverWebExchange.getResponse();return ResponseUtil.out(response,new Result(ResultCode.UNAUTHORISE));}
}
4、这里面用到了一些工具类,其中ResponseUtil用于发送响应数据,代码如下
public class ResponseUtil {@SneakyThrowspublic static Mono<Void> out(ServerHttpResponse response, Result result) {ObjectMapper objectMapper=new ObjectMapper();byte[] bits = objectMapper.writeValueAsString(result).getBytes(StandardCharsets.UTF_8);DataBuffer buffer = response.bufferFactory().wrap(bits);//指定编码,否则在浏览器中会中文乱码response.getHeaders().add("Content-Type", "application/json;charset=UTF-8");return response.writeWith(Mono.just(buffer));}
}
Result和ResultCode用于封装json响应数据。
springsecurity与gateway网关整合配置相关推荐
- Spring Cloud Gateway 网关整合 Knife4j
文章目录 1:环境准备 2:gateway服务设置 1:导包 2:yml配置 3:添加配置类,从网关服务中获取服务列表 4:重写并覆盖/swagger-resources接口 3:其他业务逻辑服务设置 ...
- Gateway网关基础配置
server:port: 10010 spring:application:name: gatewaycloud:gateway:routes:- id: userservicegateway #一个 ...
- SpringCloud微服务架构之,Hystrix 熔断器,Gateway 网关
Hystrix 概述 Hystix 是 Netflix 开源的一个延迟和容错库,用于隔离访问远程服务.第三方库,防止出现级联失败(雪崩). pom依耐 <!-- hystrix -->&l ...
- gateway网关_使用Sentinel实现gateway网关及服务接口限流
点击关注"阿甘正专",设为星标 奇迹每天都在发生,等你而来 1.Sentinel 简介 1.1 Sentinel是什么: 随着微服务的流行,服务和服务之间的稳定性变得越来越重要.S ...
- 引入 Gateway 网关,这些坑一定要学会避开!!!
Spring cloud gateway是替代zuul的网关产品,基于Spring 5.Spring boot 2.0以上.Reactor, 提供任意的路由匹配和断言.过滤功能.上一篇文章谈了一下Ga ...
- SpringCloud整合Sa-Token登录认证+Gateway网关拦截
Sa-Token介绍:Sa-Token 是一个轻量级 Java 权限认证框架,主要解决:登录认证.权限认证.单点登录.OAuth2.0.分布式Session会话.微服务网关鉴权 等一系列权限相关问题 ...
- SpringCloud Greenwich(四)注册中心之eureka、Zuul和 gateway网关配置
本项目是搭建基于eureka注册中心的springcloud,使用zuul网关和gateway网关 一.框架搭建 (1)项目结构 eureka-server eureka注册中心 micro-ser ...
- SpringCloud Greenwich(三)注册中心之zookeeper、Zuul和 gateway网关配置
本项目是搭建基于zookeeper注册中心的springcloud,使用zuul网关和gateway网关 一.框架搭建 (1)项目结构 micro-service 服务提供者 zuul-gatewa ...
- SpringCloud Greenwich(二)注册中心之consul、Zuul和 gateway网关配置
本项目是搭建基于consul注册中心的springcloud,使用zuul网关和gateway网关 一.框架搭建 (1)项目结构 micro-service 服务提供者 zuul-gateway ...
- SpringCloud Greenwich(一)注册中心之nacos、Zuul和 gateway网关配置
本项目是搭建基于nacos注册中心的springcloud,使用zuul网关和gateway网关. 一.框架搭建 (1)项目结构 micro-service 服务提供者 zuul-gateway ...
最新文章
- arduino定时器函数如何使用_【Arduino101教程】定时器的使用
- tq2440实验手册qt编译问题
- linux 软件包管理设置,Linux速通08 网络原理及基础设置、软件包管理
- 元素(块、行内、行内块
- (22)npm scripts 实践—构建样式文件
- 投影html连接电脑,电脑怎么连接投影仪?投影仪的详细安装使用教程
- java http编码_java httprequest编码/解码
- Python 获取URL访问的HEAD头信息
- 用计算机制作标准曲线的方法,如何绘制标准曲线
- html5将网页保存成图片,保存网页为图片(保存整个网页为图片)
- 企业微信有定位跟踪吗?企业微信会跟踪员工轨迹记录吗?
- Google Cloud + Firebase 讲解
- 医疗管理系统-检查项管理
- 优维低代码:Pipes 管道
- High Dynamic Range(HDR)图像介绍(一)
- 什么是大小端?如何确定大小端?
- Ajax获取服务器端响应数据的两种方式
- 用户画像标签系统体系解释
- 【集成学习系列教程5】LightGBM
- 在vscode里配置ESLint和Prettier
热门文章
- ICC II setupfloorplan
- VIP专区_读书_腾讯网
- 文科如何晋级计算机职称,职称的档次是怎么确定来的?
- 计算机主机异常经常蓝屏,电脑蓝屏怎么解决?电脑蓝屏几个常见的原因及解决办法...
- 云计算防止入坑之通过跑分看云服务器的性能,给各位云计算入门者的一些建议
- AddressBook、AddressBookUI、Contacts、ContactsUI 通讯录操作
- qiankun 出现[import-html-entry]: error occurs while executing normal script
- UIButton基础以及使用block+UIButton处理点击事件
- Ubuntu 禁用Guest用户
- X(解释变量)增加一单位标准差,Y(被解释变量)增加多少标准差?