初学spring security --自定义登录界面

81 阅读1分钟

第一步:创建工程,导入依赖

  • 新建一个SpringBoot项目,pom文件中导入web和SpringSecurity依赖

Snipaste_2023-10-02_21-11-17.png

  • 创建一个测试controller,写个接口进行测试,springsecurity会对接口进行拦截

231.png

第二步:新建配置类,继承WebSecurityConfigurerAdapter类,重写configure方法

@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.formLogin().loginPage("/login.html").loginProcessingUrl("/login")
                .and().authorizeRequests().antMatchers("/login.html","/login/**").permitAll()
                .anyRequest().authenticated()
                .and().csrf().disable();
    }
 }

通过HttpSecurity 对象,获取到表单登录配置对象,loginPage("/login.html")指定了自定义的登录页面,loginProcessingUrl("/login")方法指定登录接口,该接口需要和页面表单的点击登录提交的接口action属性对应,否则将会登录失败。

登录界面表单:

<h2>Login</h2>
<form action="/login" method="get">
    <input class="login-input" name="username" type="text" placeholder="username" required><br>
    <input class="login-input" name="password" type="password" placeholder="password" required><br>
    <button type="submit" class="login-button">Login</button>
</form>

由于SpringSecurity默认的登录校验接口为"/login",方式为Post,所以自定义的登录action为Get

-----------------------------------------------分割线------------------------------------

PS: 另外authorizeRequests().antMatchers("/login.html","/login/**")的意思是排除/login.html和/login后的所有资源请求,这个方法里添加的url是不需要进行身份认证的,不添加则可能会造成一直重定向到登陆界面(即使登录提交也会跳转回去)。