如何配置oauth2以拥有自己的url?我需要有/auth/google
作为认证页面的URL和公开可用。以下是我目前所掌握的:
build.gradle
plugins {
id 'java'
id 'org.springframework.boot' version '3.1.2'
id 'io.spring.dependency-management' version '1.1.2'
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'io.jsonwebtoken:jjwt:0.9.1'
implementation 'javax.xml.bind:jaxb-api:2.2.4'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.mysql:mysql-connector-j'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.security:spring-security-test'
}
SecurityConfig.java
@Configuration
@Slf4j
public class SecurityConfig {
@Autowired
public UserRepository userRepository;
@Autowired
public JwtService jwtService;
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
return http
.csrf(AbstractHttpConfigurer::disable)
.cors(AbstractHttpConfigurer::disable)
.authorizeHttpRequests(auth - > auth
.requestMatchers("/auth/google").authenticated()
.requestMatchers("/api/**").authenticated()
)
.oauth2Login(oauth2 - > {
oauth2.redirectionEndpoint(redirection - > {
redirection.baseUri("/auth/google/redirect");
});
oauth2.successHandler(new OauthSuccessHandler(userRepository, jwtService));
oauth2.failureHandler((request, response, exception) - > log.error("OAuth2LoginError {}", exception.getMessage()));
})
.sessionManagement(sess - > sess.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
.build();
}
}
我没有/auth/google
由控制器处理,因为我确实尝试将此url添加到控制器中,而不是oauth2,它从控制器呈现内容。
我们的想法是将auth/google
URL设置为公开可用,在登录完成后(在oauth2.successfulfil函数中),API将用户重定向到前端页面,并在其请求查询中发送jwt令牌,例如(set-auth?accessToken=123&refreshToken=456
)之后,任何来自前端的API请求匹配此URL api/**
将由JWT auth处理程序处理。
我怎样才能达到这样的要求?任何帮助将不胜感激。谢谢
1条答案
按热度按时间r1zk6ea11#
你可以这样做:
文件
SecurityConfig.java
文件
OAuth2AuthenticationSuccessHandler.java
这些源代码是我自己的项目。对于相同的项目,但充分,你可以看到https://github.com/callicoder/spring-boot-react-oauth2-social-login-demo,这是非常好的工作项目,你现在。