当使用自定义登录表单创建 spring-security 应用程序时,我们需要在<http>
标记中指定default-target-url
。这表示在身份验证和授权成功时应调用的 REST API 终结点。
在自定义登录表单中,我们有一个操作属性。此操作是否应与default-target-url
相同?是否应该在我的控制器中为此操作配置 REST API 终结点?还是 spring 会在内部处理它,然后在最初处理它自己后将请求转发给default-target-url
?
我知道这看起来是一个非常基本的问题,但我还没有在任何在线教程甚至 Spring 的文档中找到对此的解释。
default-target-url 是成功进行身份验证和授权后用户应登陆的位置。
自定义登录表单中的操作属性是表单提交时的常规操作属性,而不是特定于 Spring 安全自定义登录表单。
因此,当您在自定义登录表单中指定操作属性时,您正在指定在登录表单POST的情况下要调用的请求映射方法 - 即用户在指定登录凭据后提交。
这是您将处理身份验证和授权的地方,如果成功,用户将登陆默认目标 url 或您从请求映射返回的登录成功页面。当然,如果提供的凭据无效,则会重定向到带有相应错误消息的登录页面。
经过多次试验和错误,我发现这两个属性的action
和login-processing-url
应该指向同一个端点login
。这将激活 Spring 中负责处理身份验证的内置过滤器。身份验证成功后,我们降落在default-target-url
指定的端点上。