使用@Secured注释时,表单(控制器的成员和会话范围)将变为空。
Form.java
@Component
@Scope(value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class Form {
//members...
}
Controller.java
@Controller
public class Controller {
@Autowired
private Form form;
@ModelAttribute("form")
private Form initForm(Principal principal) {
return form;
}
@RequestMapping(value = "/someAction", method = { RequestMethod.POST })
@Secured("hasRole('ROLE_CHILD')")
public String someAction(Principal principal) {
return "/some"
}
}
some.html(与百里香叶)
<!-- display when form is NOT null -->
<span th:if="${form}">form is NOT null</span>
<!-- display when form is null -->
<span th:unless="${form}">form is null</span>
我浏览&#34; / someAction&#34;然后 &#34;表格为空&#34;显示。
并更改Controller#someAction(Principal)代码,如下所示 (删除@Secured注释)
@RequestMapping(value = "/someAction", method = { RequestMethod.POST })
//@Secured("hasRole('ROLE_CHILD')")
public String someAction(Principal principal) {
return "/some"
}
再次浏览页面, &#34;表格不为空&#34;显示。
如果使用@PreAuthorize而不是@Secured,它会变成相同的结果。 @Secured提供的安全功能很好。我得到了403回复。
为什么@Secured使表格为空?
在
上测试和
答案 0 :(得分:0)
尝试将initForm方法的范围从私有更改为公共。 –启一 拯救我的一天,谢谢!