Java项目中集成Github登录

要在你的 Java 后端系统中集成 GitHub 的第三方登录功能,通常可以通过 OAuth 2.0 协议实现。这是 GitHub 提供的官方认证方式,它允许你通过 GitHub 登录你的应用,并获取用户的基本信息。以下是集成 GitHub 登录的基本步骤:

1. 创建 GitHub OAuth 应用

在开始集成之前,首先需要在 GitHub 创建一个 OAuth 应用来获得 Client IDClient Secret

  1. 登录到你的 GitHub 账户。
  2. 进入 GitHub 开发者设置:GitHubDeveloperSettings
  3. 点击 OAuth Apps ,然后点击 New OAuth App
  4. 填写必要的应用信息:
    • Application name: 你的应用名称
    • Homepage URL: 你的应用首页 URL
    • Authorization callback URL : 你的后端应用中处理 GitHub 回调的 URL,例如 http://localhost:8080/login/github/callback(具体的 URL 取决于你的后端设置)
  1. 保存后,你将获得 Client IDClient Secret,它们会在后续步骤中用到。

2. 配置 Spring Security 和 OAuth2 登录

假设你的后端是基于 Spring Boot 和 Spring Security 的,下面是如何配置 GitHub OAuth 登录的步骤:

2.1. 添加相关依赖

在你的 pom.xml 中添加必要的依赖:

vb 复制代码
`<dependencies>
    <!-- Spring Boot Starter Web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
    <!-- Spring Boot Starter Security -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    
    <!-- Spring Security OAuth2 Login -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-oauth2-client</artifactId>
    </dependency>
</dependencies>`
2.2. 配置 application.yml****或 application.properties

在你的 application.ymlapplication.properties 中,配置 GitHub 的 OAuth 客户端 ID 和客户端密钥。

java 复制代码
spring:
  security:
    oauth2:
      client:
        registration:
          github:
            client-id: YOUR_CLIENT_ID
            client-secret: YOUR_CLIENT_SECRET
            scope: read:user, user:email
            redirect-uri: "{baseUrl}/login/oauth2/code/github"
            authorization-grant-type: authorization_code
            client-name: GitHub
        provider:
          github:
            authorization-uri: https://github.com/login/oauth/authorize
            token-uri: https://github.com/login/oauth/access_token
            user-info-uri: https://api.github.com/user
            user-name-attribute: login
  • client-idclient-secret 是你在 GitHub 开发者设置页面上获得的。
  • scope 用于定义访问的权限,read:user 获取基本的用户信息,user:email 用于获取用户的邮箱。
  • redirect-uri 是 GitHub 登录成功后将跳转的地址,通常会是你后端系统的某个接口,用于处理 GitHub 回调。
2.3. 配置 Spring Security

你还需要在 SecurityConfig 中配置 Spring Security,确保 GitHub 登录能够正常工作。

java 复制代码
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/", "/home").permitAll() // 允许公共页面
                .anyRequest().authenticated() // 其余请求需要认证
            .and()
            .oauth2Login() // 启用 OAuth2 登录
                .loginPage("/login") // 登录页面(可选)
                .defaultSuccessUrl("/dashboard", true); // 登录成功后跳转的页面
    }
}

3. 处理 OAuth 回调

当用户通过 GitHub 登录后,GitHub 会将用户重定向到你配置的回调 URL,你需要在后端处理这个回调来获取用户信息。

Spring Security 会自动处理 OAuth 回调,你可以在回调成功后获取用户信息。例如,你可以创建一个简单的控制器来处理用户登录后跳转的页面:

java 复制代码
import org.springframework.security.oauth2.core.user.OAuth2User;
import org.springframework.security.oauth2.core.user.DefaultOAuth2User;
import org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.stereotype.Controller;

@Controller
public class GitHubController {

    @GetMapping("/login/github")
    public String loginSuccess(@AuthenticationPrincipal OAuth2User principal) {
        // 获取用户信息
        System.out.println("GitHub User: " + principal.getAttributes());

        // 返回一个欢迎页面或跳转到应用的其他页面
        return "redirect:/dashboard";
    }
}
  • @AuthenticationPrincipal OAuth2User principal 注解会将 GitHub 返回的用户信息注入到 principal 中,你可以通过 principal.getAttributes() 获取用户的基本信息。

4. 前端登录按钮

在你的前端页面上,你可以通过链接或按钮引导用户进行 GitHub 登录。Spring Security 会自动处理登录流程。

复制代码
<a href="/oauth2/authorization/github">Login with GitHub</a>

5. 获取 GitHub 用户信息

你可以从 OAuth2User 中获取 GitHub 用户的详细信息,如用户名、邮箱等。

java 复制代码
import org.springframework.security.oauth2.core.user.OAuth2User;

public void printUserInfo(OAuth2User user) {
    String username = user.getAttribute("login"); // GitHub username
    String email = user.getAttribute("email");   // GitHub email (if the user has allowed it)
    System.out.println("GitHub Username: " + username);
    System.out.println("GitHub Email: " + email);
}
相关推荐
一勺-_-12 分钟前
mermaid图片如何保存成svg格式
开发语言·javascript·ecmascript
Dargon28841 分钟前
实例讲解Simulink的MATLAB Function模块
开发语言·matlab·simulink·mbd软件开发
charlie11451419142 分钟前
现代C++嵌入式教程:C++98基础特性:从C到C++的演进(1)
c语言·开发语言·c++·笔记·学习·教程
历程里程碑1 小时前
C++ 18智能指针:告别内存泄漏的利器
开发语言·c++
( •̀∀•́ )9201 小时前
GitHub Actions SSH 部署密钥
运维·ssh·github
qq_12498707531 小时前
重庆三峡学院图书资料管理系统设计与实现(源码+论文+部署+安装)
java·spring boot·后端·mysql·spring·毕业设计
大学生资源网2 小时前
java毕业设计之“知语”花卉销售网站的设计与实现源码(源代码+文档)
java·mysql·毕业设计·源码·springboot
小鸡脚来咯2 小时前
Redis三大问题:穿透、击穿、雪崩(实战解析)
java·spring·mybatis
桦说编程2 小时前
并发编程高级技巧:运行时检测死锁,告别死锁焦虑
java·后端·性能优化
jiayong232 小时前
Spring AI Alibaba 深度解析(三):实战示例与最佳实践
java·人工智能·spring