spring boot-@preauthorized在运行@datajpatest时被忽略

x6h2sr28  于 2021-07-06  发布在  Java
关注(0)|答案(0)|浏览(151)

我正在为一个应用程序编写junit测试,在尝试测试带有注解的方法时遇到了一个问题 @Preauthorized .
目标:运行两个测试,一个有适当的角色,一个没有,并成功地获得未经授权的异常。
问题:运行测试 @WithMockUser(authorities = "some-authority") 对测试结果没有影响。就好像 @Preauthorized 注解不存在。
目前我的单元测试设置如下:

@RunWith(SpringRunner.class)
@DataJpaTest
@Sql({"/db/all-schema.sql", "/db/all-data.sql"})
public class MyControllerTest {
    @Autowired
    private MyRepository myRepository;

    private MockMvc mvc;

    @Before
    public void setUp() {
        MyService myService =  new MyService(this.myRepository);
        MyController myController = new MyController(myService);

        MockitoAnnotations.initMocks(this);
        this.mvc = MockMvcBuilders.standaloneSetup(myController).build();
    }

    @Test
    @WithAnonymousUser
    public void createObject_ShouldFailUnauthorized() throws Exception {
        JSONObject requestBody = new JSONObject();
        ...

        MockHttpServletResponse response = mvc.perform(post("/create")
                .contentType(MediaType.APPLICATION_JSON)
                .content(requestBody.toString())
        ).andReturn().getResponse();

        JSONObject jsonResponse = new JSONObject(response.getContentAsString());
        Assert.assertEquals(false, jsonResponse.getBoolean("success"));
        ...
    }
}

进一步解释:
我经营一家 @DataJpaTest 从控制器级别,这样我就可以在一次调用中调用api并测试控制器、服务和存储库方法。
控制器方法用 @PreAuthorize("hasRole('my-role')") 我在 spring-boot-starter-parent 版本2.2.5
当我运行测试时,无论我是否没有用户、匿名用户或正确的用户和角色,测试总是通过,并且我无法让它执行预授权检查。
一定有什么我错过了,但所有的例子我看到网上不包括执行与一个 @DataJpaTest .
有人能提供更好的见解吗?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题