【问题标题】:Spring Boot OAuth2 with Github带有 Github 的 Spring Boot OAuth2
【发布时间】:2022-01-02 07:49:19
【问题描述】:

我正在使用 GitHub 作为授权服务器来实现 OAuth2 架构,以登录我的虚拟 Web 应用程序。一切正常。当我使用我的 GitHub 凭据登录时遇到问题,我希望重定向页面向用户显示一些消息,例如 Welcome XYZ,但我无法获取当前登录的用户名,而是显示了一个数字。我使用了主体对象和身份验证对象。请任何机构告诉我如何实现它?

这是 OAuth2 GitHub 配置的代码。


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.WebSecurityConfigurerAdapter;
import org.springframework.security.config.oauth2.client.CommonOAuth2Provider;
import org.springframework.security.oauth2.client.registration.ClientRegistration;
import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository;
import org.springframework.security.oauth2.client.registration.InMemoryClientRegistrationRepository;

@Configuration
public class WebSecurityConfigurerAdapterImp extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.oauth2Login((c)->
        {
        c.clientRegistrationRepository(this.clientRegistrationRepository());    
        }
        );
        http.authorizeRequests().anyRequest().authenticated();
        
    }
    
    
    private  ClientRegistrationRepository clientRegistrationRepository()
    {
        ClientRegistration c=this.clientRegistration(); 
        return new InMemoryClientRegistrationRepository(c);
    }
    
    private ClientRegistration clientRegistration()
    {
        return CommonOAuth2Provider.GITHUB.getBuilder("github").clientId("72bc31d8b0304575442c").clientSecret("XYZSECRET").build();
    }
}

用户登录后将被重定向到的 main_controller 代码。

package com.controllers;

import java.security.Principal;

import org.springframework.security.core.Authentication;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class Main_Controller {

    @GetMapping("/")
    @ResponseBody
    public String HomePage(Authentication p)
    {
        System.out.println("Hellow  "+p.getName());
        return "Hello People.";
    }
}

【问题讨论】:

    标签: spring-boot spring-security-oauth2


    【解决方案1】:

    默认情况下,如果您使用“CommonOAuth2Provider.GITHUB”,则主体名称将映射到您的 github 用户的“id”。因此,您需要将主体名称属性映射到“登录”

    【讨论】:

    • 当然。我们也可以使用 OAuth2authentication 来获取 OAuth2User。然后我们可以简单地检索用户名。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-02
    • 1970-01-01
    • 2021-05-25
    • 2019-02-14
    • 2019-12-26
    • 2021-10-14
    相关资源
    最近更新 更多