在实际开发中是需要我们重新配置自己登录页,走自己的登录认证请求的。
文章目录
自定义登录页
Spring boot中准备html页面
**第一步:**在resources目录下,新建一个resources目录,再在resources目录下新建一个pages目录。
**第二步:**在配置文件中,进行视图配置。
spring:
mvc:
view:
prefix: pages/ # 指定html目录
suffix: .html #后缀名
第三步: 在pages下,新建一个login.html文件
表单中的action的url,是进行登录认证的url。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录页面</title>
</head>
<body>
<h2>标准登录页</h2>
<h3>表单登录</h3>
<form action="/authentication/form" method="post">
<span>用户名:</span>
<input type="text" name="username" value="user"><br>
<span>密码:</span>
<input type="password" name="password" value="123456"><br>
<input type="submit" value="登录">
</form>
</body>
</html>
第四步: 通过controller跳转页面,跳转登录页的地址是/login-form
@RequestMapping("/login-form")
public String login() {
return "login";
}
Spring Security进行登录页配置
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Bean
public PasswordEncoder passwordEncoder () {
return new BCryptPasswordEncoder();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
// 定义请求方式 是form表单 还是 basics模式
http.formLogin()
// 配置登录页
.loginPage("/login-form")
// 指定登录请求的路径
.loginProcessingUrl("/authentication/form")
.and()
.authorizeRequests()
// 需要配置登录路径不做权限验证,不然会出现重定向次数过多。
.antMatchers("/login-form").permitAll()
.anyRequest()
.authenticated();
}
}
说明:
loginPage : 指定登录页的路径
同时需要通过.antMatchers("/login-form").permitAll()
对登录的路径开放权限认证,不然会出现重复次数过多的问题。
在Spring Security中,认证请求路径默认为/login
,才会去UsernamePasswordAuthenticationFilter
中进行认证。如果指定了认证的路径,此处自定义的认证路径为form表单的action的url(/authentication/form)
。那就需要在Spring Security的配置中通过loginProcessingUrl
进行配置。
保证loginProcessingUrl中的url 和 form表单action的url要一致。</