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

问题描述 投票:0回答:1

我的安全性配置:

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},它将通过同一用户通过。

spring spring-security mockmvc
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.