Eureka监控管理页面Status栏的服务点击后不能访问问题解决 Eureka无法访问服务报错500,不能显示微服务的info信息

昨天遇到这样一个问题,Eureka监控页面的服务一部分可以访问,一部分不可以,如图所示

微服务启动后跳转首页_spring boot


这里有四个服务,其中dts-zuul和dts-config可以访问,剩下两个就无法访问

微服务启动后跳转首页_spring boot_02

微服务启动后跳转首页_java_03


更奇怪的是,虽然在Eureka里不能访问服务的info信息,但是并不影响接口的访问,接口还是能通过Zuul正常访问的。

微服务启动后跳转首页_spring_04

首先,我是配置了info信息的,也在父工程里添加了相关插件

微服务启动后跳转首页_后端_05

<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验证功能上写了一个拦截器,问题就在我继承的这个类上

微服务启动后跳转首页_后端_06


这里用WebMvcConfigurationSupport就是现在这个问题的样子,换成WebMvcConfigurerAdapter这个类就好了,具体原因我也还没弄明白,接下来要翻一下源码了,各路大神有知道原因的欢迎探讨!!