loginPage和loginAccessURL之间有什么区别。.formLogin().loginPage("/login").usernameParameter("phone-number").passwordParameter("password")
似乎是loginProcessURL就像post方法,一旦用户在登录页面中提交数据,但当我删除时,它也可以正常工作。登录访问URL的意义是什么?它与登录页面有何不同?
行loginPage("/login")
指示Spring Security
- 当需要身份验证时,将浏览器重定向到/login
- 我们负责在请求/login时呈现登录页面
- 当身份验证尝试失败时,将浏览器重定向到/登录?错误(因为我们没有另行指定(
- 我们负责在/login时呈现故障页面?错误为请求
- 当我们成功注销时,将浏览器重定向到/login?注销(因为我们没有另行说明(
- 当/登录?请求注销
和
.loginProcessingUrl("/login/process")
告诉SpringSecurity在发送指定路径时处理提交的凭据,并在默认情况下将用户重定向回用户来自的页面它不会将请求传递给SpringMVC和您的控制器
参考文件
loginPage()
的用途
loginPage()
告诉当需要登录时将重定向用户的框架。例如,当您未被授权访问该页面时,您会被重定向到此页面。这个页面执行登录活动,例如,当您使用Google OAuth2实现loginForm()
或oauth2Login()
时,这个页面会重定向到Google登录。
http.anonymous().and()
.authorizeRequests().antMatchers("/images**").permitAll().and()
.authorizeRequests().anyRequest().authenticated().and()
.oauth2Login()
.successHandler((request, response, authentication) -> {
request.authenticate(response);
})
.loginPage("/oauth2/authorization/google")
.loginProcessingUrl("/login")
loginProcessingUrl()
的目的
loginProcessingUrl()
是一种自动将规则antMatchers("/thisUrl").permitAll()
设置为此URL的方法,以便在返回响应(代码、状态、令牌等(时允许获取该响应,并处理该响应,正如您在请求的身份验证方法中看到的那样。更重要的是,此loginProcessingUrl(
(告诉应处理对此URL的响应。如果没有这一点,request.authenticate(response)
将不会执行,身份验证也不会返回,否则您将实现另一种算法。
例如,如果您打算使用或配置自己的登录页面,那么.loginPage()
将帮助重定向到该页面。
接下来,输入到自定义表单中的任何数据都需要处理,或者需要与数据库中的数据或身份验证管理器中的数据进行比较。在这里,.loginProcessingUrl
将有助于实现这一点。
以下来自spring安全源代码的代码段将对您有所帮助:
loginPage the login page to redirect to if authentication is required
loginProcessingUrl the URL to validate username and password
DEFAULT_LOGIN_PAGE_URL = "/login"
/**
* Updates the default values for authentication.
*
* @throws Exception
*/
protected final void updateAuthenticationDefaults() {
if (loginProcessingUrl == null) {
loginProcessingUrl(loginPage);
}
//...
}