Springboot使用JustAuth完成各种第三方登陆

这篇具有很好参考价值的文章主要介绍了Springboot使用JustAuth完成各种第三方登陆。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

使用Gitee进行登陆

1.Gitee准备工作

2. 编码

3.建立数据表

         4. 自由发挥


示例:

使用Gitee进行登陆

1.Gitee准备工作

进入gitee,在设置中选择此选项

springboot集成justauth,java,Spring,spring boot,安全,spring

 springboot集成justauth,java,Spring,spring boot,安全,spring

2. 编码

依赖
 

        <!--        第三方登陆justauth 引入-->
        <dependency>
            <groupId>com.xkcoding.justauth</groupId>
            <artifactId>justauth-spring-boot-starter</artifactId>
            <version>1.4.0</version>
        </dependency>
        <!--        对象转json-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.83</version>
        </dependency>

配置文件

justauth:
  # 是否启用
  enabled: true
  type:
    # 配置各种类型的登陆
    GITEE:
      # 创建的应用的client-id
      client-id: xx
      client-secret: xx
      # 自己写的回调地址
      redirect-uri: http://127.0.0.1:8081/Auth/gitee/callback
  cache:
    type: default   

 接口编写

package com.scm.myblog.controller;

import com.alibaba.fastjson.JSON;
import com.xkcoding.justauth.AuthRequestFactory;
import lombok.extern.slf4j.Slf4j;
import me.zhyd.oauth.model.AuthCallback;
import me.zhyd.oauth.model.AuthResponse;
import me.zhyd.oauth.request.AuthRequest;
import me.zhyd.oauth.utils.AuthStateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@RestController
@RequestMapping("/Auth")
@Slf4j
public class UserAuthController {
    @Autowired
    private AuthRequestFactory factory;


    @GetMapping("/login/{type}")
    public void toLogin(@PathVariable String type, HttpServletResponse response) throws IOException {
        AuthRequest authRequest = factory.get(type);
        response.sendRedirect(authRequest.authorize(AuthStateUtils.createState()));
    }

    @GetMapping("/{type}/callback")
    public AuthResponse loginBack(@PathVariable String type, AuthCallback callback) {
        AuthRequest authRequest = factory.get(type);
        log.info(JSON.toJSONString(callback));
        AuthResponse response = authRequest.login(callback);
        log.info(JSON.toJSONString(response));
        return response;
    }
}

如果有spring security的话,还要打开这两个接口的访问权限为所有人都可以访问。

没有的可忽略

package com.scm.myblog.config.securityconfig;

public class ApiConfig {

    //无需权限即可访问的Api接口地址
    public static String [] NoAuthApi=new String[] {
            // 第三方登陆
            "/Auth/**",
    };
}


=------------------------------------=
package com.scm.myblog.config.securityconfig;

import com.scm.myblog.common.ExceptionLancer.MyAuthenticationException;
import com.scm.myblog.filter.AuthFilter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;

@Configuration
//开启权限管理系统
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private AuthFilter af;
    @Autowired
    private MyAuthenticationException myAuthenticationException;
    //密码加密解密
    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

    @Override
    @Order(1)
    protected void configure(HttpSecurity http) throws Exception {
        //设置无需权限即可访问的
        for (String n: ApiConfig.NoAuthApi){
            http.authorizeRequests().antMatchers(n).permitAll();
        }
        http
                //关闭csrf
                .csrf().disable()
                //不通过session获取security上下文
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                .and()
                .authorizeRequests()
                //其他的所有接口都需要带token认证
                .anyRequest().authenticated()
                .and().exceptionHandling().authenticationEntryPoint(myAuthenticationException);

        //配置自定义的过滤器在何处执行
        //在UsernamePasswordAuthenticationFilter之前
        http.addFilterBefore(af, UsernamePasswordAuthenticationFilter.class);
        //配置跨域请求
        http.cors();
    }


    //用于进行用户验证
    @Bean
    @Override
    public AuthenticationManager authenticationManagerBean() throws Exception {
        return super.authenticationManagerBean();
    }
}

启动测试

访问:

http://localhost:8081/Auth/login/gitee

springboot集成justauth,java,Spring,spring boot,安全,spring

同意授权之后,会自动跳转到这里,这里有我们登陆成功后的信息

springboot集成justauth,java,Spring,spring boot,安全,spring

3.建立数据表

CREATE TABLE `oauth_platform` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(30) DEFAULT NULL COMMENT '平台名称',
  `description` varchar(100) DEFAULT NULL,
  `is_delete` int(11) DEFAULT NULL,
  `status` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COMMENT='第三方认证平台信息表'

