当执行器处于活动状态时,我应该使用哪个注释来防止 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"