mockMvc无法理解具有多个Matchers的securityConfig

时间:2019-10-01 11:09:45

标签: spring spring-security mockmvc

我的安全配置:

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拥有更高的优先级之前,只有两个角色可用。

在实时服务器上运行正常,但是当我尝试编写测试时,返回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更改为其他任何网址,例如/ ticket / {id},它将通过同一用户通过。

1 个答案:

答案 0 :(得分:0)

当您指定用户具有.roles("MANAGER")时,就会赋予该用户等效的权限"ROLE_MANAGER"
您的安全配置正在寻找权限"MANAGER",而不是"ROLE_MANAGER"
您可以将测试用户更改为使用.authorities(new SimpleGrantedAuthority("MANAGER"))而不是.roles("MANAGER")