Spring Security:收到错误“服务器理解了请求但拒绝授权”

Jee*_*ahu 5 web.xml spring-security

使用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>
Run Code Online (Sandbox Code Playgroud)

下面是SpringController类:

@Controller
public class SpringController {



@RequestMapping(value = "/")
    public String homePage() {
        return "HomePage";
    }
    @RequestMapping(value="/admin", method=RequestMethod.GET)
    public String loginPage() {
        return "login";
}
Run Code Online (Sandbox Code Playgroud)

已加载HomePage.jsp和login.jsp页面的属性,但是在login.jsp上传递凭据后出现错误:

HTTP状态403 –禁止


类型:状态报告

消息:访问被拒绝

描述:服务器理解了该请求,但拒绝对其进行授权。


Apache Tomcat / 7.0.90

Ank*_*yar 0

403 是一个非常通用的错误代码。我面临着同样的问题,但在进行一些更改后,我能够使其工作。仍然不确定问题是否出在密码加密或表单登录标签的配置上。

<security:http auto-config="true"  >
        <security:intercept-url pattern="/login*" access="isAnonymous()" />
        <security:intercept-url pattern="/**" access="isAuthenticated()"/>
        <security:form-login login-page="/login" login-processing-url="/login-user" authentication-failure-url="/login?error=true" />
        <security:csrf disabled="true" />
        <security:logout logout-success-url="/"  />
    </security:http>

    <security:authentication-manager>
        <security:authentication-provider>
            <security:user-service>
                <security:user name="admin" password="{noop}admin" authorities="ROLE_USER" />
            </security:user-service>
        </security:authentication-provider  >

    </security:authentication-manager>
Run Code Online (Sandbox Code Playgroud)

忽略标签中的security:前缀。

密码前面的{noop}确保我没有对密码使用任何加密。

显示登录 JSP 的控制器

@Controller
@RequestMapping("/login")
public class LoginController {

    @RequestMapping(value = { "/", "" }, method = { RequestMethod.GET})
    public String login(HttpServletRequest request) {
        System.out.println("LoginController.login() "+request.getRequestURI());
        return "login";
    }

}
Run Code Online (Sandbox Code Playgroud)

形成动作

<form name='loginForm' action="login-user" method='POST'>
Run Code Online (Sandbox Code Playgroud)