fix: oauth2 login callback exception

This commit is contained in:
vran 2022-03-03 23:10:38 +08:00
parent 02c1b5e20f
commit 444dee0b25
5 changed files with 29 additions and 5 deletions

View File

@ -1,7 +1,9 @@
package com.databasir.api;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseStatus;
@Controller
public class IndexController {
@ -11,4 +13,8 @@ public class IndexController {
return "index.html";
}
@ResponseStatus(HttpStatus.NOT_FOUND)
public String handleResourceNotFoundException() {
return "/index.html";
}
}

View File

@ -45,7 +45,8 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
.and()
.authorizeRequests()
.antMatchers("/login", Routes.Login.REFRESH_ACCESS_TOKEN).permitAll()
.antMatchers("/oauth2/apps", "/oauth2/failure", "/oauth2/authorization/*", "/oauth2/login/*")
.antMatchers("/oauth2/apps", "/oauth2/failure", "/oauth2/authorization/*",
"/oauth2/login/*", "/login/oauth2/*")
.permitAll()
.antMatchers("/", "/*.html", "/js/**", "/css/**", "/img/**", "/*.ico").permitAll()
.anyRequest().authenticated()

View File

@ -3,10 +3,15 @@ package com.databasir.api.config;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.boot.web.server.ErrorPage;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.web.config.EnableSpringDataWebSupport;
import org.springframework.http.HttpStatus;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import java.time.format.DateTimeFormatter;
@ -22,6 +27,16 @@ public class WebConfig extends WebMvcConfigurerAdapter {
.allowedMethods("GET", "POST", "DELETE", "PATCH", "PUT");
}
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/notFound").setViewName("forward:/index.html");
}
@Bean
public WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> containerCustomizer() {
return container -> container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/notFound"));
}
@Bean
public Jackson2ObjectMapperBuilderCustomizer jsonCustomizer() {
final String dateTimeFormat = "yyyy-MM-dd HH:mm:ss";

View File

@ -43,10 +43,10 @@ public class GithubOpenAuthHandler implements OpenAuthHandler {
public OAuthProcessResult process(OauthAppPojo app, Map<String, String[]> requestParams) {
String clientId = app.getClientId();
String clientSecret = app.getClientSecret();
String baseUrl = app.getResourceUrl();
String authUrl = app.getAuthUrl();
String code = requestParams.get("code")[0];
JsonNode tokenNode = githubRemoteService.getToken(baseUrl, clientId, clientSecret, code)
JsonNode tokenNode = githubRemoteService.getToken(authUrl, clientId, clientSecret, code)
.get("access_token");
if (tokenNode == null) {
throw new DatabasirAuthenticationException(DomainErrors.NETWORK_ERROR.exception());
@ -55,8 +55,9 @@ public class GithubOpenAuthHandler implements OpenAuthHandler {
if (StringUtils.isBlank(accessToken)) {
throw new CredentialsExpiredException("授权失效,请重新登陆");
}
String resourceUrl = app.getResourceUrl();
String email = null;
for (JsonNode node : githubRemoteService.getEmail(baseUrl, accessToken)) {
for (JsonNode node : githubRemoteService.getEmail(resourceUrl, accessToken)) {
if (node.get("primary").asBoolean()) {
email = node.get("email").asText();
}
@ -64,7 +65,7 @@ public class GithubOpenAuthHandler implements OpenAuthHandler {
if (StringUtils.isBlank(email)) {
throw new CredentialsExpiredException("授权失效,请重新登陆");
}
JsonNode profile = githubRemoteService.getProfile(baseUrl, accessToken);
JsonNode profile = githubRemoteService.getProfile(resourceUrl, accessToken);
String nickname = profile.get("name").asText();
String avatar = profile.get("avatar_url").asText();
OAuthProcessResult result = new OAuthProcessResult();

View File

@ -37,6 +37,7 @@ public class GitlabOpenAuthHandler implements OpenAuthHandler {
.queryParam("redirect_uri", redirectUri)
.queryParam("response_type", "code")
.queryParam("state", redirectUri)
.queryParam("scope", "read_user")
.encode()
.build()
.toUriString();