2017-09-27 74 views
1

我在我的控制方法的頂部添加@preAuthorize("@securityService.hasPermission()"),並與給定的方法 -測試@preAuthorize(custom_implementation)與MockMvc

@Configuration 
    public class SecurityConfig { 
    @Bean 
    public PreAuthorizationSecurityService securityService() { 
     return new PreAuthorizationSecurityService(); 
    } 
    } 

創建相關Bean現在,我使用MockMvc測試我的控制器。當我將測試類的SecurityConfig.class添加到ContextConfiguration時,控制器方法會檢查權限。但是,我想嘲笑PreAuthorizationSecurityService,我的班級無需爲測試目的導入SecurityConfig.class

回答

0

如果你只是想聲明你的服務的模擬,而不是導入整個SecurityConfig的,你可以很容易地在您的測試配置聲明這個這麼做:

@Configuration 
public class TestConfig { 
    @Bean 
    public PreAuthorizationSecurityService mockedSecurityService() { 
     //providing you use Mockito for mocking purpose 
     return mock(PreAuthorizationSecurityService.class); 
    } 
} 

然後設置你的模擬返回true需要的時候。您也可以提供自己的模擬實現,始終返回true。


這就是說,這不是使用Spring Security的常用方法。而且您應該考慮重構應用程序以使用標準的基於角色的系統,這會爲您節省一些麻煩。

我不知道你的PreAuthorizationSecurityService看起來像什麼,如果這可以適用於你的情況,但在大多數情況下,它應該,這就是你應該瞄準的。

有了這個標準的基於角色的方法,Spring Security Test(v4 +我認爲)可以輕鬆地讓連接的用戶模擬連接的用戶,使其具有註釋,如@WithMockUser