【发布时间】:2015-11-16 14:18:39
【问题描述】:
我有一个应用程序,它在前端有 Angular 组件,在后端有 Java。我正在使用基于令牌的身份验证来提供安全性。但是我遇到了一个问题,当我发出 POST 请求时,我得到 403-Forbidden 状态码。所有 GET 请求都可以正常工作。我检查了我在 Java 端的所有实现,看起来还不错。我从 StackOverFlow.com 和其他论坛查看了其他解决方案,他们建议禁用 CSRF。即使我实现了这一点,我仍然得到 403。有人对此有任何想法吗?提前致谢,这是我的代码。
这是我的 security.xml
<security:http
realm="Portected API"
use-expressions="true"
auto-config="false"
create-session="stateless"
entry-point-ref="unauthorzedEntiryPoint"
authentication-manager-ref="authenticationManager">
<security:csrf disabled="true"/>
<security:custom-filter ref="authenticationTokenProcessingFilter" position="FORM_LOGIN_FILTER"/>
<security:intercept-url pattern="/foo" method="POST" access="hasAnyRole('USER', 'ADMIN')"/>
<security:intercept-url pattern="/bar" method="POST" access="hasAnyRole('USER', 'ADMIN')"/>
</security:http>
如您所见,我在代码的第 8 行禁用了 CSRF。这是我剩下的 XML 部分。
<security:global-method-security secured-annotations="enabled"/>
<security:authentication-manager id="authenticationManager">
<security:authentication-provider user-service-ref="userDetailService">
</security:authentication-provider>
</security:authentication-manager>
<beans:bean id="unauthorzedEntiryPoint" class="org.sec.config.security.UnauthorizedEntryPoint"/>
<beans:bean id="authenticationTokenProcessingFilter" class="org.sec.config.security.AuthenticationTokenProcessingFilter">
<constructor-arg ref="userDetailService"/>
</beans:bean>
<beans:bean id="userDetailService" class="org.sec.config.security.UserDetailService"/>
<beans:bean name="bcryptEncoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"/>
在我的 Angular 方面,我这样调用资源:
Restangular.all('bar').post(barModel, {}, {'Sec-Token': $localStorage.userToken})
.then(function (response) {
deferred.resolve(response);
vm.currentBlog = response;
//rest of the code.
}
【问题讨论】:
标签: java angularjs spring-security csrf http-status-code-403