当前位置: 首页 > 知识库问答 >
问题:

对于执行器endpoint,springboot执行器返回401

姚航
2023-03-14

我正在将一个旧的java Spring项目重构为springboot,并以传统的war风格部署它。出于某种原因,我必须坚持传统的web.xml来启动应用程序。多亏了Springboot遗产,我可以通过web.xml实现这一点:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>com.MyServerServletConfig</param-value>
</context-param>

<listener>
    <listener-class>org.springframework.boot.legacy.context.web.SpringBootContextLoaderListener</listener-class>
</listener>

<servlet>
    <servlet-name>myservlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value></param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>myservlet</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

此外,我添加了springboot执行器依赖项。应用程序。属性如下所示:

endpoints.enabled=true
endpoints.sensitive=true
management.security.enabled=true
management.context-path=/manage
security.user.password=myserver
security.user.name=myserver

应用程序可以正常启动,但当我尝试从浏览器访问endpoint时,它只返回一个“401需要完全身份验证才能访问此资源”错误,而不要求我键入用户名和密码。相关日志如下:

16:00:04.264 DEBUG [resin-port-8081-19] org.springframework.web.servlet.DispatcherServlet: DispatcherServlet with name 'myservlet' processing GET request for [/manage/health]
16:00:04.264 DEBUG [resin-port-8081-19] org.springframework.boot.actuate.endpoint.mvc.EndpointHandlerMapping: Looking up handler method for path /manage/health
16:00:04.264 DEBUG [resin-port-8081-19] org.springframework.boot.actuate.endpoint.mvc.EndpointHandlerMapping: Returning handler method [public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.HealthMvcEndpoint.invoke(javax.servlet.http.HttpServletRequest,java.security.Principal)]
16:00:04.264 DEBUG [resin-port-8081-19] org.springframework.web.servlet.DispatcherServlet: Last-Modified value for [/manage/health] is: -1
16:00:04.264 DEBUG [resin-port-8081-19] org.springframework.core.env.PropertySourcesPropertyResolver: Found key 'endpoints.sensitive' in [applicationConfig: [classpath:../conf/application.properties]] with type [String]
16:00:04.265 DEBUG [resin-port-8081-19] org.springframework.web.servlet.DispatcherServlet: Successfully completed request

这个问题的原因可能是什么?springboot自动构造的DispatherServlet和web中显式定义的DispatherServlet之间有什么区别吗。xml?出于安全考虑,管理。安全enabled=true是必要的。

共有1个答案

郑桐
2023-03-14

请参阅Spring Boot手册的这一部分:

https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-monitoring.html

特别是本节:

48.1访问敏感endpoint

通过将endpoint标记为敏感,除非您使用适当的角色登录,否则无法看到它们。因此,您必须为敏感endpoint设置Spring Security性。

关于如何做到这一点,这里有一篇很好的博客:

http://www.devglan.com/spring-security/securing-spring-boot-actuator-endpoints-with-spring-security

 类似资料:
  • 调用GET /actuator/logfile返回404错误。 我如何通过执行器/日志文件获取日志? 我有下面的配置。 我使用“本地”配置文件启动了应用程序。 我有日志文件在日志文件夹(例如api_log.2020-09-22-0.log)。 应用yml公司 logback-spring.xml 日志/file.xml /执行器/日志文件endpoint启用。

  • 我希望所有执行器endpoint(在文档中描述)都可用。在文档之后,添加了启动器启动器依赖项和属性,但大多数endpoint不可用(HTTP 404)。 唯一可用的endpoint是,但它显示无用的信息: 添加属性。 添加了依赖项: 获取/执行器的结果 启用执行器endpoint的最小设置是什么?

  • 如何访问http://localhost:8081/Actuatorendpoint?

  • 在生产中,我想禁用/acturetatorendpoint,但仍然允许/acturetator/health。我使用SecurityConfigurerAdapter尝试了下面的代码,但它返回500。我想返回一个404,并得到一个“页面找不到”错误页面。非常感谢任何帮助

  • 我正试图把普罗米修斯加入我的Spring靴项目。我正在使用Spring Boot执行器来公开度量endpoint。我按照教程做了所有的事情,但我总是得到一个404错误。我还尝试了中给出的每一个解决方案: context.xml(外部属性):