当使用Spring Security运行应用程序时,我在所有浏览器上都出现以下错误:
“服务器已了解要求,但拒绝受权”
我尝试将“spring-security.xml”文件中的角色从“ROLE_ADMIN”更改为“ROLE_USER”。
下面是“spring-security.xml”
<http auto-config="true">
<intercept-url pattern ="/admin" access = "hasRole('ROLE-USER')"/>
</http>
<authentication-manager>
<authentication-provider>
<user-service>
<user name = "abc" password = "xyz" authorities="hasRole('ROLE-USER')" />
</user-service>
</authentication-provider>
</authentication-manager>
下面是SpringController类:
@Controller
public class SpringController {
@RequestMapping(value = "/")
public String homePage() {
return "HomePage";
}
@RequestMapping(value="/admin", method=RequestMethod.GET)
public String loginPage() {
return "login";
}
HomePage.jsp和login.jsp页面是加载的属性,但在login.jsp上传递凭据后出现错误:
HTTP状态403 -禁止
类型:状态报告
消息:访问被拒绝
说明:服务器理解请求,但拒绝授权。
Apache Tomcat/7.0.90版本的操作系统
5条答案
按热度按时间d8tt03nd1#
403是一个非常常见的错误代码。我也遇到过同样的问题,但在做了一些修改后,我能够使它工作。仍然不确定问题是与密码加密或 form-login 标记的配置有关。
忽略标记中的 security: 前缀。
密码前的 {noop} 确保我没有对密码使用任何加密。
显示登录JSP的控制器
表单操作
kqhtkvqz2#
我遇到了这个问题,但不是在使用Spring的时候。我们在同一个服务器上托管了我们自己的内部应用程序的两个示例,但使用了两个不同的端口。登录到一个示例是可以的,但是从同一个浏览器登录到另一个示例(另一个选项卡)会导致Tomcat抛出上述错误,前面有这样的消息“CSRF nonce validation failed"。
我做的变通方法是从不同的浏览器登录到另一个示例。我知道这不是一个修复,但它可能会帮助如果你有一个类似的情况
vwkv1x7d3#
发生这种情况是因为您使用了带有Spring安全性的普通标记,而它会检查CSRF攻击。
解决的办法是:
rbl8hiat4#
当我不小心在不同的tomcat服务器上启动应用程序的两个示例时,我也遇到过这种情况。我通过删除
webapps
和work
文件夹中应用程序的工作目录,并重新启动服务器来解决这个问题。yzxexxkh5#
当您处理Spring安全性时,请使用
<form:form>
标记,而不是手动为每个表单添加CSRF标记,如下所示