簡體   English   中英

如何在Java中使用Spring切換用戶進行測試?

[英]How to switch user using Spring in Java for testing purposes?

我使用Spring Security SwitchUserFilter編寫了功能。 在實際應用中,我可以使用切換用戶/j_spring_security_switch_user?j_username=xxx的網址,並返回到以前使用/j_spring_security_exit_user 我還實現了幾種取決於切換用戶的事實的方法,所以我想為它們編寫單元測試。 因此我的問題是如何在jUnit測試環境中切換用戶?

我編寫的方法是使用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;
}

如果您想進行集成測試,您應該考慮使用自定義http客戶端,或者如果您的測試邏輯依賴於它,甚至是像Selenium這樣的GUI驅動程序。

如果我們討論的是單元測試,請參考Springs http://spring.io/blog/2014/05/07/preview-spring-security-test-method-security文檔,它們支持大量測試,@ WithMockUser注釋出現在是您正在尋找的,它允許您指定應該運行此測試的角色或用戶。

我用過這個:

private void switchUser(User user, String roleName) 
{
    Authentication authentication = SecurityContextHolder.getContext().getAuthentication();

    Collection<GrantedAuthority> authorities = 
            new ArrayList<>();
    GrantedAuthority ga = new SimpleGrantedAuthority(roleName);
    authorities.add(ga);

    Authentication result = new UsernamePasswordAuthenticationTokenExt(
            user,
            authentication.getCredentials(),
            null,
            System.currentTimeMillis()
    );

    SecurityContextHolder.getContext().setAuthentication( result );
}

其中User是新用戶,而roleName是要設置的新權限(當然這個方法可以修改得更多參數等)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM