Springboot集成微信、支付宝、QQ等第三方登录

Springboot集成微信、支付宝、QQ等第三方登录

首先,为了实现第三方登录,我们需要注册开发者账号并创建应用程序。对于微信、支付宝、QQ等第三方登录,我们需要分别在相应的开放平台上进行注册。
在这里插入图片描述

微信公众平台

支付宝开放平台

QQ开放平台

接下来,我们需要在Spring Boot中添加依赖项,以便我们能够使用第三方登录API。为此,我们需要添加以下依赖项:

<dependency>
    <groupId>org.springframework.security.oauth.boot</groupId>
    <artifactId>spring-security-oauth2-autoconfigure</artifactId>
    <version>2.3.3.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.security.oauth.boot</groupId>
    <artifactId>spring-security-oauth2-client</artifactId>
    <version>2.3.3.RELEASE</version>
</dependency>

接下来,我们需要配置Spring Security以使用第三方登录。在application.properties文件中添加以下配置:

# 微信登录
spring.security.oauth2.client.registration.weixin.client-id=YOUR_WEIXIN_APP_ID
spring.security.oauth2.client.registration.weixin.client-secret=YOUR_WEIXIN_APP_SECRET
spring.security.oauth2.client.registration.weixin.scope=snsapi_login
spring.security.oauth2.client.registration.weixin.client-name=weixin
spring.security.oauth2.client.registration.weixin.authorization-grant-type=authorization_code
spring.security.oauth2.client.registration.weixin.redirect-uri=http://localhost:8080/login/oauth2/code/weixin

# 支付宝登录
spring.security.oauth2.client.registration.alipay.client-id=YOUR_ALIPAY_APP_ID
spring.security.oauth2.client.registration.alipay.client-secret=YOUR_ALIPAY_APP_SECRET
spring.security.oauth2.client.registration.alipay.scope=auth_user
spring.security.oauth2.client.registration.alipay.client-name=alipay
spring.security.oauth2.client.registration.alipay.authorization-grant-type=authorization_code
spring.security.oauth2.client.registration.alipay.redirect-uri=http://localhost:8080/login/oauth2/code/alipay

# QQ登录
spring.security.oauth2.client.registration.qq.client-id=YOUR_QQ_APP_ID
spring.security.oauth2.client.registration.qq.client-secret=YOUR_QQ_APP_SECRET
spring.security.oauth2.client.registration.qq.scope=get_user_info
spring.security.oauth2.client.registration.qq.client-name=qq
spring.security.oauth2.client.registration.qq.authorization-grant-type=authorization_code
spring.security.oauth2.client.registration.qq.redirect-uri=http://localhost:8080/login/oauth2/code/qq

spring:
  security:
    oauth2:
      client:
        registration:
          # 微信登录
          weixin:
            client-id: YOUR_WEIXIN_APP_ID
            client-secret: YOUR_WEIXIN_APP_SECRET
            scope: snsapi_login
            client-name: weixin
            authorization-grant-type: authorization_code
            redirect-uri: http://localhost:8080/login/oauth2/code/weixin

   		  # 支付宝登录
          alipay:
            client-id: YOUR_ALIPAY_APP_ID
            client-secret: YOUR_ALIPAY_APP_SECRET
            scope: auth_user
            client-name: alipay
            authorization-grant-type: authorization_code
            redirect-uri: http://localhost:8080/login/oauth2/code/alipay

		  # QQ登录
          qq:
            client-id: YOUR_QQ_APP_ID
            client-secret: YOUR_QQ_APP_SECRET
            scope: get_user_info
            client-name: qq
            authorization-grant-type: authorization_code
            redirect-uri: http://localhost:8080/login/oauth2/code/qq

接下来,我们需要创建一个WebSecurityConfigurerAdapter实例,并覆盖configure方法。在这个方法中,我们需要配置哪些URL需要被保护,哪些URL可以被所有人访问,以及如何处理登录和退出。下面是一个示例:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
            // 所有人都可以访问根路径
            .antMatchers("/").permitAll()
            // 其他的URL需要登录后才能访问
            .anyRequest().authenticated()
            .and()
            // 启用OAuth2登录支持
            .oauth2Login()
            .and()
            // 配置退出功能
            .logout()
            .logoutSuccessUrl("/");
    }
}

上面的代码中,我们通过 WebSecurityConfigurerAdapter 类来配置 Spring Security。在 configure(HttpSecurity http) 方法中,我们使用 authorizeRequests() 方法来指定哪些URL需要被保护,哪些URL可以被所有人访问。在这里,我们指定了根路径可以被所有人访问,其他的URL需要登录后才能访问。

接下来,我们启用了OAuth2登录支持,使用 .oauth2Login() 方法来完成。在这里,我们使用Spring Security提供的默认的OAuth2登录页面,用户可以选择使用微信、支付宝、QQ等第三方登录。

我们使用 .logout() 方法来配置退出功能,并使用 .logoutSuccessUrl(“/”) 方法来指定退出后跳转到根路径。

最后,我们需要创建一个控制器来处理第三方登录的回调。在这个控制器中,我们需要解析回调中的授权码,并使用它来获取访问令牌和用户信息。以下是一个示例控制器

@Controller
public class OAuth2LoginController {
    @Autowired
    private OAuth2AuthorizedClientService authorizedClientService;

    @GetMapping("/login/oauth2/code/{client}")
    public String loginSuccess(@PathVariable("client") String client,
                               OAuth2AuthenticationToken authentication,
                               HttpSession session) {
        OAuth2AuthorizedClient clientDetails = authorizedClientService.loadAuthorizedClient(
                authentication.getAuthorizedClientRegistrationId(),
                authentication.getName());
        String accessToken = clientDetails.getAccessToken().getTokenValue();

        // 根据不同的第三方登录平台,使用不同的API获取用户信息
        switch (client) {
            case "weixin":
                // 使用微信API获取用户信息
                break;
            case "alipay":
                // 使用支付宝API获取用户信息
                break
            case "qq":
                // 使用QQ API获取用户信息
                break;
            default:
                // 不支持的第三方登录平台
                throw new IllegalArgumentException("Unsupported client: " + client);
        }

        // 将用户信息存储到session中,以便在后续的操作中使用
        session.setAttribute("accessToken", accessToken);
        session.setAttribute("userInfo", userInfo);

        return "redirect:/";
    }
}

上面的代码是处理OAuth2登录成功后的回调函数。当用户成功登录后,Spring Security会将用户信息存储在会话中,并重定向到根路径。在回调函数中,我们首先使用 OAuth2AuthorizedClientService 对象来获取OAuth2的客户端信息,包括访问令牌等信息。然后根据不同的第三方登录平台,使用不同的API获取用户信息。最后,我们将用户信息存储到会话中,以便在后续的操作中使用。

总的来说,以上代码实现了一个简单的Spring Boot集成微信、支付宝、QQ等第三方登录的博客。当用户使用第三方账号登录后,我们将其访问令牌和用户信息存储在会话中,以便在后续的操作中使用。这样,我们可以在博客中使用第三方账号登录,避免了用户需要另外注册账号的麻烦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LOVE_DDZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值