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