当执行器处于活动状态时,我应该使用哪个注释来防止 spring 启动保护我的控制器
Which annotation shall I use to keep spring boot from securing my Controller when actuator is active
我编写了一个简单的 spring 引导应用程序(版本 1.21),它通过 REST 公开公开数据。我激活了执行器以了解应用程序中发生的事情:
dependencies {
compile("org.springframework.boot:spring-boot-starter-actuator")
在我的开发环境中,我设置了一个固定的用户/密码:
security.user.name=admin
security.user.password=admin
security.user.role=ADMIN
执行器导致 Spring 安全性被激活,这也保护了我的控制器。这不是我想要的,我希望它在不需要身份验证的情况下被调用。当我调用控制器时,我在日志中看到这条消息:
11:00:40.713 [http-nio-8080-exec-1] INFO o.s.b.a.audit.listener.AuditListener - AuditEvent [timestamp=Fri Jan 16 11:00:40 CET 2015, principal=anonymousUser, type=AUTHORIZATION_FAILURE, data={type=org.springframework.security.access.AccessDeniedExcep
tion, message=access denied}]
我在 Whosebug 上阅读了这篇文章 article,但无法将其翻译成注释。我试图用 @Secured("ROLE_ANONYMOUS")
和 @Secured("IS_AUTHENTICATED_ANONYMOUSLY")
注释我的控制器,但这没有成功。我认为这会导致 Spring 安全部门仍在尝试对用户进行身份验证,但之后他所处的角色就无关紧要了
是否有我可以为我的控制器定义的注释,它会发出信号 Spring 安全性以防止弹出身份验证框?
首先,我尝试在不添加 Spring 安全性的情况下相处,但是当 jars 丢失时,我收到此消息:
13:27:08.726 [main] ERROR o.s.boot.SpringApplication - Application startup failed
java.lang.IllegalStateException: Could not evaluate condition on org.springframework.boot.autoconfigure.security.SpringBootWebSecurityConfiguration#ignoredPathsWebSecurityConfigurerAdapter due to internal class not found. This can happen if you are @
ComponentScanning a springframework package (e.g. if you put a @ComponentScan in the default package by mistake)
at org.springframework.boot.autoconfigure.condition.SpringBootCondition.matches(SpringBootCondition.java:51) ~[spring-boot-autoconfigure-1.2.1.RELEASE.jar:1.2.1.RELEASE]
at org.springframework.context.annotation.ConditionEvaluator.shouldSkip(ConditionEvaluator.java:102) ~[spring-context-4.1.4.RELEASE.jar:4.1.4.RELEASE]
...
at org.springframework.boot.SpringApplication.run(SpringApplication.java:950) [spring-boot-1.2.1.RELEASE.jar:1.2.1.RELEASE]
at demo.Application.main(Application.java:20) [bin/:na]
Caused by: java.lang.NoClassDefFoundError: org/springframework/security/web/access/WebInvocationPrivilegeEvaluator
Application.java:20 看起来像这样:
ApplicationContext ctx = SpringApplication.run(Application.class, args);
多亏了 Dave Syer 的专业知识,我才能够解决这个问题。
我在 application.properties
中设置了 security.basic.enabled=false
并从我的 build.gradle
文件中删除了 spring 安全性。
几天前我已经这样做了,但显然刷新项目没有用,所以 spring 安全 jar 留在类路径中,而我没有注意到这一点。完全重建项目后一切正常。
您可以申报
@Bean AuthenticationManager authenticationManager(AuthenticationManagerBuilder auth) {
return auth.getOrBuild();
}
前提是你已经配置好了"AuthenticationManagerBuilder"
我编写了一个简单的 spring 引导应用程序(版本 1.21),它通过 REST 公开公开数据。我激活了执行器以了解应用程序中发生的事情:
dependencies {
compile("org.springframework.boot:spring-boot-starter-actuator")
在我的开发环境中,我设置了一个固定的用户/密码:
security.user.name=admin
security.user.password=admin
security.user.role=ADMIN
执行器导致 Spring 安全性被激活,这也保护了我的控制器。这不是我想要的,我希望它在不需要身份验证的情况下被调用。当我调用控制器时,我在日志中看到这条消息:
11:00:40.713 [http-nio-8080-exec-1] INFO o.s.b.a.audit.listener.AuditListener - AuditEvent [timestamp=Fri Jan 16 11:00:40 CET 2015, principal=anonymousUser, type=AUTHORIZATION_FAILURE, data={type=org.springframework.security.access.AccessDeniedExcep
tion, message=access denied}]
我在 Whosebug 上阅读了这篇文章 article,但无法将其翻译成注释。我试图用 @Secured("ROLE_ANONYMOUS")
和 @Secured("IS_AUTHENTICATED_ANONYMOUSLY")
注释我的控制器,但这没有成功。我认为这会导致 Spring 安全部门仍在尝试对用户进行身份验证,但之后他所处的角色就无关紧要了
是否有我可以为我的控制器定义的注释,它会发出信号 Spring 安全性以防止弹出身份验证框?
首先,我尝试在不添加 Spring 安全性的情况下相处,但是当 jars 丢失时,我收到此消息:
13:27:08.726 [main] ERROR o.s.boot.SpringApplication - Application startup failed
java.lang.IllegalStateException: Could not evaluate condition on org.springframework.boot.autoconfigure.security.SpringBootWebSecurityConfiguration#ignoredPathsWebSecurityConfigurerAdapter due to internal class not found. This can happen if you are @
ComponentScanning a springframework package (e.g. if you put a @ComponentScan in the default package by mistake)
at org.springframework.boot.autoconfigure.condition.SpringBootCondition.matches(SpringBootCondition.java:51) ~[spring-boot-autoconfigure-1.2.1.RELEASE.jar:1.2.1.RELEASE]
at org.springframework.context.annotation.ConditionEvaluator.shouldSkip(ConditionEvaluator.java:102) ~[spring-context-4.1.4.RELEASE.jar:4.1.4.RELEASE]
...
at org.springframework.boot.SpringApplication.run(SpringApplication.java:950) [spring-boot-1.2.1.RELEASE.jar:1.2.1.RELEASE]
at demo.Application.main(Application.java:20) [bin/:na]
Caused by: java.lang.NoClassDefFoundError: org/springframework/security/web/access/WebInvocationPrivilegeEvaluator
Application.java:20 看起来像这样:
ApplicationContext ctx = SpringApplication.run(Application.class, args);
多亏了 Dave Syer 的专业知识,我才能够解决这个问题。
我在 application.properties
中设置了 security.basic.enabled=false
并从我的 build.gradle
文件中删除了 spring 安全性。
几天前我已经这样做了,但显然刷新项目没有用,所以 spring 安全 jar 留在类路径中,而我没有注意到这一点。完全重建项目后一切正常。
您可以申报
@Bean AuthenticationManager authenticationManager(AuthenticationManagerBuilder auth) {
return auth.getOrBuild();
}
前提是你已经配置好了"AuthenticationManagerBuilder"