我正在将spring cloud gateway应用程序设置为OAuth2
客户端。在安全配置类中,我设置了一些白名单路径。如果任何未经授权的用户想要访问任何安全路径,他/她应该被自动重定向到google登录同意页面。但是,在我的情况下,这个 * 自动重定向没有发生 *。而是在访问任何安全路径时,我得到了一个401
错误。
blog是我的示例代码-
@SpringBootApplication
public class SsoApplication {
public static void main(String[] args) {
SpringApplication.run(SsoApplication.class, args);
}
@RestController
public class WelcomeController {
@GetMapping
public String openPath() {
return "this is open path";
}
@GetMapping("/secured")
public String securedPath() {
return "Accessing secured path";
}
}
}
@Configuration
@EnableWebFluxSecurity
public class SecurityConfig {
@Bean
public SecurityWebFilterChain securityFilterChain(ServerHttpSecurity http) {
return http
.authorizeExchange(exchange -> exchange
.pathMatchers("/", "/*.css", "/*.js", "/favicon.ico").permitAll()
.pathMatchers("/actuator/**").permitAll()
.anyExchange().authenticated()
)
.exceptionHandling(exceptionHandling -> exceptionHandling
.authenticationEntryPoint(new HttpStatusServerEntryPoint(HttpStatus.UNAUTHORIZED)))
.oauth2Login(Customizer.withDefaults())
.build();
}
}
字符串
application.yml
spring:
security:
oauth2:
client:
registration:
google:
client-id: #client_id#
client-secret: #secret#
redirect-uri: "{baseUrl}/login/oauth2/code/google"
server:
port: 9999
型
build.gradle
plugins {
id 'java'
id 'org.springframework.boot' version '3.2.1'
id 'io.spring.dependency-management' version '1.1.4'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
java {
sourceCompatibility = '17'
}
repositories {
mavenCentral()
}
ext {
set('springCloudVersion', "2023.0.0")
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
implementation 'org.springframework.cloud:spring-cloud-starter-gateway'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'io.projectreactor:reactor-test'
}
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
}
型
我试过了-
1.在SecurityWebFilterChain
bean上添加了@Order(Ordered.HIGHEST_PRECEDENCE)
。
访问安全路径时出现HTTP错误401,未重定向到登录页面
1.从SecurityConfig
类中删除了@Configuration
注解
解决了重定向的问题,但所有的白名单路径成为限制(我想知道为什么)!3.删除@EnableWebFluxSecurity
和保留@Configuration
给HTTP错误401访问安全路径,不重定向到登录页面。4.添加redirection-uri: "{baseUrl}/login/oauth2/code/google"
在应用程序。yml给HTTP错误401访问安全路径,不重定向到登录页面。
在场景1和场景3中,如果我手动点击/oauth2/authorization/google
,它会将我重定向到登录页面。
我尝试用spring-boot-starter-web
应用程序实现同样的事情;一切都按预期工作。
更新
【显然不是,我并没有在spring-boot-web
上添加authenticationEntryPoint
应用,所以这款应用才如@ch4mp所说的那样正常运行。】
任何想法,为什么这是发生在spring-cloud-gateway
应用程序,我可以做些什么来解决这个问题?
1条答案
按热度按时间k3fezbri1#
您显式请求401(而不是302,这是使用
oauth2Login
的OAuth2客户端的默认值)。尝试删除
字符串