springsecurity 的认证模块集成gateway
时间: 2023-09-29 11:10:54 浏览: 75
springboot整合gateway实现网关功能
5星 · 资源好评率100%
在Spring Cloud Gateway中集成Spring Security认证模块可以实现对网关进行访问控制和认证授权。下面是一个简单的示例:
1. 添加依赖
在pom.xml文件中添加以下依赖:
```xml
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-security</artifactId>
</dependency>
```
2. 配置Spring Security
创建一个类来配置Spring Security:
```java
@Configuration
public class SecurityConfig {
@Bean
SecurityWebFilterChain springWebFilterChain(ServerHttpSecurity http) throws Exception {
http.authorizeExchange()
.pathMatchers("/admin/**").hasRole("ADMIN")
.anyExchange().permitAll()
.and()
.httpBasic()
.and()
.csrf().disable();
return http.build();
}
@Bean
public MapReactiveUserDetailsService userDetailsService() {
UserDetails user = User.withDefaultPasswordEncoder()
.username("user")
.password("password")
.roles("USER")
.build();
UserDetails admin = User.withDefaultPasswordEncoder()
.username("admin")
.password("password")
.roles("ADMIN")
.build();
return new MapReactiveUserDetailsService(user, admin);
}
}
```
这个配置类会创建两个用户,一个是普通用户,一个是管理员,并定义了访问控制规则。
3. 配置路由
在application.yml文件中配置路由:
```yaml
spring:
cloud:
gateway:
routes:
- id: admin_route
uri: https://example.com/admin
predicates:
- Path=/admin/**
filters:
- StripPrefix=1
- name: BasicAuthGatewayFilterFactory
args:
# 对应SecurityConfig中的用户名
user: admin
# 对应SecurityConfig中的密码
password: password
```
这个配置会将`/admin/**`的请求转发到`https://example.com/admin`,并添加了一个StripPrefix过滤器和一个BasicAuthGatewayFilterFactory过滤器。
4. 启动应用
现在你可以启动应用并访问`http://localhost:8080/admin`,它应该会提示你输入用户名和密码。如果你输入的是普通用户的用户名和密码,那么你将无法访问`/admin/**`路径。只有管理员才能访问该路径。
阅读全文