文章目录

  • 自定义表单登录
  • 一、如何开启表单登录
  • 二、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";
    }
}

测试登录

访问内部资源,跳转到登录页面,输入完用户名密码后,成功跳转到首页

spring security自定义登录页面 spring security 自定义登录_用户名