vue-java-tutorials/spring-security/step-1/ReadMe.md

103 lines
3.1 KiB
Markdown
Raw Normal View History

2025-07-10 21:28:45 +08:00
# 入门案例
## SpringSecurity6基本使用
添加项目依赖
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
```
创建一个类,加上下面两个注解即可`@EnableWebSecurity`,`@Configuration`
```java
@EnableWebSecurity
@Configuration
public class SecurityWebConfiguration {
}
```
## 自定义登录页
> [!IMPORTANT]
>
> 使用自定义页面时候需要在控制器中指定当前跳转的地址否则Security无法知道你要去往那个页面即使写上了URL也无法跳转。
在下面示例中定义了自定义登录页,当然也可以定义错误页、退出页等等。
### 开启和禁用
如果需要使用默认的选项可以使用`.formLogin(Customizer.withDefaults())`即可。
如果需要禁用登录页`.formLogin(AbstractHttpConfigurer::disable)`。
### 需要认证指定URL地址
#### 普通认证拦截方式
需要认证URL地址可以像下面这样写。
```java
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()
)
```
### 完整示例
```java
@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();
}
}
```