Spring Boot —— Spring Security

引入依賴

Spring boot 版本 2.7.6

<properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.7.6</spring-boot.version>
        <mysql.version>8.2.0</mysql.version>
        <druid.version>1.2.22</druid.version>
    </properties>
	
<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
	
	<dependencies>
		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
	</dependencies>

Spring Security 開始工作了嗎

引入Spring Security之後,默認會保(攔)護(截)所有請求,此時使用瀏覽器訪問任意請求(地址)會發現跳轉到一個登錄頁,說明 Spring Security 已經開始工作了,以 Spring Security 5.7.5 爲例
image

如果我們什麼都不配置,默認的用戶名是user,而密碼會在啓動時輸出到控制檯Using generated security password: 8c189297-d9c5-483a-9ae2-8efb64129776

配置

自定義用戶名和密碼

修改配置文件,使用自定義用戶名和密碼

spring:
  security:
    user:
	  name: admin
	  password: 123456

使用配置類控制 Spring Security 行爲

寫一個SecurityConfig類,裏邊定義對 Spring Security 行爲的控制,例如

@Configuration
public class SecurityConfig {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {

        http.authorizeHttpRequests((auth)->{
            try {
                auth.anyRequest().authenticated()
                        .and()
						// 使用表單登錄
                        .formLogin()
                        // 登錄成功跳轉地址,第二個參數控制是否忽略來源頁面始終跳轉所設置的地址
                        .defaultSuccessUrl("/authentication")
                        .and()
                        .csrf().disable();
            }catch (Exception e){
                throw new RuntimeException(e);
            }
        });

        return http.build();
    }
}

這是一個非常基礎的配置類,啓用表單登錄並且使用Spring Security默認登錄頁面(因爲沒有設置自定義登錄頁),登錄成功默認跳轉/authentication。很多書上對此部分的介紹是使SecurityConfig繼承WebSecurityConfigurerAdapter,並通過重寫configure(AuthenticationManagerBuilder builder)configure(HttpSecurity http)方法達到更多控制

自定義登錄頁面

如果使用自定義登錄頁面,通常頁面中的用戶名或密碼會這樣寫

<input name="username" />
<input name="password" />

如果希望修改表示用戶名和密碼的關鍵字,可以通過設置HttpSecurity對應方法,同時修改input的name屬性達到目的

.formLogin()
.usernameParameter("uid")
.passwordParameter("pwd")
<input name="uid" />
<input name="pwd" />

基於內存的認證

模擬內存中添加若干用戶,這些用戶被設置用戶名、密碼和角色,並在登錄時起作用

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter{
	@Override
	protected void configure(AuthenticationManagerBuilder builder) throws Exception{
		builder.inMemoryAuthentication()
			.withUser("admin").password("123456").roles("ADMIN")
			.and()
			.withUser("user").password("123456").roles("USER")
	}
}

註銷

默認訪問/logout會註銷,和登錄類似,註銷也可以進行鍼對性設置

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章