Spring Security 在WebMVCTest中找不到Spring安全的Rest控制器

yrefmtwq  于 2022-11-29  发布在  Spring
关注(0)|答案(2)|浏览(165)

当在REST控制器上使用@Secured,实作界面时,在@WebMvcTest中找不到控制器。移除@Secured注解或移除类别上的实作,都会让它在测试中执行。

@Controller
@RequestMapping(path="/failing")
public class FailingTestController implements MyPasswordApi {

    @RequestMapping(method = GET, produces = MediaType.APPLICATION_JSON_VALUE, path = "/test")
    @Secured("ROLE_USER")
    public ResponseEntity<GetEntity> getMethod()

@Controller
@RequestMapping(path = "/running")
public class RunningTestController  {

    @RequestMapping(method = GET, produces = MediaType.APPLICATION_JSON_VALUE, path = "/test")
    @Secured("ROLE_USER")
    public ResponseEntity<GetEntity> getMethod() {

“RunningTest”将成功(即GET请求的状态为200),而“FailingTest”将以状态404结束。使用注入的RequestMapppingHanderMapping可以看到,具有继承的控制器未绑定。
实际上,在应用程序中,两个控制器都可以找到。
我的问题是,如何测试实现安全性 * 和 * 接口的控制器。
在github上可以找到一个测试用例:https://github.com/sanddorn/Spring-Boot-Security-Rest-Showcase

tp5buhyn

tp5buhyn1#

真实的的答案只能在github-repo中找到(参见问题)。

@SpringBootApplication
@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true)
public class TestApplication {
    public static void main(String []argv) {
        SpringApplication.run(TestApplication.class);
    }
}

使用不同的配置类,如

@Configuration
@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true)
public class TestConfiguration {
}

并且删除对应用类的所有额外注解解决了这个问题。

jaql4c8m

jaql4c8m2#

您正在使用错误的注解,请将Controller替换为RestController

@RestController
@RequestMapping(path = "/running")
public class RunningTestController  {
}

相关问题