我已经在我的项目中添加了 Spring security 并将其配置为
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-4.0.xsd">
<http>
<intercept-url pattern="/add-job**" access="hasRole('USER')" />
<form-login
login-page="/login"
default-target-url="/"
always-use-default-target="true"/>
<logout />
</http>
<authentication-manager>
<authentication-provider>
<user-service>
<user name="admin" password="admin" authorities="ROLE_ADMIN" />
</user-service>
</authentication-provider>
</authentication-manager>
</beans:beans>
通过上面的配置,当我转到 /add-job
时,它会将我重定向到 \login
并在登录成功后我转到 /add-job
它显示错误
我有什么错误吗?
最佳答案
Spring Security 拒绝访问是正确的:
- 您在身份验证管理器中只定义一个登录名:
admin/admin
具有一个权限ROLE_ADMIN
- 您将对
/add-job**
的访问权限限制为具有ROLE_USER
权限的用户
没有用户可以拥有 ROLE_USER
权限,因此 spring security 将始终拒绝访问。
您应该使用 ROLE_ADMIN
或 ROLE_USER
(或您喜欢的任何其他 ROLE_xxx
),但在保护资源时使用相同的方式(access="hasRole(xxx)"
) 并授予用户 (authorities="ROLE_xxx"
)
无论如何,最简单的修复方法是为用户 admin 添加所需的权限:
<user name="admin" password="admin" authorities="ROLE_ADMIN,ROLE_USER" />
关于java - HTTP 状态 403 - 访问被拒绝 Spring 安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32547969/