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会注销,和登录类似,注销也可以进行针对性设置

posted @ 2024-05-22 22:38  试试手气  阅读(17)  评论(0编辑  收藏  举报