【问题标题】:Authentication role身份验证角色
【发布时间】:2016-09-23 03:01:22
【问题描述】:

我用 Mockito 测试我的控制器。 在控制器中测试我的方法:

@RequestMapping("/dispatcher")
    public String disp(final HttpServletRequest request) {
        if (request.isUserInRole("USER")) {
            return "hello";
        } else if (request.isUserInRole("ADMIN")) {
            return "redirect:listUsers.htm";
        }
        throw new RuntimeException("This role is not registrated");
    }

我的测试方法:

@Test

    public void testDispatcher() throws Exception {
    User user = userDao.findByLogin("log1");
    TestingAuthenticationToken testingAuthenticationToken = new TestingAuthenticationToken(user, AuthorityUtils.createAuthorityList("USER"));  
              SecurityContextHolder.getContext().setAuthentication(testingAuthenticationToken);
                System.out.println(testingAuthenticationToken);
                mockMvc.perform(post("/dispatcher")
                        .principal(testingAuthenticationToken))
                        .andExpect(status().isOk());
}

错误: org.springframework.security.authentication.TestingAuthenticationToken@bf72b5bd:主体:用户 [id=1,firstName=name1,lastName=surname1,login=log1,email=email1@gmail.com,password=psw1,birthDate=1980-01- 01 00:00:00.0,角色=[id=1,名称=USER]];凭证:[受保护];已认证:假;详细信息:空;未授予任何权限

org.springframework.web.util.NestedServletException:请求处理失败;嵌套异常为 java.lang.RuntimeException: 此角色未注册

我如何为方法 request.isUserInRole(); 设置角色 或者可能对我的问题有另一种解决方案

【问题讨论】:

    标签: java spring testing spring-security mockito


    【解决方案1】:

    通过添加 GrandAuthorities 更改我的测试,但 isUserinRole 也是“假”

     @Test
            public void testDispatcher() throws Exception {
                User user = userDao.findByLogin("log1");
                String sRole = user.getRole().getName();
                List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
                authorities.add(new SimpleGrantedAuthority(sRole));
                UsernamePasswordAuthenticationToken userDetails =
                        new UsernamePasswordAuthenticationToken(user.getLogin(), user.getPassword(),authorities);
                TestingAuthenticationToken testingAuthenticationToken = new TestingAuthenticationToken(userDetails, null,authorities);
                SecurityContextHolder.getContext().setAuthentication(testingAuthenticationToken);
                mockMvc.perform(post("/dispatcher")
                        .principal(testingAuthenticationToken))
                        .andExpect(status().isOk());
            }
    

    【讨论】:

      猜你喜欢
      • 2015-05-31
      • 1970-01-01
      • 1970-01-01
      • 2016-12-22
      • 2013-08-23
      • 2020-08-13
      • 2015-01-09
      • 2016-01-03
      • 2020-11-20
      相关资源
      最近更新 更多