我在控制器方法的基础上添加了@preAuthorize("@securityService.hasPermission()")
,并使用给定的方法创建了相关的bean -
@Configuration
public class SecurityConfig {
@Bean
public PreAuthorizationSecurityService securityService() {
return new PreAuthorizationSecurityService();
}
}
现在,我使用MockMvc测试我的控制器。当我将SecurityConfig.class
添加到测试类的ContextConfiguration
时,控制器方法会检查权限。但是,我想以一种我的课程不必导入PreAuthorizationSecurityService
进行测试的方式来模拟SecurityConfig.class
。
答案 0 :(得分:0)
如果您只想声明服务的模拟而不是导入整个 <form method="post" name="form" (ngSubmit)="f.form.valid && login()" #f="ngForm" novalidate>
<fieldset>
<p>
<label>Username</label>
<input type="text" placeholder="e.g. JohnDoe" [(ngModel)]="model.username" #username="ngModel"
name="username" required/>
</p>
<p [ngClass]="{ 'has-error': f.submitted && !password.valid }">
<label>Password</label>
<input type="password" placeholder="Password" name="password" [(ngModel)]="model.password"
#password="ngModel" required/>
</p>
<p>
<input type="submit" [disabled]="loading" class="btn" value="Login">
</p>
</fieldset>
</form>
,您可以通过在测试配置中声明这一点来轻松实现:
SecurityConfig
然后将mock设置为在需要时返回true。您还可以提供自己的模拟实现,始终返回true。
也就是说,这不是使用Spring Security的常用方法。您应该考虑重构您的应用程序以使用标准的基于角色的系统,它将为您省去一些麻烦。
我不知道你的@Configuration
public class TestConfig {
@Bean
public PreAuthorizationSecurityService mockedSecurityService() {
//providing you use Mockito for mocking purpose
return mock(PreAuthorizationSecurityService.class);
}
}
看起来是什么样的,如果这适用于你的情况,但在大多数情况下,它应该是你应该瞄准的目标。
使用这种基于标准角色的方法,Spring Security Test(v4 +我认为)可以轻松地使用@WithMockUser
等注释模拟具有给定角色的连接用户。