使用@Secured 时,spring 会话范围表单为空

Posted

技术标签:

【中文标题】使用@Secured 时,spring 会话范围表单为空【英文标题】:spring session scope form is null when using @Secured 【发布时间】:2014-09-08 09:38:37 【问题描述】:

当使用@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>

我浏览“/someAction”,然后 显示“表单为空”。

并更改 Controller#someAction(Principal) 代码,如下所示 (删除@Secured注解)

    @RequestMapping(value = "/someAction", method =  RequestMethod.POST )
    //@Secured("hasRole('ROLE_CHILD')")
    public String someAction(Principal principal) 
        return "/some"
    

再次浏览页面, 显示“form is NOT null”。

如果使用@PreAuthorize 而不是@Secured,则结果相同。 @Secured 提供的安全功能可以正常工作。我收到了 403 响应。

为什么@Secured 使表单为空?

经过测试

spring-security-web:3.2.0.M2 spring-security-web:3.2.0.RELEASE spring-security-web:3.2.4.RELEASE

弹簧芯:3.2.9

【问题讨论】:

尝试将 initForm 方法的范围从私有更改为公共。 很好用!非常感谢。头疼了两天。 【参考方案1】:

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

【讨论】:

投一个答案比写一个单独的答案好 Xuân Cường,请不要添加“thanks”作为答案。它们实际上并没有提供问题的答案,并且可能被未来的访问者视为噪音。一旦你earn足够reputation,你将获得upvote answers你喜欢的特权。这样,问题的未来访问者将看到对该答案的更高投票数,并且回答者也将获得声誉积分奖励。见Why is voting important。

以上是关于使用@Secured 时,spring 会话范围表单为空的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Spring Security @Secured 注解测试 Spring Boot @WebFluxTest

使用 Thymeleaf 时,Spring 安全会话范围似乎为空

Struts2 + Spring Security 2.06:尝试在 Action 方法上使用 @Secured 时,Valuestack 为空

是否可以使用会话中的属性配置 Spring 会话范围的 bean?

当会话在 websphere 中失效时,Spring 视图范围不会被破坏

Spring Security应用开发(21)基于方法的授权使用@Secured注解