在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不唯一的错误。