在SpringBoot中使用Security,首先需要引入Security的依赖

<!-- spring security 安全认证 -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-security</artifactId>
</dependency>

这时候登录项目会发现需要先登录Security。这个登录的用户名和密码可以通过配置文件application.yml中配置,也可以通过其它的配置取消该验证。

1、在配置文件application.yml中配置为用户名和密码

spring:
  #添加spring-boot-starter-security后设置对应的用户名和密码
  security:
    user:
      name: admin
      password: admin

这时候Security的登陆用户名是admin,密码是admin

2、取消Security登录验证

在spring-boot-starter-security2.x以下的版本中可以通过在配置文件中配置关闭验证,具体配置为

security.basic.enabled = false

但是在2.x版本以上,已经取消了这种配置方式,要想取消Security登录验证,需要在启动类中书写,具体书写如下:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration;

@SpringBootApplication(excludeName = "DataSourceAutoConfiguration")
@EnableAutoConfiguration(exclude = {SecurityAutoConfiguration.class})
public class Application {

    public static void main(String[] args){
        SpringApplication.run(Application.class,args);
    }

}

但是一样的因为版本问题,使用@EnableAutoConfiguration注解后,总是报错,这时候,将@EnableAutoConfiguration注解中的内容直接写在@SpringBootApplication注解中即可。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration;

@SpringBootApplication(excludeName = "DataSourceAutoConfiguration",exclude = {SecurityAutoConfiguration.class})
//@EnableAutoConfiguration(exclude = {SecurityAutoConfiguration.class})
public class Application {

    public static void main(String[] args){
        SpringApplication.run(Application.class,args);
    }

}3、实现一个配置类继承WebSecurityConfigurerAdapter,并且重写configure(HttpSecurity http)方法。同样可以取消掉Security登录验证。
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
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;
import org.springframework.security.core.userdetails.UserDetailsService;

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().antMatchers("/**").permitAll();
    }

    /**
     * 配置一个userDetailsService Bean
     * 不再生成默认security.user用户
     */
    @Bean
    @Override
    protected UserDetailsService userDetailsService() {
        return super.userDetailsService();
    }
}

这种方式是一种比较底层的方式。如果你要有自己的用户逻辑认证,也是在这个里面实现。需要注意的是:如果配置两个以上的的自定义实现类,代码是会报错的:java.lang.IllegalStateException: @Order on WebSecurityConfigurers must be unique.

WebSecurityConfigurers不唯一的错误。