我们知道,在SpringBoot项目引入SpringSecurity依赖之后,security在你获取任何接口之前自动会帮你加载一个默认的登录页面,如下图:
但是往往一般情况下我们会选择自己定义登录页面。首先,我们需要新建一个config的包用来存放配置,然后新建一个SecurityConfig类,使其继承WebSecurityConfigurerAdapter,如下图所示:
然后我们需要给SecurityConfig类上面加上@EnableWebSecurity注解,这样便可以被Spring发现并注册,然后让SecurityConfig类继承于WebSecurityConfigurerAdapter,如下图:
WebSecurityConfigurerAdapter类默认声明了一些安全特性,如验证所有请求、允许用户表单登录进行身份验证、允许HTTP基本认证等。在该类中含有一个configure(HttpSecurity http)方法,我们需要覆写它从而对项目进行安全配置。
在使用之前我先简单说说HttpSecurity,它实际上相当于SpringSecurity命名空间配置方式中的XML文件内的标签,允许我们为特定的HTTP请求配置安全策略。HttpSecurity中提供了许多配置相关的方法,分别对应值着命名空间中的字标签。例如authorizeRequests()、formLogin()、httpBasic()和csrf()分别对应intercept-url、from-login、http-basic和csrf标签。在调用这些方法之后,除非使用and()方法结束当前标签,上下文才会回到HttpSecurity,否则链式调用的上下文将自动进入对应的标签域
接下来我们便开始自定义一个登录的表单页面 login.html(可以实现简单登录注册就好),如下图:
然后将这个写好的页面放在resources/resources/路径下,之后我们便可以开始覆写configure(HttpSecurity http)方法了,代码如下:
package com.example.demo.config;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
/**
* @Author: Pinyk
* @Date: 2019/10/23 19:29
*/
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.
authorizeRequests()
.antMatchers("/web/**").permitAll() //允许/web路径下的url,这里可以自己根据需求定制
.anyRequest().authenticated() //操作必须是已登录状态
.and()
.formLogin()
.loginPage("/login.html") //跳转自己定制的登录界面
.permitAll() //自定义登录页面权限放开
.and()
.csrf().disable() //跨站请求伪造防护功能,这个先不用管,直接禁用了
.httpBasic();
}
}
这样我们便对安全认证进行了简单的配置,接下来我们开始测试一下项目中的任意路径,会直接跳转到我们默认的页面,如下图:
本篇博客就介绍到这,如果发现问题或产生任何疑问请直接提出