文章目录
- 自定义表单登录
- 一、如何开启表单登录
- 二、FormLoginConfigurer常用配置
- 三 表单页面
- 1 编写html页面
- 2 创建WebSecurityConfigure
- 3 提供视图跳转controller
- 4 提供跳转首页的rest
- 测试登录
自定义表单登录
一、如何开启表单登录
通过继承WebSecurityConfigurerAdapter,然后重写configure(HttpSecurity http)来实现。
http.formLogin() 开启表单登录,方法返回的是FormLoginConfigurer对象,可以再详细的定义表单登录具体属性。
二、FormLoginConfigurer常用配置
- loginPage(String loginPage) : 登录 页面而并不是接口。
- loginProcessingUrl(String loginProcessingUrl) 实际表单向后台提交用户信息的Action ,再由过滤器 UsernamePasswordAuthenticationFilter 拦截处理,该 Action 其实不会处理任何逻辑。
- usernameParameter(String usernameParameter) 用来自定义用户参数名,默认 username。
- passwordParameter(String passwordParameter) 用来自定义用户密码名,默认 password
- failureUrl(String authenticationFailureUrl) 登录失败后会重定向到此路径, 一般前后分离不会使用它。
- failureForwardUrl(String forwardUrl) 登录失败会转发到此, 一般前后分离用到它。 可定义一个 Controller (控制器)来处理返回值,但是要注意 RequestMethod 。
- defaultSuccessUrl(String defaultSuccessUrl, boolean alwaysUse) 默认登陆成功后跳转到此 ,如果 alwaysUse 为 true 只要进行认证流程而且成功,会一直跳转到此。一般推荐默认值 false
- successForwardUrl(String forwardUrl) 效果等同于上面 defaultSuccessUrl 的alwaysUse 为 true 但是要注意 RequestMethod 。
- successHandler(AuthenticationSuccessHandler successHandler) 自定义认证成功处理器,可替代上面所有的 success 方式
- failureHandler(AuthenticationFailureHandler authenticationFailureHandler) 自定义失败处理器,可替代上面所有的 failure 方式
- permitAll(boolean permitAll) form 表单登录是否放开
三 表单页面
1 编写html页面
在resource/templates下创建loginPage.html文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录</title>
</head>
<body>
<form action="/login" method="post">
<div>
<label> 用户名:
<input placeholder="用户名" name="username"/>
</label>
</div>
<div>
<label> 密码:
<input placeholder="密码" type="password" name="password"/>
</label>
</div>
<button type="submit">登录</button>
</form>
</body>
</html>
此处需要注意的是:
- 用户名为username(因为后面的配置项未指定,默认的就是username)
- 密码为password(通username)
- action 为“/login”(要和configure的相同)
- method 为post
2 创建WebSecurityConfigure
public class WebSecurityConfigTest extends WebSecurityConfigurerAdapter {
@Override
public void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests(authorizeRequests ->
authorizeRequests.anyRequest().authenticated())
// 开启表单登录
.formLogin()
// 指定登录页面
.loginPage("/loginPage")
// 登录处理action
.loginProcessingUrl("/login")
// 登录成功后的跳转路径, alwaysUse 为true 则登录成功后跳转此路径
.defaultSuccessUrl("/index", true)
// 表单登录接口放行
.permitAll()
.and()
// 关闭csrf()
.csrf().disable();
}
}
3 提供视图跳转controller
@Controller
public class ViewController {
@GetMapping("/loginPage")
public String loginPage() {
return "loginPage";
}
}
4 提供跳转首页的rest
@RestController
public class LoginController {
@GetMapping("/index")
public String index() {
return "spring security index";
}
}
测试登录
访问内部资源,跳转到登录页面,输入完用户名密码后,成功跳转到首页