• 鉴权完成后如何拿到SpringSocial的用户信息


     1 package cn.coreqi.social.config;
     2 
     3 import org.springframework.beans.factory.annotation.Autowired;
     4 import org.springframework.context.annotation.Bean;
     5 import org.springframework.context.annotation.Configuration;
     6 import org.springframework.security.crypto.encrypt.Encryptors;
     7 import org.springframework.social.config.annotation.EnableSocial;
     8 import org.springframework.social.config.annotation.SocialConfigurerAdapter;
     9 import org.springframework.social.connect.ConnectionFactoryLocator;
    10 import org.springframework.social.connect.UsersConnectionRepository;
    11 import org.springframework.social.connect.jdbc.JdbcUsersConnectionRepository;
    12 import org.springframework.social.connect.web.ProviderSignInUtils;
    13 import org.springframework.social.security.SpringSocialConfigurer;
    14 
    15 import javax.sql.DataSource;
    16 
    17 @Configuration
    18 @EnableSocial
    19 public class SocialConfig extends SocialConfigurerAdapter {
    20 
    21     @Autowired
    22     private DataSource dataSource;
    23 
    24     /**
    25      *
    26      * @param connectionFactoryLocator  作用是去根据条件去查找应该用那个connectionFactory,因为系统中可能有很多的connectionFactory。
    27      * @return
    28      */
    29     @Override
    30     public UsersConnectionRepository getUsersConnectionRepository(ConnectionFactoryLocator connectionFactoryLocator) {
    31         //第三个参数的作用是把插入到数据库的数据进行加解密
    32         JdbcUsersConnectionRepository jdbcUsersConnectionRepository = new JdbcUsersConnectionRepository(dataSource,connectionFactoryLocator, Encryptors.noOpText());
    33         //jdbcUsersConnectionRepository.setTablePrefix(); //设置数据表的前缀
    34         return jdbcUsersConnectionRepository;
    35     }
    36 
    37     /**
    38      * 声明后还需要加在SpringSecurity过滤器链上
    39      * @return
    40      */
    41     @Bean
    42     public SpringSocialConfigurer coreqiSocialSecurityConfig(){
    43         CoreqiSpringSocialConfig config = new CoreqiSpringSocialConfig();
    44         config.signupUrl("/registry");  //当从业务系统中无法找到OAuth快捷登陆的用户,那么将用户引导到注册页面中
    45         return config;
    46     }
    47 
    48 
    49 
    50 
    51 
    52     //1.注册过程中如何拿到SpringSocial信息
    53     //2.注册完成后如何把业务系统的用户ID传给SpringSocial
    54     @Bean
    55     public ProviderSignInUtils providerSignInUtils(ConnectionFactoryLocator connectionFactoryLocator){
    56         return new ProviderSignInUtils(connectionFactoryLocator,getUsersConnectionRepository(connectionFactoryLocator));
    57     }
    58 }

     1 package cn.coreqi.social.qq.entities;
     2 
     3 public class SocialUserInfo {
     4     private String providerId;
     5     private String providerUserId;
     6     private String nickname;
     7     private String headimg;
     8 
     9     public String getProviderId() {
    10         return providerId;
    11     }
    12 
    13     public void setProviderId(String providerId) {
    14         this.providerId = providerId;
    15     }
    16 
    17     public String getProviderUserId() {
    18         return providerUserId;
    19     }
    20 
    21     public void setProviderUserId(String providerUserId) {
    22         this.providerUserId = providerUserId;
    23     }
    24 
    25     public String getNickname() {
    26         return nickname;
    27     }
    28 
    29     public void setNickname(String nickname) {
    30         this.nickname = nickname;
    31     }
    32 
    33     public String getHeadimg() {
    34         return headimg;
    35     }
    36 
    37     public void setHeadimg(String headimg) {
    38         this.headimg = headimg;
    39     }
    40 }

     1 package cn.coreqi.controller;
     2 
     3 import cn.coreqi.social.qq.entities.SocialUserInfo;
     4 import org.springframework.beans.factory.annotation.Autowired;
     5 import org.springframework.security.core.userdetails.User;
     6 import org.springframework.social.connect.Connection;
     7 import org.springframework.social.connect.web.ProviderSignInUtils;
     8 import org.springframework.web.bind.annotation.GetMapping;
     9 import org.springframework.web.bind.annotation.PostMapping;
    10 import org.springframework.web.bind.annotation.RestController;
    11 import org.springframework.web.context.request.ServletWebRequest;
    12 
    13 import javax.servlet.http.HttpServletRequest;
    14 
    15 @RestController
    16 public class UserController {
    17 
    18 
    19     @Autowired
    20     private ProviderSignInUtils providerSignInUtils;
    21 
    22     @PostMapping("/regist")
    23     public void regist(User user,HttpServletRequest request){
    24         //不管是注册用户还是绑定用户,都会拿到一个用户唯一标识
    25         String userId = user.getUsername();
    26         providerSignInUtils.doPostSignUp(userId,new ServletWebRequest(request));
    27     }
    28 
    29     /**
    30      *
    31      * @return
    32      */
    33     @GetMapping("/social/user")
    34     public SocialUserInfo getSocialUserInfo(HttpServletRequest request){
    35         SocialUserInfo userInfo = new SocialUserInfo();
    36         Connection<?> connection = providerSignInUtils.getConnectionFromSession(new ServletWebRequest(request));
    37         userInfo.setProviderId(connection.getKey().getProviderId());
    38         userInfo.setProviderUserId(connection.getKey().getProviderUserId());
    39         userInfo.setNickname(connection.getDisplayName());
    40         userInfo.setHeadimg(connection.getImageUrl());
    41         return userInfo;
    42     }
    43 }
  • 相关阅读:
    网站添加微信支付功能(小白填坑)
    spring项目中如何添加定时器以及在定时器中自动生成sprng注入对象
    当时间一天天流逝,一个三十岁的屌丝程序员留下了了什么?
    解决使用canvas生成含有微信头像的邀请海报没有微信头像
    jQuery v1.10.2如何判断checkbox(复选框)是否被选中
    调用钉钉接口发送消息
    .net core ajax使用EPPlus上传excle导入总结
    Java企业级权限管理系统的开发总结
    RESTful学习小结
    JS实战(京东秒杀)
  • 原文地址:https://www.cnblogs.com/fanqisoft/p/10647259.html
Copyright © 2020-2023  润新知