春天禁用@EnableResourceServer
Posted
技术标签:
【中文标题】春天禁用@EnableResourceServer【英文标题】:Spring disable @EnableResourceServer 【发布时间】:2018-01-09 22:49:37 【问题描述】:我有资源服务器,当它启动时 - 它正在向身份验证服务器(“http://localhost:xxxx/auth/oauth/token_key”)发送请求,并且一切正常并运行。
但是当我测试我的服务时,我根本不需要这个。如何禁用资源服务器,或者我应该模拟某些东西,使其不依赖于身份验证服务器(用于控制器的未来安全测试)?
我的spring boot main:
@SpringBootApplication
@EnableEurekaClient
@EnableResourceServer
public class CalendarApplication
public static void main(String[] args) throws Exception
SpringApplication.run(CalendarApplication.class, args);
application.yml
security:
basic:
enabled: false
oauth2:
resource:
jwt:
keyUri: http://localhost:xxxx/auth/oauth/token_key
测试类注解:
@RunWith(SpringJUnit4ClassRunner.class)
@WebMvcTest(value = TypeController.class, secure = false)
public class TypeControllerTest
【问题讨论】:
【参考方案1】:您为什么不使用单独的个人资料 (@Profile("test")
) 为您的 @AuthenticationServer
创建单独的 @Configuration
?这样,您无需禁用安全性并且可以拥有内存中的令牌。我就是这样处理的。您还可以完全禁用测试的 Spring Security。看看this question。
【讨论】:
您知道仅在应用程序上下文中禁用@EnableResourceServer
的方法吗?无需接触源代码。
我不认为有一个,因为你试图禁用你首先启用的东西。我会为不同环境的应用程序上下文使用不同的配置。最后,您将希望在启用所有功能的情况下测试您的应用。【参考方案2】:
您可以使用@WithMockUser
进行测试
Testing Method Security
【讨论】:
您知道仅在应用程序上下文中禁用@EnableResourceServer
的方法吗?无需接触源代码。【参考方案3】:
我解决此问题的方法是在我用于测试的数据库中创建一个令牌,并确保对我的 API 的请求使用令牌在向资源发出请求正在测试中。
你确实想要你的令牌在那里,因为它可以作为一个合理的安全检查。如果您希望在没有特定令牌的情况下无法访问此资源,那么这是一个有用的测试。
【讨论】:
但我有两个案例 - 首先是测试案例,我正在使用 json 模式检查有效的 json。在那里我根本不需要安全。在另一种情况下,我想测试安全性,当然需要令牌。 例如,如果我想测试我的存储库,它不会运行应用程序,因为它正在尝试查找 AuthServer.. 这不是正确的行为。以上是关于春天禁用@EnableResourceServer的主要内容,如果未能解决你的问题,请参考以下文章
Spring security 的 @EnableWebSecurity 与 oauth 的 @EnableResourceServer
使用 @EnableResourceServer 支持 Spring Boot 反应式 (webflux)
@EnableResourceServer 不适用于 spring-webflux
EnableResourceServer 中断 oAuth2 授权服务器