Spring Boot执行器已包含在POM中,并显示在启动日志中。但是,当我尝试访问/ actuator甚至是项目的基本URL时,都会得到以下内容-
{
"timestamp": 1577096144986,
"status": 401,
"error": "Unauthorized",
"message": "Full authentication is required to access this resource",
"path": "/actuator"
}
我读到可能为端点设置了基本的HTTP身份验证。我在配置属性中查找了spring.security.user.name,密码,但找不到任何密码。
如果我按下http://localhost:8083/actuator,甚至是http://localhost:8083/或其他映射的API端点之外的其他URL,似乎我在浏览器上得到此密码提示-
在应用程序日志上,我得到了-
2019-12-23 19:30:54,489 75773 [XNIO-3 task-3] INFO c.c.common.web.LoggerInterceptor [LoggerInterceptor.java:42] - Visitor [okp91Dj1NzT2KPPUjaUvhqEg4oOhwPQ49I9LTR2z] [GET] [/error] [1ms] [OK]
2019-12-23 19:30:54,493 75777 [XNIO-3 task-3] ERROR org.apache.velocity [CommonsLogLogChute.java:96] - ResourceManager : unable to find resource 'error.vm' in any resource loader.
输入凭据时失败,并再次出现密码提示,并重复上述相同的日志。
更新
Spring boot版本-1.5.2.RELEASE。
/ src / main / resources中有一个web.xml。它具有以下-
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath*:META-INF/spring/applicationContext*.xml
classpath*:com.packagename
/WEB-INF/spring/oauth-security.xml
/WEB-INF/spring/security-config.xml
classpath*:META-INF/gateway/*.xml
</param-value>
</context-param>
我可以在此微服务组件中找到oauth-security.xml和security.xml文件。
oauth-security.xml具有基于oauth范围的API路径定义-
<sec:http pattern="/service/v2/**"
create-session="never"
entry-point-ref="oauthAuthenticationEntryPoint"
access-decision-manager-ref="accessDecisionManager">
<sec:intercept-url pattern="/some/path/v2/profile/**" access="ROLE_USER,SCOPE_PROFILE" method="GET"/>
我看到导入webmvc-config.xml的security-config.xml。
我在security-config.xml中看到了其中的一些-
<sec:http pattern="/somepath/**">
<sec:intercept-url pattern="/somepath/**" access="ROLE_USER"/>
<sec:http-basic/>
</sec:http>
但是我在任何地方都看不到/ **路径的任何配置。
更新2
我检查了在名为customscopes.properties的文件中似乎也有auth配置,这似乎是一个自定义文件,像这样添加到webmvc-config.xml-
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
<property name="ignoreResourceNotFound" value="true" />
<property name="locations">
<list>
<value>classpath:/spring/application.properties</value>
<value>classpath:/spring/local.properties</value>
<value>classpath:/spring/customscopes.properties</value>
<value> file:${project.config.dir}/application.properties </value>
<value>file:${project.config.dir}/customscopes.properties</value>
</list>
</property>
</bean>
customscopes.properties具有此类网址-
service / v2 / path / ** = SCOPE_SOMETHING;
同时,oauth-security.xml中有相同的URL-
<sec:intercept-url pattern="/service/v2/path/**" access="SCOPE_SOMETHING"/>
我不确定为什么会有两组配置。我尝试一个接一个地更改它们,同时使另一个保持身份验证。我观察到,仅更改受影响的customscopes.properties-
service/v2/path/**=IS_AUTHENTICATED_ANONYMOUSLY;
我也是Spring Security的新手。我检查了此video tutorial,但在我的项目中找不到那些提到的配置方法。没有提及WebSecurityConfigurerAdapter。
但是,在这两个文件上都以IS_AUTHENTICATED_ANONYMOUSLY添加致动器/ **的路径不起作用-开头显示为401错误。
更新3
哦,另一件事-security-config.xml包含
<sec:http pattern="/favicon.ico" security="none"/>
并且当我访问http://localhost:8083/actuator/和http://localhost:8083/somethingelse/时,我看到了日志的差异
http://localhost:8083/actuator/
第1步-点击此网址-日志-
2019-12-24 12:31:03,051 590999 [XNIO-3 task-16] INFO c.c.common.web.LoggerInterceptor [LoggerInterceptor.java:42] - Visitor [OICBz6CqYzI58UqobnBYNEXsZUNErjBkv6wEUUkX] [GET] [/error] [2ms] [OK]
2019-12-24 12:31:03,054 591002 [XNIO-3 task-16] ERROR org.apache.velocity [CommonsLogLogChute.java:96] - ResourceManager : unable to find resource 'error.vm' in any resource loader.
步骤2-取消登录表单-获取favicon.ico而不是/ error-
2019-12-24 12:31:18,641 606589 [XNIO-3 task-20] ERROR org.apache.velocity [CommonsLogLogChute.java:96] - ResourceManager : unable to find resource 'error.vm' in any resource loader.
2019-12-24 12:31:18,912 606860 [XNIO-3 task-21] INFO c.c.common.web.LoggerInterceptor [LoggerInterceptor.java:42] - Visitor [OICBz6CqYzI58UqobnBYNEXsZUNErjBkv6wEUUkX] [GET] [/favicon.ico] [2ms] [OK]
http://localhost:8083/somethingelse
第1步-点击此网址-日志-
2019-12-24 12:31:03,051 590999 [XNIO-3 task-16] INFO c.c.common.web.LoggerInterceptor [LoggerInterceptor.java:42] - Visitor [OICBz6CqYzI58UqobnBYNEXsZUNErjBkv6wEUUkX] [GET] [/error] [2ms] [OK]
2019-12-24 12:31:03,054 591002 [XNIO-3 task-16] ERROR org.apache.velocity [CommonsLogLogChute.java:96] - ResourceManager : unable to find resource 'error.vm' in any resource loader.
[步骤2-取消登录表单-再次与上述相同的日志
更新4
如果我添加一个类来扩展WebSecurityConfigurerAdapter,并且只对我所需的路径添加一个allowAll()-
@Override
protected void configure(HttpSecurity http) throws Exception {
http.
authorizeRequests().antMatchers("/service/trace/**").permitAll()
.antMatchers("/service/actuator/**").permitAll()
.antMatchers("/actuator/**").permitAll()
.antMatchers("/trace").permitAll()
.antMatchers("/actuator").permitAll();
}
这次我遇到其他错误(找不到404)-
{
"timestamp": 1577181851520,
"status": 404,
"error": "Not Found",
"message": "Not Found",
"path": "/service/trace"
}
注意-我不确定哪些是可用的执行器端点,因此我尝试确保所有这些组合。如果可以基于此确认,请参阅下面的应用程序启动日志。
我针对所有这些URL均收到404错误-
http://localhost:8083/service/actuator/beans
http://localhost:8083/actuator/beans
http://localhost:8083/beans
并且我的其他经过身份验证的API端点开始出现此错误-
{
"timestamp": 1577181062281,
"status": 403,
"error": "Forbidden",
"message": "Could not verify the provided CSRF token because your session was not found.",
"path": "/service/v2/some/end/point"
}
而且,我发现我们在web.xml中也定义了这些过滤器。因此,似乎有Spring配置以及Spring Boot附加功能。如果我的理解是错误的,请纠正我。
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
所以,问题出在这里-
我无法访问执行器端点。我在包含启动器的应用程序启动日志中看到以下内容,但我似乎也无法加载它们。我猜想Spring安全性介于两者之间,但不能防止两者相同。
2019-12-24 14:14:10,769 14209 [main] INFO o.s.b.a.e.m.EndpointHandlerMapping [AbstractHandlerMethodMapping.java:543] - Mapped "{[/beans || /beans.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()
2019-12-24 14:14:10,770 14210 [main] INFO o.s.b.a.e.m.EndpointHandlerMapping [AbstractHandlerMethodMapping.java:543] - Mapped "{[/health || /health.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.HealthMvcEndpoint.invoke(javax.servlet.http.HttpServletRequest,java.security.Principal)
2019-12-24 14:14:10,771 14211 [main] INFO o.s.b.a.e.m.EndpointHandlerMapping [AbstractHandlerMethodMapping.java:543] - Mapped "{[/autoconfig || /autoconfig.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()
2019-12-24 14:14:10,772 14212 [main] INFO o.s.b.a.e.m.EndpointHandlerMapping [AbstractHandlerMethodMapping.java:543] - Mapped "{[/metrics/{name:.*}],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.MetricsMvcEndpoint.value(java.lang.String)
2019-12-24 14:14:10,772 14212 [main] INFO o.s.b.a.e.m.EndpointHandlerMapping [AbstractHandlerMethodMapping.java:543] - Mapped "{[/metrics || /metrics.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()
注意-
我在application.properties中添加了management.endpoints.web.exposure.include = *
我无法看到这样的东西-
2019-12-24 15:57:41.245 INFO 37683 --- [main] o.s.b.a.e.web.EndpointLinksResolver:在基本路径'/ actuator'下公开18个端点
Spring Boot执行器已包含在POM中,并显示在启动日志中。但是,当我尝试访问/ actuator甚至项目的基本URL时,都会得到以下内容-{“ ...
发生错误,因为未在端点上启用安全性。对于本地部署的应用程序,将以下配置添加到application.properties文件-
我遇到了类似的错误,并在application.properties中添加了此配置:
1]我用Spring Boot 1.5.2测试了代码,发现在此版本中,执行器端点在root('/')路径中可用,而在/ actuator路径中不可用。您的日志还可以确认: