Eureka监控管理页面Status栏的服务点击后不能访问问题解决 Eureka无法访问服务报错500,不能显示微服务的info信息
昨天遇到这样一个问题,Eureka监控页面的服务一部分可以访问,一部分不可以,如图所示
这里有四个服务,其中dts-zuul和dts-config可以访问,剩下两个就无法访问
更奇怪的是,虽然在Eureka里不能访问服务的info信息,但是并不影响接口的访问,接口还是能通过Zuul正常访问的。
首先,我是配置了info信息的,也在父工程里添加了相关插件
<build>
<finalName>cloudDts</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<!--$project.version$没有正确解析出来。在父pom.xm文件中加入如下配置:-->
<includes>
<include>**/*.properties</include>
<include>**/*.yml</include>
<include>**/*.xml</include>
<include>**/*.tld</include>
<include>**/*.conf</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<delimiters>
<delimit>$</delimit>
</delimiters>
</configuration>
</plugin>
</plugins>
</build>
但是还是访问不到,而且奇怪的是Zuul和config的就可以访问到,于是我查了很多资料,有的说是因为缺少下面这个依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
有的说是因为actuator访问权限问题,应该在配置文件里如下这样开放权限
management:
endpoints:
web:
exposure:
include: "*"
还有的说是因为和security包冲突了
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
<version>2.3.1.RELEASE</version>
</dependency>
还有一些其他稀奇古怪的说法的,这里就不一一列举了,上面这些都是可能导致这个问题的原因,只是没能解决我的问题,我的病灶不在这里,然后我就开始排查自己的代码问题,Zuul和config能访问,其他微服务访问不了,区别应该是我在其他微服务里引入了我的公共模块–common模块(里面是一些通用的代码),而且应该是在类加载的时候就有这个问题了,于是我排查了几个接口,果然,问题在这:
@Configuration
//@EnableWebMvc //加入导致乱码
public class TokenConfiguration extends WebMvcConfigurationSupport/*WebMvcConfigurerAdapter*/{
@Autowired
private UserTokenIntercepter userTokenIntercepter;
/**
* 请求拦截器
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(userTokenIntercepter)
.addPathPatterns("/**")
.excludePathPatterns("/**/login")
.excludePathPatterns("/**/register")
.excludePathPatterns("/**/error");
}
/***
* RestTemplate 拦截器,在发送请求前设置鉴权的用户上下文信息
* @return
*/
@LoadBalanced
@Bean
public RestTemplate restTemplate() {
RestTemplate restTemplate = new RestTemplate();
restTemplate.getInterceptors().add(new RestTemplateUserContextInterceptor());
return restTemplate;
}
@Bean
public HttpMessageConverter<String> responseBodyConverter() {
StringHttpMessageConverter converter = new StringHttpMessageConverter(
Charset.forName("UTF-8"));
return converter;
}
@Override
public void configureMessageConverters(
List<HttpMessageConverter<?>> converters) {
super.configureMessageConverters(converters);
converters.add(responseBodyConverter());
}
@Override
public void configureContentNegotiation(
ContentNegotiationConfigurer configurer) {
configurer.favorPathExtension(false);
}
}
我在token验证功能上写了一个拦截器,问题就在我继承的这个类上
这里用WebMvcConfigurationSupport就是现在这个问题的样子,换成WebMvcConfigurerAdapter这个类就好了,具体原因我也还没弄明白,接下来要翻一下源码了,各路大神有知道原因的欢迎探讨!!