本项目的登录认证和鉴权功能在不同的服务器模块里面运行,其中登录认证功能在内部的应用服务器里面实现,鉴权功能在网关实现,这里着重讲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网关整合配置相关推荐

  1. Spring Cloud Gateway 网关整合 Knife4j

    文章目录 1:环境准备 2:gateway服务设置 1:导包 2:yml配置 3:添加配置类,从网关服务中获取服务列表 4:重写并覆盖/swagger-resources接口 3:其他业务逻辑服务设置 ...

  2. Gateway网关基础配置

    server:port: 10010 spring:application:name: gatewaycloud:gateway:routes:- id: userservicegateway #一个 ...

  3. SpringCloud微服务架构之,Hystrix 熔断器,Gateway 网关

    Hystrix 概述 Hystix 是 Netflix 开源的一个延迟和容错库,用于隔离访问远程服务.第三方库,防止出现级联失败(雪崩). pom依耐 <!-- hystrix -->&l ...

  4. gateway网关_使用Sentinel实现gateway网关及服务接口限流

    点击关注"阿甘正专",设为星标 奇迹每天都在发生,等你而来 1.Sentinel 简介 1.1 Sentinel是什么: 随着微服务的流行,服务和服务之间的稳定性变得越来越重要.S ...

  5. 引入 Gateway 网关,这些坑一定要学会避开!!!

    Spring cloud gateway是替代zuul的网关产品,基于Spring 5.Spring boot 2.0以上.Reactor, 提供任意的路由匹配和断言.过滤功能.上一篇文章谈了一下Ga ...

  6. SpringCloud整合Sa-Token登录认证+Gateway网关拦截

    Sa-Token介绍:Sa-Token 是一个轻量级 Java 权限认证框架,主要解决:登录认证.权限认证.单点登录.OAuth2.0.分布式Session会话.微服务网关鉴权 等一系列权限相关问题 ...

  7. SpringCloud Greenwich(四)注册中心之eureka、Zuul和 gateway网关配置

    本项目是搭建基于eureka注册中心的springcloud,使用zuul网关和gateway网关 一.框架搭建 (1)项目结构 eureka-server  eureka注册中心 micro-ser ...

  8. SpringCloud Greenwich(三)注册中心之zookeeper、Zuul和 gateway网关配置

    本项目是搭建基于zookeeper注册中心的springcloud,使用zuul网关和gateway网关 一.框架搭建 (1)项目结构 micro-service  服务提供者 zuul-gatewa ...

  9. SpringCloud Greenwich(二)注册中心之consul、Zuul和 gateway网关配置

    本项目是搭建基于consul注册中心的springcloud,使用zuul网关和gateway网关 一.框架搭建 (1)项目结构 micro-service  服务提供者 zuul-gateway  ...

  10. SpringCloud Greenwich(一)注册中心之nacos、Zuul和 gateway网关配置

    本项目是搭建基于nacos注册中心的springcloud,使用zuul网关和gateway网关. 一.框架搭建 (1)项目结构 micro-service  服务提供者 zuul-gateway  ...

最新文章

  1. arduino定时器函数如何使用_【Arduino101教程】定时器的使用
  2. tq2440实验手册qt编译问题
  3. linux 软件包管理设置,Linux速通08 网络原理及基础设置、软件包管理
  4. 元素(块、行内、行内块
  5. (22)npm scripts 实践—构建样式文件
  6. 投影html连接电脑,电脑怎么连接投影仪?投影仪的详细安装使用教程
  7. java http编码_java httprequest编码/解码
  8. Python 获取URL访问的HEAD头信息
  9. 用计算机制作标准曲线的方法,如何绘制标准曲线
  10. html5将网页保存成图片,保存网页为图片(保存整个网页为图片)
  11. 企业微信有定位跟踪吗?企业微信会跟踪员工轨迹记录吗?
  12. Google Cloud + Firebase 讲解
  13. 医疗管理系统-检查项管理
  14. 优维低代码:Pipes 管道
  15. High Dynamic Range(HDR)图像介绍(一)
  16. 什么是大小端?如何确定大小端?
  17. Ajax获取服务器端响应数据的两种方式
  18. 用户画像标签系统体系解释
  19. 【集成学习系列教程5】LightGBM
  20. 在vscode里配置ESLint和Prettier

热门文章

  1. ICC II setupfloorplan
  2. VIP专区_读书_腾讯网
  3. 文科如何晋级计算机职称,职称的档次是怎么确定来的?
  4. 计算机主机异常经常蓝屏,电脑蓝屏怎么解决?电脑蓝屏几个常见的原因及解决办法...
  5. 云计算防止入坑之通过跑分看云服务器的性能,给各位云计算入门者的一些建议
  6. AddressBook、AddressBookUI、Contacts、ContactsUI 通讯录操作
  7. qiankun 出现[import-html-entry]: error occurs while executing normal script
  8. UIButton基础以及使用block+UIButton处理点击事件
  9. Ubuntu 禁用Guest用户
  10. X(解释变量)增加一单位标准差,Y(被解释变量)增加多少标准差?