Java Springframework安全性,无法为POST方法提交html表单
我已经为我的Springframework RESTful服务配置了Springframework安全性(4.0)。对于浏览器启动的GET访问和html表单(其中action=GET),一切都进行得很顺利,但对于method=requestMethod.POST的服务,一切都失败了,要么通过浏览器提交一个带有action=POST的html表单;或者从远程应用程序使用RestTemplate 为了查看问题,我将配置简化为以下内容。这样,我就可以访问Method=GET的所有服务,而不会被质询凭据(似乎是正确的),但会收到“accessDeniedPage”的失败消息(我从未被质询凭据) 所有服务都在“/CouponController/**”下: 如果我使用以下配置,当访问method=GET的服务时,我将被质询凭据,而当访问method=POST的服务时,我仍然会看到相同的行为:Java Springframework安全性,无法为POST方法提交html表单,java,spring,spring-mvc,spring-security,Java,Spring,Spring Mvc,Spring Security,我已经为我的Springframework RESTful服务配置了Springframework安全性(4.0)。对于浏览器启动的GET访问和html表单(其中action=GET),一切都进行得很顺利,但对于method=requestMethod.POST的服务,一切都失败了,要么通过浏览器提交一个带有action=POST的html表单;或者从远程应用程序使用RestTemplate 为了查看问题,我将配置简化为以下内容。这样,我就可以访问Method=GET的所有服务,而不会被质询凭据
@Override
protected void configure (HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/CouponController/**").access("hasRole('STAFF')")
.and().formLogin().permitAll()
.and().exceptionHandling().accessDeniedPage("/Accesses_Denied_Due_To_Security_failure");
}
我做错了什么?我找到了表单提交失败的原因 默认情况下,spring安全性为XML和Java配置启用csrf。这导致我的代码无法提交表单,因为我提交的表单不包含csrf令牌。不幸的是,当我使用Java配置时,错误消息只有“404请求的资源不可用”。当我切换到XML配置时,错误消息将提供信息 禁用csrf后,表单提交成功。现在,我需要返回,并找出如何在我的表单中包含csrf令牌
希望这有帮助。它失败的原因是表单中没有CSRF令牌 如果添加页面上包含的以下Spring表单标记库:
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
在JSP中使用Springs
标记,而不是标准的HTML
,它会自动将(强烈推荐的)CSRF标记添加到表单中
这将更加安全,是一种良好的做法,而不是禁用该功能
或者,如果您想使用标准HTML
,您可以添加以下隐藏字段,Spring Security将处理其余字段:
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" />
谢谢您提供的信息。请您完成关于如何为标准HTML添加隐藏字段的句子好吗?因为HTML页面是从Restful服务从服务器返回的,所以我想看看是否可以让自己远离JSP。@user1693207我添加了隐藏字段示例。
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" />