springCloudGateway网关配置

我就是我 2023-10-15 10:05 33阅读 0赞

1.配置跨域支持

  1. /**
  2. * 跨域支持
  3. */
  4. @Configuration
  5. public class CorsConfig {
  6. @Bean
  7. public CorsWebFilter corsFilter() {
  8. CorsConfiguration config = new CorsConfiguration();
  9. config.addAllowedMethod("*");
  10. config.addAllowedOrigin("*");
  11. config.addAllowedHeader("*");
  12. UrlBasedCorsConfigurationSource source =
  13. new UrlBasedCorsConfigurationSource(new PathPatternParser());
  14. source.registerCorsConfiguration("/**", config);
  15. return new CorsWebFilter(source);
  16. }
  17. }

2.yml配置

  1. server:
  2. port: 8888
  3. spring:
  4. profiles:
  5. active: prod
  6. application:
  7. name: tanhua-gateway
  8. cloud:
  9. nacos:
  10. discovery:
  11. server-addr: 192.168.136.160:8848
  12. gateway:
  13. globalcors:
  14. add-to-simple-url-handler-mapping: true
  15. corsConfigurations:
  16. '[/**]':
  17. allowedHeaders: "*"
  18. allowedOrigins: "*"
  19. allowedMethods:
  20. - GET
  21. - POST
  22. - DELETE
  23. - PUT
  24. - OPTION
  25. routes:
  26. # 探花系统
  27. - id: tanhua-app-server
  28. uri: lb://tanhua-app-server
  29. predicates:
  30. - Path=/app/**
  31. filters:
  32. - StripPrefix= 1
  33. # 后台系统
  34. - id: tanhua-admin
  35. uri: lb://tanhua-admin
  36. predicates:
  37. - Path=/admin/**
  38. # 路径截取配置
  39. filters:
  40. - StripPrefix= 1
  41. gateway:
  42. excludedUrls: /user/login,/user/loginVerification,/system/users/verification,/system/users/login

3.网关鉴权

  1. public class AuthFilter implements GlobalFilter, Ordered {
  2. @Value("${gateway.excludedUrls}")
  3. private List<String> excludedUrls;//需要配置不校验的连接
  4. //过滤器核心业务代码
  5. @Override
  6. public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
  7. //排除不需要权限检验的连接
  8. for (String excludedUrl : excludedUrls) {
  9. System.out.println(excludedUrl);
  10. }
  11. String path = exchange.getRequest().getURI().getPath();//当前请求连接
  12. System.out.println("url"+path);
  13. if(excludedUrls.contains(path)){
  14. return chain.filter(exchange);
  15. }
  16. //获取token并校验
  17. String token = exchange.getRequest().getHeaders().getFirst("Authorization");
  18. if(!StringUtils.isEmpty(token)){
  19. token=token.replaceAll("Bearer ","");
  20. }
  21. boolean verifyToken = JwtUtils.verifyToken(token);
  22. //如果校验失败,响应错误状态401
  23. if(!verifyToken){
  24. Map<String, Object> responseData = new HashMap<>();
  25. responseData.put("errCode", 401);
  26. responseData.put("errMessage", "用户未登录");
  27. return responseError(exchange.getResponse(),responseData);
  28. }
  29. return chain.filter(exchange);
  30. }
  31. //配置执行顺序
  32. @Override
  33. public int getOrder() {
  34. return Ordered.LOWEST_PRECEDENCE;
  35. }
  36. private Mono<Void> responseError(ServerHttpResponse response, Map<String, Object> responseData){
  37. // 将信息转换为 JSON
  38. ObjectMapper objectMapper = new ObjectMapper();
  39. byte[] data = new byte[0];
  40. try {
  41. data = objectMapper.writeValueAsBytes(responseData);
  42. } catch (JsonProcessingException e) {
  43. e.printStackTrace();
  44. }
  45. // 输出错误信息到页面
  46. DataBuffer buffer = response.bufferFactory().wrap(data);
  47. response.setStatusCode(HttpStatus.UNAUTHORIZED);
  48. response.getHeaders().add("Content-Type", "application/json;charset=UTF-8");
  49. return response.writeWith(Mono.just(buffer));
  50. }
  51. }

发表评论

表情:
评论列表 (有 0 条评论,33人围观)

还没有评论,来说两句吧...

相关阅读