Java 我正在使用@PreAuthorize(“hasAnyRole”(“SOME”ROLE&“x27”)),如何使用testNG测试它?

Java 我正在使用@PreAuthorize(“hasAnyRole”(“SOME”ROLE&“x27”)),如何使用testNG测试它?,java,java-security,Java,Java Security,我已经开始使用@PreAuthorize,我想用testNg来测试它。 我正在使用带有用户上下文(“用户名”)的;但我运行的每个测试都会通过,但授权是在门户中实时完成的。 有人能帮我解决这个问题吗 @Test private void testFunctionWith@PreAuthorize() throws Exception { withUserContext("username"); } public SecurityContext withUserContext(String u

我已经开始使用
@PreAuthorize
,我想用
testNg
来测试它。 我正在使用带有用户上下文(“用户名”)的
;但我运行的每个测试都会通过,但授权是在门户中实时完成的。 有人能帮我解决这个问题吗

@Test
private void testFunctionWith@PreAuthorize() throws Exception {
   withUserContext("username");
}
public SecurityContext withUserContext(String username) {
    UserDetails principal = asyncCall(username);
    Authentication authentication = new UsernamePasswordAuthenticationToken(principal, principal.getPassword(),
            principal.getAuthorities());
    SecurityContext context = SecurityContextHolder.getContext();
    context.setAuthentication(authentication);

    return context;
}

@Async
public UserDetails asyncCall(String username) {
    return userDetailsService.loadUserByUsername(username);
}

预计会失败的测试正在通过。

您应该使用mvcPerform套件和mvcMock

McvMock将模拟您的安全过滤器链、过滤器和麦克风上下文,而mvcPerform将执行验证响应(类型、状态、内容等)的http调用


MvcPerform示例:

对于一个我不知道的独立应用程序,我可以通过用户上下文来实现吗。MvcContext用于检索所有与mvc相关的bean。看看