spring - Spring Boot MockMVC 测试 - 启用前后注释
问题描述
我有一个(kotlin)测试,其中包含带有 Spring Boot 的代码:
@Autowired
private lateinit var context: WebApplicationContext
@Autowired
private lateinit var entityManager: EntityManager
private var mockMvc: MockMvc? = null
@Autowired
lateinit var springSecurityFilterChain: Filter
@BeforeAll
fun setup() {
mockMvc = MockMvcBuilders
.webAppContextSetup(context)
.addFilters<DefaultMockMvcBuilder>(springSecurityFilterChain)
.apply<DefaultMockMvcBuilder>(springSecurity())
.build()
}
此方法失败并出现 401:
@PutMapping("/register")
@ResponseStatus(HttpStatus.OK)
@PreAuthorize("permitAll()")
fun registerNewUser(@Valid @RequestBody userDTO: UserDTO): User {
val user = userDTO.toUser(passwordEncoder)
user.activationCode = generateActivationCode()
userRepository.save(user)
return user
}
我不明白为什么我的前/后授权没有运行?
我在我的应用程序中定义了这些src/main/
:
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
class MethodSecurityConfigurer : GlobalMethodSecurityConfiguration()
@Configuration
class SecurityConfiguration {
@Bean
fun getPasswordEncoder(): PasswordEncoder {
return Pbkdf2PasswordEncoder()
}
}
在 MockMVC 的设置中我需要做什么来启用前/后注释?
解决方案
所以我想通了,我想我会在这里添加答案。
这不是 MockMVC 问题,M. Deinum 是正确的,因为这两个注释都可以工作。
我的问题是这@PreAuthorize("permitAll()")
是一个与“普通”弹簧安全过滤器分开的过滤器,所以我什至没有进入方法授权方面。
我配置了 Spring SecurityHttpSecurity
以允许该方法,然后permitAll()
开始正常工作。
http.authorizeRequests().antMatchers(HttpMethod.PUT, '/register').permitAll()
推荐阅读
- c# - 我可以在 console.WriteLine 中设置未知数量的对象参数吗?
- amazon-web-services - 尝试运行 RTSP 示例应用程序 (AWS)
- sql - & 在 Oracle Column Name 中认为它是一个变量
- php - 即使条件为假,PHP IF 语句中的 SQL 语句也会执行
- java - 访问 Java admin SDK Firestore 实例的关闭选项
- python - 有没有办法在 POST 方法的主体中发送函数
- python - 如何在不更改 Python 中的原始列表变量的情况下修改列表?
- python-3.x - 在一列中填写不同类别的NA值
- flutter - Flutter Multiple DropdownButton 使用 List 创建
- ios - yarn ios, BUILD FAILED , iOS Simulator 部署目标, Skipping duplicate build file, & Capabilities for Signing & Capabilities 可能不起作用