1.配置跨域支持
/*** 跨域支持*/ @Configuration public class CorsConfig {@Beanpublic CorsWebFilter corsFilter() {CorsConfiguration config = new CorsConfiguration();config.addAllowedMethod("*");config.addAllowedOrigin("*");config.addAllowedHeader("*");UrlBasedCorsConfigurationSource source =new UrlBasedCorsConfigurationSource(new PathPatternParser());source.registerCorsConfiguration("/**", config);return new CorsWebFilter(source);} }
2.yml配置
server:port: 8888 spring:profiles:active: prodapplication:name: tanhua-gatewaycloud:nacos:discovery:server-addr: 192.168.136.160:8848gateway:globalcors:add-to-simple-url-handler-mapping: truecorsConfigurations:'[/**]':allowedHeaders: "*"allowedOrigins: "*"allowedMethods:- GET- POST- DELETE- PUT- OPTIONroutes:# 探花系统- id: tanhua-app-serveruri: lb://tanhua-app-serverpredicates:- Path=/app/**filters:- StripPrefix= 1# 后台系统- id: tanhua-adminuri: lb://tanhua-adminpredicates:- Path=/admin/**# 路径截取配置filters:- StripPrefix= 1 gateway:excludedUrls: /user/login,/user/loginVerification,/system/users/verification,/system/users/login
3.网关鉴权
public class AuthFilter implements GlobalFilter, Ordered {@Value("${gateway.excludedUrls}")private List<String> excludedUrls;//需要配置不校验的连接//过滤器核心业务代码@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {//排除不需要权限检验的连接for (String excludedUrl : excludedUrls) {System.out.println(excludedUrl);}String path = exchange.getRequest().getURI().getPath();//当前请求连接System.out.println("url"+path);if(excludedUrls.contains(path)){return chain.filter(exchange);}//获取token并校验String token = exchange.getRequest().getHeaders().getFirst("Authorization");if(!StringUtils.isEmpty(token)){token=token.replaceAll("Bearer ","");}boolean verifyToken = JwtUtils.verifyToken(token);//如果校验失败,响应错误状态401if(!verifyToken){Map<String, Object> responseData = new HashMap<>();responseData.put("errCode", 401);responseData.put("errMessage", "用户未登录");return responseError(exchange.getResponse(),responseData);}return chain.filter(exchange);}//配置执行顺序@Overridepublic int getOrder() {return Ordered.LOWEST_PRECEDENCE;}private Mono<Void> responseError(ServerHttpResponse response, Map<String, Object> responseData){// 将信息转换为 JSONObjectMapper objectMapper = new ObjectMapper();byte[] data = new byte[0];try {data = objectMapper.writeValueAsBytes(responseData);} catch (JsonProcessingException e) {e.printStackTrace();}// 输出错误信息到页面DataBuffer buffer = response.bufferFactory().wrap(data);response.setStatusCode(HttpStatus.UNAUTHORIZED);response.getHeaders().add("Content-Type", "application/json;charset=UTF-8");return response.writeWith(Mono.just(buffer));}}