mockmvc模拟Spring Security登录用户

你的名字 2022-12-16 05:56 466阅读 0赞

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

  1. public class WithMockCustomUserSecurityContextFactory
  2. implements WithSecurityContextFactory<WithMockCustomUser> {
  3. @Override
  4. public SecurityContext createSecurityContext(WithMockCustomUser customUser) {
  5. SecurityContext context = SecurityContextHolder.createEmptyContext();
  6. CustomUserDetails principal =
  7. new CustomUserDetails(customUser.name(), customUser.username());
  8. Authentication auth =
  9. new UsernamePasswordAuthenticationToken(principal, "password", principal.getAuthorities());
  10. context.setAuthentication(auth);
  11. return context;
  12. }
  13. }

1.2.处理数据:

1.2.1.添加@WithMockUser注解会去查找默认注册的测试用户

  1. @Test
  2. @WithMockUser
  3. 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)
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,466人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Java-模拟用户登录

    Java实验题目:模拟用户登录。编写一个程序,模拟用户登录。 \---- Java实验题目:模拟用户登录。编写一个程序,模拟用户登录。 程序要求