diff --git a/CHANGES.md b/CHANGES.md index 2dd50bd57a094b6733c137a17eee340995b2b9b9..40a3772d91b97ecf94cceb531bbbe443edd20dee 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -19,6 +19,8 @@ Release Notes. #### UI +* Fix not found error when refresh UI. + #### Documentation All issues and pull requests are [here](https://github.com/apache/skywalking/milestone/96?closed=1) diff --git a/apm-webapp/src/main/java/org/apache/skywalking/apm/webapp/GlobalErrorWebExceptionHandler.java b/apm-webapp/src/main/java/org/apache/skywalking/apm/webapp/GlobalErrorWebExceptionHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..34e634910af68d8d1c296addac00ce1a08d5e1a1 --- /dev/null +++ b/apm-webapp/src/main/java/org/apache/skywalking/apm/webapp/GlobalErrorWebExceptionHandler.java @@ -0,0 +1,54 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.skywalking.apm.webapp; + +import java.io.IOException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.web.reactive.error.ErrorWebExceptionHandler; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.annotation.Order; +import org.springframework.core.io.ClassPathResource; +import org.springframework.core.io.buffer.DataBufferFactory; +import org.springframework.http.MediaType; +import org.springframework.http.server.reactive.ServerHttpResponse; +import org.springframework.util.StreamUtils; +import org.springframework.web.server.ServerWebExchange; +import reactor.core.publisher.Mono; + +@Slf4j +@Order(-1) +@Configuration +public class GlobalErrorWebExceptionHandler implements ErrorWebExceptionHandler { + + @Override + public Mono handle(ServerWebExchange exchange, Throwable ex) { + ServerHttpResponse response = exchange.getResponse(); + response.getHeaders().setContentType(MediaType.TEXT_HTML); + return response.writeWith(Mono.fromSupplier(() -> { + DataBufferFactory bufferFactory = response.bufferFactory(); + try { + return bufferFactory.wrap(StreamUtils.copyToByteArray( + new ClassPathResource("/public/index.html").getInputStream())); + } catch (IOException e) { + log.error("There was an error completing the action.", ex); + return bufferFactory.wrap(new byte[0]); + } + })); + } +} \ No newline at end of file