vue-java-tutorials/spring-security/step-1
bunny 770ed64a8c 🚚 重命名请求api名称,方便做权限测试 2025-07-10 21:54:43 +08:00
..
src 🚚 重命名请求api名称,方便做权限测试 2025-07-10 21:54:43 +08:00
ReadMe.md 认证指定URL地址 2025-07-10 21:28:45 +08:00
pom.xml 自定义登录页 2025-07-10 21:11:46 +08:00

ReadMe.md

入门案例

SpringSecurity6基本使用

添加项目依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

创建一个类,加上下面两个注解即可@EnableWebSecurity,@Configuration

@EnableWebSecurity
@Configuration
public class SecurityWebConfiguration {
}

自定义登录页

[!IMPORTANT]

使用自定义页面时候需要在控制器中指定当前跳转的地址否则Security无法知道你要去往那个页面即使写上了URL也无法跳转。

在下面示例中定义了自定义登录页,当然也可以定义错误页、退出页等等。

开启和禁用

如果需要使用默认的选项可以使用.formLogin(Customizer.withDefaults())即可。

如果需要禁用登录页.formLogin(AbstractHttpConfigurer::disable)

需要认证指定URL地址

普通认证拦截方式

需要认证URL地址可以像下面这样写。

String[] permitAllUrls = {
        "/", "/doc.html/**",
        "/webjars/**", "/images/**", ".well-known/**", "favicon.ico", "/error/**",
        "/v3/api-docs/**"
};

http.authorizeHttpRequests(authorizeRequests ->
                // 访问路径为 /api/** 时需要进行认证
                authorizeRequests
                        .requestMatchers("/api/**").authenticated()
                        .requestMatchers(permitAllUrls).permitAll()
        )

完整示例

@EnableMethodSecurity
@EnableWebSecurity
@Configuration
public class SecurityWebConfiguration {

    @Bean
    SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        String[] permitAllUrls = {
                "/", "/doc.html/**",
                "/webjars/**", "/images/**", ".well-known/**", "favicon.ico", "/error/**",
                "/v3/api-docs/**"
        };

        http.authorizeHttpRequests(authorizeRequests ->
                        // 访问路径为 /api/** 时需要进行认证
                        authorizeRequests
                                .requestMatchers("/api/**").authenticated()
                                .requestMatchers(permitAllUrls).permitAll()
                )
                .formLogin(loginPage -> loginPage
                        // 自定义登录页路径
                        .loginPage("/login-page")
                        // 处理登录的URL默认就是/login
                        .loginProcessingUrl("/login")
                        // 登录成功跳转
                        .defaultSuccessUrl("/")
                        // 登录失败跳转
                        .failureUrl("/login-page?error=true")
                        .permitAll()
                )
                // 使用默认的登录
                // .formLogin(Customizer.withDefaults())
                // 禁用表单登录
                // .formLogin(AbstractHttpConfigurer::disable)
                .logout(logout -> logout
                        .logoutSuccessUrl("/login-page?logout=true")
                        .permitAll()
                );
        return http.build();
    }

}