CREATE TABLE `oauth_user_info` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `uid` varchar(20) DEFAULT NULL COMMENT 'OAuth用户唯一的id',
  `username` varchar(30) DEFAULT NULL COMMENT 'OAuth用户名',
  `avatar` varchar(120) DEFAULT NULL COMMENT 'OAuth平台的头像url',
  `oauth_token` varchar(50) DEFAULT NULL COMMENT '给的token',
  `oauth_expireIn` int(11) DEFAULT NULL COMMENT 'oauth的过期时间',
  `oauth_platform_id` int(11) DEFAULT NULL COMMENT '平台id',
  `is_delete` int(11) DEFAULT NULL,
  `status` int(11) DEFAULT NULL COMMENT '状态',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户第三方登陆信息表'

在代码中将需要的信息插入表格,并把用户的uid存入redis即可登陆成功!文章来源地址https://www.toymoban.com/news/detail-534499.html

4. 自由发挥

到了这里,关于Springboot使用JustAuth完成各种第三方登陆的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Springboot整合第三方登录

    Springboot整合第三方登录 为什么采用第三方登录 ​ 采用第三方登录可以避免重新注册账号的繁琐,也不需要再为密码和昵称发愁,而第三方登录有一个比较好用的包,里面整合了多种第三方登录,开箱即用,非常方便。就是JustAuth,网址https://www.justauth.cn/。 整合第三方登录

    2024年02月09日
    浏览(45)
  • SpringBoot集成常用第三方框架-ES

    作者主页:编程指南针 作者简介:Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容:Java项目、Python项目、前端项目、人工智能与大数据、简历模板、学习资料、面试题库

    2024年02月03日
    浏览(64)
  • springboot整合第三方技术邮件系统

    springboot整合第三方技术邮件系统,发邮件是java程序的基本操作,springboot整合javamail其实就是简化开发。不熟悉邮件的小伙伴可以先学习完javamail的基础操作,再来看这一部分内容才能感触到springboot整合javamail究竟简化了哪些操作。简化的多码?其实不多,差别不大,只是还个

    2024年02月11日
    浏览(43)
  • SpringBoot集成常用第三方框架-RabbitMQ

    作者主页:编程指南针 作者简介:Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容:Java项目、Python项目、前端项目、人工智能与大数据、简历模板、学习资料、面试题库

    2024年01月17日
    浏览(63)
  • SpringBoot案例 调用第三方接口传输数据

    最近再写调用三方接口传输数据的项目,这篇博客记录项目完成的过程,方便后续再碰到类似的项目可以快速上手 项目结构: 这里主要介绍HttpClient发送POST请求工具类和定时器的使用,mvc三层架构编码不做探究 pom.xml application-dev.yml Constast utils scheduled 该定时任务每10秒执行一

    2024年02月12日
    浏览(60)
  • SpringBoot【开发实用篇】---- 整合第三方技术(缓存)

    企业级应用主要作用是信息处理,当需要读取数据时,由于受限于数据库的访问效率,导致整体系统性能偏低。 应用程序直接与数据库打交道,访问效率低 为了改善上述现象,开发者通常会在应用程序与数据库之间建立一种临时的数据存储机制,该区域中的数据在内存中保

    2024年02月05日
    浏览(60)
  • SpringBoot整合第三方技术 -- SpringBoot快速入门保姆级教程(三)

    为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。当然,如果能帮到一些萌新进行新技术的学习那也是极好的。作者菜菜一枚,文章中如果有记录错误,欢迎读者朋友们批评指正。 (博客的参考源码可以在我主页的资源里找到,如果在学习的

    2024年02月09日
    浏览(43)
  • 在bilibili平台利用第三方推流完成摄像头(手机)、电脑屏幕、背景共存直播。以线上自习室为例

    很早之前就想在b站参加一个线上自习室监督自己,但是目前的自习室要么不是免费的,要么人数过多起不到监督效果,在看到b站有相关分区直播后我尝试自己直播这个。 先上直播效果 摄像头(可以用手机摄像头代替) 电脑 iVCam(手机版) iVCam(电脑版) OBS Studio 哔哩哔哩

    2024年02月09日
    浏览(94)
  • 【SpringBoot】整合第三方技术Junit. MybatisPlus druid

    自己定义一个功能,测试功能接口 测试步骤 注入你要测试的对象 提前声明为bean资源 执行你要测试的方法 如果测试类在SpringBoot启动类的包或者子包中,可以省略启动类的设置们也就是省略classes的设定 新建一个模块 勾选MybatisFrameWork 和MySQL driver 记得一定要配置数据库连接信

    2024年02月06日
    浏览(58)
  • SpringBoot打包成WAR包的时候把第三方jar包打到LIB文件夹下和把第三方jar包打入到SpringBoot jar包中

    转载 首先我们应该知道我们把 SPRINGBOOT 项目打包成WAR包和JAR包的时候分别需要何种插件 我们最常用的把 springBoot 打成jar包的插件是下面这样的一个插件,这是把我们的 springBoot 项目打包成为一个可执行 jar 的插件 把 springBoot 项目打包成一个war包的插件是下面这样的一个插件

    2024年02月07日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包