首页 > 其他分享 >SpringBoot整合JustAuth部分代码

SpringBoot整合JustAuth部分代码

时间:2023-06-19 10:24:50浏览次数:35  
标签:SpringBoot JustAuth 代码 boot 用户 获取 user spring type

SpringBoot整合JustAuth部分代码

gitee:ttt 项目

1.1、思路

一、前端:gitee、github、qq 图标链接
二、后端
   1、导入相关:依赖(maven项目)
   2、写两个接口:
   		2-1:根据(用户ID、回调URL) 获取 (授权码)
   		2-2:根据(用户ID、用户秘钥、回调URL、授权码) 获取 token (并)获取(用户信息)

1.2、jar依赖(maven项目)

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.30</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.2</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.72</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.20</version>
        </dependency>

        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.1.4</version>
        </dependency>

        <dependency>
            <groupId>com.xkcoding.justauth</groupId>
            <artifactId>justauth-spring-boot-starter</artifactId>
            <version>1.4.0</version>
        </dependency>
    </dependencies>

1.3、java后端:2个接口

@Controller
public class AuthController {
    @Autowired
    private UserMapper userMapper;

    @Autowired
    private AuthRequestFactory factory;

    /**
     * 1、获取(授权码)
     */
    @GetMapping("/login/{type}")
    public void login(@PathVariable("type") String type, HttpServletResponse response) throws IOException {
        //1、根据type(第三方类型) -> 获取 yaml 中的(用户ID、用户秘钥、回调URL)信息
        AuthRequest authRequest = factory.get(type);

        //2、重定向:去(第三方)获取(授权码)
        response.sendRedirect(authRequest.authorize(AuthStateUtils.createState()));
    }

    /**
     * 2、回单函数、第三方信息存入数据库、跳转首页
     */
    @GetMapping("/callback/{type}")
    public String login(@PathVariable String type, AuthCallback callback, HttpSession session) {
        //1、根据type(第三方类型) -> 获取 yaml 中的(用户ID、用户秘钥、回调URL)信息
        AuthRequest authRequest = factory.get(type);

        //2、根据(授权码code、用户ID、用户秘钥、回调URL)post请求获取:token, 并get请求获取(第三方:用户信息)
        AuthResponse response = authRequest.login(callback);

        //3、获取(用户信息)
        Object data = response.getData();

        //4、若(用户信息)为空, 跳转(登录页面)
        if(ObjectUtil.isEmpty(data)){
            session.setAttribute("msg", "获取:用户信息失败!!!");
            return "redirect:/skipIndex";
        }

        //5、若存在(用户信息), 转为User对象
        User user = BeanUtil.toBean(data, User.class);

        //6、根据:username 和 UUID 查询
        User dbUser = userMapper.selByUsernameAndUUid(user);

        //7、若(数据库)存在信息, 跳转到(主页)显示用户名
        if(ObjectUtil.isNotEmpty(dbUser)){
            session.setAttribute("user", dbUser);
            return "redirect:/skipHome";
        }

        //8、若数据库不存在:设置密码为uuid
        user.setPassword(UUID.randomUUID().toString());

        //9、添加(第三方:用户信息)到 user 表
        userMapper.insert(user);

        //10、用户信息:放入session中
        session.setAttribute("user", user);

        //11、跳转:首页,展示用户信息
        return "redirect:/skipHome";
    }
}

标签:SpringBoot,JustAuth,代码,boot,用户,获取,user,spring,type
From: https://www.cnblogs.com/yangzaikongzhongfei/p/17490447.html

相关文章

  • 请说出下面一段代码的输出结果
    请说出下面一段代码的输出结果inttest1(){inti=10;returni++;}inttest2(){inti=10;return(i++);}inttest3(){inti=10;return++i;}intmain(){......
  • Jenkins windows节点拉取代码报错: Host key verification failed
    说明:新增一个windows节点之后,在该节点上拉取gitlab上的代码发现报错,代码无法正常拉取下来。解决办法:需要在节点上将公钥发送给gitlab服务器。因为是windwos的节点,所以下面所有的操作都是在git-bash中进行的。1、生成公钥ssh-keygen-trsa2、发送给gitlab主机ssh-copy-i......
  • springboot启动流程 (2) 组件扫描
    SpringBoot的组件扫描是基于Spring@ComponentScan注解实现的,该注解使用basePackages和basePackageClasses配置扫描的包,如果未配置这两个参数,Spring将扫描该配置类所属包下面的组件。在服务启动时,将使用ConfigurationClassPostProcessor扫描当前所有的BeanDefinition,解析Configur......
  • gitlab或者gitlab或者sourceforge怎么用正确的姿势下载代码文件
    由于众所周知的原因,锅内是无法正常下载者三者的,包括安卓代码和安卓开发所用的依赖等等。我给出我的方法,看看能不能帮到你。镜像站点去下载。用过锅内代码托管平台码云下载。它可以导入第三方代码平台。找一个文件中转站,比如NC网盘等等,提取下载链接用讯雷网盘离线下载,在......
  • Java代码精简之道-10条代码精简方案
    场景一、Java中利用try-with-resource语句JDK7开始新增了对需要关闭资源处理的特殊语法try-with-resource。所有实现Closeable接口的“资源”,均可采用try-with-resource进行简化。例如InputStream,OutputStream,Connection,Statement,ResultSet等接口都实现了,使用try-with-reso......
  • 第三节:ChatGPT聊天框用途(PPT/思维导图/写代码/文案/面试等等)
    一. 制作PPT       二.思维导图       三.         !作       者:Yaopengfei(姚鹏飞)博客地址:http://www.cnblogs.com/yaopengfei/声     明1:如有错误,欢迎讨论,请勿谩骂^_^。声     明2:......
  • Grafana系列-GaC-1-Grafana即代码的几种实现方式
    系列文章Grafana系列文章Terraform系列文章概述GaC(GrafanaasCode,Grafana即代码)很明显是扩展自IaC(InfrastructureasCode,基础设施即代码)的概念.在Terraform系列-什么是IaC?一文中,我们已经详细地说明了相关的概念,我们可以直接套用在GaC上:Grafana......
  • 2023跟我一起学设计模式:Golang 抽象工厂模式讲解和代码示例
    Golang抽象工厂模式讲解和代码示例抽象工厂是一种创建型设计模式,它能创建一系列相关的对象,而无需指定其具体类。抽象工厂定义了用于创建不同产品的接口,但将实际的创建工作留给了具体工厂类。每个工厂类型都对应一个特定的产品变体。在创建产品时,客户端代码调用的是工厂对象的......
  • springboot第26集:centos,docker
    yum-vLoading"fastestmirror"pluginLoading"langpacks"pluginLoading"product-id"pluginLoading"search-disabled-repos"pluginLoading"subscription-manager"pluginAddingen\_US.UTF-8tolanguageli......
  • APM代码阅读(二):Mavlink通信
    文章目录前言一、update_receive二、handleMessage三、handle_common_message四、update_sendMissionItemProtocol::update()GCS_MAVLINK::update_send()前言APM4.2.3以ROVER为例进行阅读如有疏漏或谬误,恳请指出一个人可以走的更快,一群人才能走的更远一、update_receiveAPM......