2016-05-25 3 views
0

Я тестирую свой контроллер с помощью 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.spr[email protected]bf72b5bd: Руководитель: Пользователь [ID = 1, ПгвЬЫате = name1, lastName = surname1, login = log1, [email protected], password = psw1, birthDate = 1980-01-01 00: 00: 00.0, role = [id = 1, name = USER]]; Учетные данные: [ЗАЩИТА]; Authenticated: false; Детали: null; Не предоставлены никакие полномочия

org.springframework.web.util.NestedServletException: обработка запроса не удалась; Вложенное исключение - это java.lang.RuntimeException: эта роль не зарегистрирована

Как установить роль для метода request.isUserInRole(); или, может быть, есть другое решение моей проблему

ответ

0

изменений моего тест с аддом 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()); 
     }