使用@Secured时,spring session scope form为null

时间:2014-07-17 13:25:21

标签: spring session spring-security roles spring-annotations

使用@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使表格为空?

上测试
  • 弹簧安全的web:3.2.0.M2
  • 弹簧安全的web:3.2.0.RELEASE
  • 弹簧安全的web:3.2.4.RELEASE

  • 弹簧核:3.2.9

1 个答案:

答案 0 :(得分:0)

尝试将initForm方法的范围从私有更改为公共。 –启一 拯救我的一天,谢谢!