mockmvc模拟Spring Security登录用户
mockmvc模拟Spring Security登录用户
- 1.1.准备数据:
- 1.1.1.创建模拟用户,并设置默认用户信息
- 1.1.2.为`WithMockCustomUser`指定一个`SecurityContextFactory`
- 1.2.处理数据:
- 1.2.1.添加@WithMockUser注解会去查找默认注册的测试用户
- 1.2.2.如果不想经常在测试中用同一用户,可以试一下每次指定用户信息
- 1.2.3.另外还有一个情况就是,我们可能需要的不止那些固定的用户信息。
简单实现:
1.1.准备数据:
1.1.1.创建模拟用户,并设置默认用户信息
注:
@WithUserDetails
将允许我们使用自定义UserDetailsService
来创建Authentication
主体,但要求用户存在@Retention(RetentionPolicy.RUNTIME)
@WithSecurityContext(factory = WithMockCustomUserSecurityContextFactory.class)
public @interface WithMockCustomUser {String username() default “admin”;
String name() default “admin”;
}
1.1.2.为WithMockCustomUser
指定一个SecurityContextFactory
public class WithMockCustomUserSecurityContextFactory
implements WithSecurityContextFactory<WithMockCustomUser> {
@Override
public SecurityContext createSecurityContext(WithMockCustomUser customUser) {
SecurityContext context = SecurityContextHolder.createEmptyContext();
CustomUserDetails principal =
new CustomUserDetails(customUser.name(), customUser.username());
Authentication auth =
new UsernamePasswordAuthenticationToken(principal, "password", principal.getAuthorities());
context.setAuthentication(auth);
return context;
}
}
1.2.处理数据:
1.2.1.添加@WithMockUser注解会去查找默认注册的测试用户
@Test
@WithMockUser
public void should_test(){ }
1.2.2.如果不想经常在测试中用同一用户,可以试一下每次指定用户信息
a.直接指定
@WithMockUser(username = “ admin”,roles = { “ USER”,“ ADMIN” })
b.或者可以创建一个名为
WithMockAdmin
的注释,用法同@WithMockUser一样加在要测试的方法上就OK:@Retention(RetentionPolicy.RUNTIME)
@WithMockUser(value =“ rob”,roles =“ ADMIN”)
public @interface WithMockAdmin { }
1.2.3.另外还有一个情况就是,我们可能需要的不止那些固定的用户信息。
一些额外属性的获取就可以尝试通过@WithUserDetails添加自定义信息,由于我没有去研究这个,就暂不做分享以免误导,可以参考这个链接,我想你需要的里边应该都有。
晚安o((≧▽≦o)
还没有评论,来说两句吧...