Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring MVC+;使用CSRF进行安全测试_Java_Spring Mvc_Junit_Spring Security_Csrf Protection - Fatal编程技术网

Java Spring MVC+;使用CSRF进行安全测试

Java Spring MVC+;使用CSRF进行安全测试,java,spring-mvc,junit,spring-security,csrf-protection,Java,Spring Mvc,Junit,Spring Security,Csrf Protection,我知道这个问题在这个话题上已经存在,但对我来说仍然不起作用。我正在使用启用CSRF保护的Spring4MVC/安全堆栈。我关注spring博客,但仍然得到403禁止代码 这是我的测试设置 @Autowired private WebApplicationContext wac; private MockMvc mockMvc; @Before public void setUp() { this.mockMvc = MockMvcBuilders .webAp

我知道这个问题在这个话题上已经存在,但对我来说仍然不起作用。我正在使用启用CSRF保护的Spring4MVC/安全堆栈。我关注spring博客,但仍然得到403禁止代码

这是我的测试设置

@Autowired
private WebApplicationContext wac;

private MockMvc mockMvc;

@Before
public void setUp() {
    this.mockMvc = MockMvcBuilders
            .webAppContextSetup(this.wac)
            .apply(springSecurity())
            .build();
}
要测试的方法是处理formBean的post方法,下面是我如何执行测试方法请求

this.mockMvc.perform(
    post("/uploadFile")
    .contentType(MediaType.APPLICATION_FORM_URLENCODED) 
    .with(user("user").authorities(authorities))
    .with(csrf())
    .flashAttr("filesUploadForm",filesUploadForm)               
)
.andExpect(status().isOk())
.andExpect(view().name(FileController.VIEW_SHOW_FILES));
我使用RequestPostProcessor设置了一个具有特定权限的用户

List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
authorities.add(new SimpleGrantedAuthority("ROLE_USER"));
authorities.add(new SimpleGrantedAuthority("PERM_UPLOAD_FILE"));
当除CSRF(CSRF disable=true)之外的所有安全性都已启动时,这就像一个魔咒。当我启用CSRF保护时,即使我使用的是.SecurityMockMvcRequestPostProcessors.CSRF(),我仍然会得到一个java.lang.AssertionError:状态预期:但为:。 我还尝试显式地将令牌作为param注入,没有任何更改

我很迷路,非常感谢你的帮助,伙计

法克特

@PreAuthorize("hasAuthority('PERM_UPLOAD_FILE')")
@RequestMapping(value = ROUTE_UPLOAD_FILE, method = RequestMethod.POST)
public ModelAndView uploadFile(Model model, 
        @Valid @ModelAttribute("filesUploadForm") FilesUploadForm       filesUploadForm,
        BindingResult result, 
        HttpServletRequest httpServletRequest,
        HttpServletResponse httpServletResponse) {
...