【问题标题】:mockmvc: when I use mockMvc to test a controller, how to deal with the parameter Authentication?mockmvc:当我使用mockMvc测试一个控制器时,参数Authentication怎么处理?
【发布时间】:2019-12-11 04:37:23
【问题描述】:

我将使用 springsecurity 测试我的控制器。

@PostMapping("/xx")
public String xx(Authentication auth){
    String userId = (String)auth.getPrincipal();
    ....
}

我不知道如何模拟 Authentication 对象。还是有其他办法处理?

我的测试如下所示

public class MyControllerTest{
    @Autowired
    private XxController xxController;

    private MockMvc mockMvc;

    @Before
    public void setUp() {
        mockMvc = MockMvcBuilders.standaloneSetup(xxController).build();
    }

    @Test
    public void xxtestMethod() throws Exception {

    MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.post(/xx))
            .andExpect(MockMvcResultMatchers.status().isOk())
            .andDo(MockMvcResultHandlers.print())
            .andReturn();
    }
}

【问题讨论】:

  • @Deadpool 对不起,我没明白你的意思,你的意思是身体吗?
  • 身份验证是springsecurity过滤链中的一个对象
  • 我认为这个Authentication不是http请求中的header东西

标签: mockito mockmvc spring-security-rest


【解决方案1】:

对于基本身份验证,在尝试了不同的方法后,我发现这对我有用:

MockMvcRequestBuilders
            .post(urlEndpoint)
            .principal(new MyAuthentication())

注意 MyAuthentication 类实现了 Authentication 接口

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2014-05-31
  • 1970-01-01
  • 2015-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-04
相关资源
最近更新 更多