Java Spring MVC+;使用CSRF进行安全测试
我知道这个问题在这个话题上已经存在,但对我来说仍然不起作用。我正在使用启用CSRF保护的Spring4MVC/安全堆栈。我关注spring博客,但仍然得到403禁止代码 这是我的测试设置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
@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) {
...