如何声明spring-security以在重定向登录时使用custome登录表单返回响应代码



每当应用程序被重定向到自定义登录表单时,响应代码总是200。是否有任何方法可以识别当前200状态代码是来自用户请求的URL还是来自spring security重定向的自定义登录URL。

.and().formLogin()      
.loginPage("/login").usernameParameter("userName").passwordParameter("password")

请求的原因-因为实际用户请求的响应永远不会失败,spring总是只发送200个带有登录表单的响应

我已经设置了自定义的登录表单,当用户发送需要授权的直接URL请求时,它会显示出来,这很好,但问题是。比方说,我请求了一个需要身份验证的URL,并期望api返回401,未经授权。显然,spring拦截了请求,它没有到达后端控制器;200〃;成功响应代码。

因此,我将无法通过检查响应代码来检查用户是否被拦截并重定向到formlogin。现在我为什么需要它?因为我在前端使用angularJS,所以我对所有页面都有不同的angularJS控制器。现在假设我请求了需要身份验证的配置文件页面,这样我就不能只返回formlogin,直到我为页面分配了正确的angularJS控制器。因此,我需要知道用户何时使用返回的响应代码重定向到formlogin。

另一个原因是,我正在使用AgularJS拦截器来检查响应的成功和失败,所以我希望一旦我的API调用因未经授权的访问而被拒绝,我应该进入;响应被拒绝";拦截器块,但看到这一点;响应成功";拦截器块,因为Spring已经拦截了请求,并将其更改为200成功,并返回登录表单页面URL。

您可以尝试:

.and()
.formLogin()
.loginPage("/login")
.usernameParameter("userName")
.passwordParameter("password")
.successHandler(
( request, response, authentication ) -> {
response.setHeader( "Location", "Your angular url");
response.setHeader( "message", "authenticated" ); // <-custom http header as redirection does not allow content inside response body
response.setStatus( HttpServletResponse.SC_FOUND ); // <- redirection status
}
)
.failureHandler( 
( request, response, authenticationException ) -> {
response.setHeader( "Location", "Your angular url");
response.setHeader( "message", "error" );
response.setStatus( HttpServletResponse.SC_FOUND );
}
);

有无穷无尽的选择!!如果我不明白你的问题,请告诉我。

干杯,

最新更新