如何使用Java中的Spring切换用户进行测试?

xno*_*nor 4 java junit spring spring-security

我使用 Spring Security 编写了功能SwitchUserFilter。在应用程序中,我可以使用 URL 切换用户/j_spring_security_switch_user?j_username=xxx并返回到之前使用/j_spring_security_exit_user. 我还实现了几种取决于切换用户事实的方法,所以我想为它们编写单元测试。因此我的问题是如何在 jUnit 测试环境中切换用户?

xno*_*nor 5

我编写了一种方法,该方法正在为用户做好准备SwitchUserGrantedAuthority并让他登录。对于我的测试目的来说,它似乎工作得很好,但是任何提示和评论都将非常感激。

@SuppressWarnings({ "rawtypes", "unchecked" })
private User logAdminAsUser(User admin, String roleName) {
    SecurityContextHolder.getContext().setAuthentication(
        new TestingAuthenticationToken(admin, null, "ROLE_ADMIN"));
    Authentication adminAuth = SecurityContextHolder.getContext().getAuthentication();
    SwitchUserGrantedAuthority switchUserGrantedAuthority =
        new SwitchUserGrantedAuthority("ROLE_ADMIN", adminAuth);
    List authorities = new LinkedList();
    authorities.add(switchUserGrantedAuthority);
    User user = populator.storeUser("ROLE_USER");
    SecurityContextHolder.getContext().setAuthentication(
        new TestingAuthenticationToken(user, null, authorities));
    return user;
}
Run Code Online (Sandbox Code Playgroud)