mockMvc не понимает securityConfig с несколькими Matchers - PullRequest
0 голосов
/ 01 октября 2019

моя конфигурация безопасности:

http.authorizeRequests().antMatchers("/ticket/create")
                .access("hasAnyAuthority('MANAGER','EMPLOYEE')")
                .and().authorizeRequests().antMatchers("/api/**","/ticket/*")
                .access("isAuthenticated()")
                .and().formLogin().loginPage("/login").failureUrl("/login?error")
                .and().formLogin().defaultSuccessUrl("/ticket/all", true)
                .usernameParameter("email")
                .passwordParameter("password")
                .and().csrf().disable();

Как видите, у меня / ticket / * требуется любая аутентификация, но прежде чем я получу более высокий приоритет с / ticket / create, у меня будет доступно только 2 роли.

На живом сервере все работает нормально, но когда я пытаюсь написать тест, возвращает 403, запрещенный, как будто у меня нет доступа. Мой тест:

@Test
    public void testTicketCreate() throws Exception {

        logger.info("Test: Create Ticket Page");
        mockMvc.perform(get("/ticket/create").with(user("user").password("123").roles("MANAGER")))
                .andExpect(status().isOk())
                .andExpect(view().name("createTicket"));

    }

, если я изменю тест с / ticket / create на любой другой URL-адрес, например / ticket / {id}, он пройдет с тем же пользователем.

1 Ответ

0 голосов
/ 01 октября 2019

Когда вы указываете, что у пользователя есть .roles("MANAGER"), это дает ему эквивалентные права доступа "ROLE_MANAGER".
Ваша конфигурация безопасности ищет полномочия "MANAGER", а не "ROLE_MANAGER".
. Вы можетеизмените своего тестового пользователя на использование .authorities(new SimpleGrantedAuthority("MANAGER")) вместо .roles("MANAGER").

...