Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
提交反馈
为 GitLab 提交贡献
登录
切换导航
I
ibzuaa
项目
项目
详情
动态
版本
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
ibiz4jteam
ibzuaa
提交
f096060c
提交
f096060c
编写于
6月 22, 2020
作者:
laizhilong
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
qq授权登录
上级
2decea9b
变更
10
显示空白字符变更
内嵌
并排
正在显示
10 个修改的文件
包含
458 行增加
和
100 行删除
+458
-100
qqRedirect.html
app_web/public/assets/qqRedirect.html
+2
-3
login.vue
app_web/src/components/login/login.vue
+0
-7
qqLoginRedirect.vue
app_web/src/components/login/qqLoginRedirect.vue
+105
-75
register.vue
app_web/src/components/login/register.vue
+1
-9
weixinLoginRedirect.vue
app_web/src/components/login/weixinLoginRedirect.vue
+1
-1
DevBootSecurityConfig.java
...rc/main/java/cn/ibizlab/config/DevBootSecurityConfig.java
+4
-0
UserQQRegisterService.java
...ab/core/uaa/extensions/service/UserQQRegisterService.java
+115
-0
UserDingtalkRegisterResource.java
...lab/api/rest/extensions/UserDingtalkRegisterResource.java
+4
-1
UserQQRegisterResource.java
...n/ibizlab/api/rest/extensions/UserQQRegisterResource.java
+223
-3
UserWechatRegisterResource.java
...izlab/api/rest/extensions/UserWechatRegisterResource.java
+3
-1
未找到文件。
app_web/public/assets/qqRedirect.html
浏览文件 @
f096060c
...
@@ -13,11 +13,10 @@
...
@@ -13,11 +13,10 @@
$
(
function
()
{
$
(
function
()
{
var
code
=
getUrlParam
(
'code'
);
var
code
=
getUrlParam
(
'code'
);
var
state
=
getUrlParam
(
'state'
);
var
state
=
getUrlParam
(
'state'
);
alert
(
"code:"
+
code
+
"
\n
state:"
+
state
);
//
alert("code:" + code + "\n state:" + state);
if
(
code
&&
state
)
{
if
(
code
&&
state
)
{
// 通过授权code请求后台
// 通过授权code请求后台
// alert(window.location.hostname);
var
opt
=
{
"code"
:
code
,
"state"
:
state
};
var
opt
=
{
"code"
:
code
,
"state"
:
state
};
$
.
ajax
({
$
.
ajax
({
type
:
"post"
,
type
:
"post"
,
...
@@ -42,7 +41,7 @@
...
@@ -42,7 +41,7 @@
window
.
location
.
href
=
"../index"
;
window
.
location
.
href
=
"../index"
;
}
else
{
}
else
{
// 跳转微信绑定
// 跳转微信绑定
window
.
location
.
href
=
"../#/
weixin
LoginRedirect?code="
+
code
+
"&state="
+
state
;
window
.
location
.
href
=
"../#/
qq
LoginRedirect?code="
+
code
+
"&state="
+
state
;
}
}
}
}
},
},
...
...
app_web/src/components/login/login.vue
浏览文件 @
f096060c
...
@@ -259,8 +259,6 @@
...
@@ -259,8 +259,6 @@
* @param thirdpart
* @param thirdpart
*/
*/
public
tencentHandleClick
(
thirdpart
:
any
)
{
public
tencentHandleClick
(
thirdpart
:
any
)
{
this
.
$Message
.
warning
(
"QQ授权登录暂未支持,敬请期待"
);
return
;
// 截取地址,拼接需要部分组成新地址
// 截取地址,拼接需要部分组成新地址
const
baseUrl
=
this
.
getNeedLocation
();
const
baseUrl
=
this
.
getNeedLocation
();
...
@@ -318,8 +316,6 @@
...
@@ -318,8 +316,6 @@
* @param thirdpart
* @param thirdpart
*/
*/
public
wechatHandleClick
(
thirdpart
:
any
)
{
public
wechatHandleClick
(
thirdpart
:
any
)
{
// this.$Message.warning("微信授权登录暂未支持,敬请期待");
// 从后台获取微信开放平台提供的appid
// 从后台获取微信开放平台提供的appid
const
get
:
Promise
<
any
>
=
this
.
$http
.
get
(
'/uaa/getWechatAppId'
);
const
get
:
Promise
<
any
>
=
this
.
$http
.
get
(
'/uaa/getWechatAppId'
);
get
.
then
((
response
:
any
)
=>
{
get
.
then
((
response
:
any
)
=>
{
...
@@ -375,9 +371,6 @@
...
@@ -375,9 +371,6 @@
* @param thirdpart
* @param thirdpart
*/
*/
public
dingtalkHandleClick
(
thirdpart
:
any
)
{
public
dingtalkHandleClick
(
thirdpart
:
any
)
{
// this.$Message.warning("钉钉授权登录暂未支持,敬请期待");
// return;
// 从后台获取钉钉开放平台提供的appid
// 从后台获取钉钉开放平台提供的appid
const
get
:
Promise
<
any
>
=
this
.
$http
.
get
(
'/uaa/getDingtalkAppId'
);
const
get
:
Promise
<
any
>
=
this
.
$http
.
get
(
'/uaa/getDingtalkAppId'
);
get
.
then
((
response
:
any
)
=>
{
get
.
then
((
response
:
any
)
=>
{
...
...
app_web/src/components/login/qqLoginRedirect.vue
浏览文件 @
f096060c
...
@@ -81,6 +81,23 @@
...
@@ -81,6 +81,23 @@
public
BtnContent
:
any
=
"注册并绑定QQ"
;
public
BtnContent
:
any
=
"注册并绑定QQ"
;
/**
* QQ互联授权成功返回的code和state
*/
public
code
:
any
;
public
state
:
any
;
/**
* QQ用户身份的唯一标识
*/
public
openid
:
any
;
/**
* QQ用户名称
*/
public
nickname
:
any
;
/**
/**
* 应用名称
* 应用名称
*
*
...
@@ -113,12 +130,6 @@
...
@@ -113,12 +130,6 @@
}
}
};
};
// 注册方式
public
registerType
:
any
=
"commom"
;
// 用户身份的唯一标识。建议保存在本地,以便用户下次登录时可对应到其之前的身份信息,不需要重新授权。
public
openId
:
any
;
// 表示当前用户在此网站/应用的登录状态与授权信息,建议保存在本地。
public
accessToken
:
any
;
/**
/**
* 生命周期Create
* 生命周期Create
...
@@ -134,39 +145,78 @@
...
@@ -134,39 +145,78 @@
*/
*/
public
mounted
()
{
public
mounted
()
{
let
_this
=
this
;
let
_this
=
this
;
// 获取qq授权登录的信息,用于后台请求
// 从url获取授权code和state
if
(
window
.
QC
.
Login
.
check
())
{
this
.
code
=
this
.
$route
.
query
.
code
;
console
.
log
(
"qq已经登录"
);
if
(
!
this
.
code
)
{
window
.
QC
.
Login
.
getMe
(
function
(
openId
:
string
,
accessToken
:
string
){
this
.
code
=
this
.
getUrlParam
(
'code'
);
_this
.
openId
=
openId
;
}
_this
.
accessToken
=
accessToken
;
this
.
state
=
this
.
$route
.
query
.
state
;
_this
.
registerType
=
"qq"
;
if
(
!
this
.
state
)
{
localStorage
.
setItem
(
"openId"
,
openId
);
this
.
state
=
this
.
getUrlParam
(
'state'
);
localStorage
.
setItem
(
"accessToken"
,
accessToken
);
}
});
// alert("code:" + this.wechatCode + "\nstate:" + this.wechatState);
// 根据openId查用户
// 获取失败,回到登录页
this
.
queryUserByOpenId
(
this
.
openId
);
if
(
!
this
.
code
||
!
this
.
state
)
{
this
.
$message
.
error
(
"微信授权,获取code失败"
);
this
.
goLogin
();
}
else
{
// 根据code获取QQ用户信息
this
.
getQQUserInfoByCode
(
this
.
code
);
}
}
}
}
/**
/**
* 根据openId查用户
* 监听语言变化
* 1.没系统账号的,进行注册并绑定QQ
*
* 2.有系统账号的,直接登录
* @memberof Login
* @param openId
*/
*/
private
queryUserByOpenId
(
openId
:
any
)
{
@
Watch
(
'$i18n.locale'
)
onLocaleChange
(
newval
:
any
,
val
:
any
)
{
this
.
setRules
();
}
/**
* 跳转登录页面
*
* @memberof Register
*/
public
goLogin
():
void
{
const
_this
=
this
;
_this
.
$router
.
push
(
'/login'
);
}
/**
* 获取url参数
*/
public
getUrlParam
(
name
:
any
)
{
var
reg
=
new
RegExp
(
"(^|&)"
+
name
+
"=([^&]*)(&|$)"
);
//构造一个含有目标参数的正则表达式对象
var
r
=
window
.
location
.
search
.
substr
(
1
).
match
(
reg
);
//匹配目标参数
if
(
r
!=
null
)
return
unescape
(
r
[
2
]);
return
null
;
//返回参数值
}
/**
* 根据code获取微信用户信息
*/
private
getQQUserInfoByCode
(
code
:
any
)
{
var
param
:
any
=
{};
var
param
:
any
=
{};
param
.
openId
=
openId
;
param
.
code
=
code
;
const
post
:
Promise
<
any
>
=
this
.
$http
.
post
(
'
uaa/queryUserByOpenId
'
,
param
,
true
);
const
post
:
Promise
<
any
>
=
this
.
$http
.
post
(
'
/uaa/getQQUserInfoByCode
'
,
param
,
true
);
post
.
then
((
response
:
any
)
=>
{
post
.
then
((
response
:
any
)
=>
{
if
(
response
&&
response
.
status
===
200
)
{
if
(
response
&&
response
.
status
===
200
)
{
const
data
=
response
.
data
;
const
data
=
response
.
data
;
if
(
data
.
ibzuser
)
{
if
(
data
&&
data
.
openid
)
{
this
.
form
.
loginname
=
data
.
ibzuser
.
loginname
;
this
.
openid
=
data
.
openid
;
this
.
form
.
password
=
data
.
ibzuser
.
password
;
this
.
nickname
=
data
.
nickname
;
// 直接登录
}
else
{
this
.
countDown
(
0
);
this
.
$Message
.
error
({
content
:
"获取QQ用户信息失败,请重新授权"
,
duration
:
3
,
closable
:
true
});
}
}
}
}
}).
catch
((
e
:
any
)
=>
{
}).
catch
((
e
:
any
)
=>
{
...
@@ -179,34 +229,12 @@
...
@@ -179,34 +229,12 @@
});
});
}
else
{
}
else
{
this
.
$Message
.
error
({
this
.
$Message
.
error
({
content
:
"
错误
"
,
content
:
"
获取QQ用户信息失败,请重新授权
"
,
duration
:
3
,
duration
:
3
,
closable
:
true
closable
:
true
});
});
}
}
});
});
}
/**
* 监听语言变化
*
* @memberof Login
*/
@
Watch
(
'$i18n.locale'
)
onLocaleChange
(
newval
:
any
,
val
:
any
)
{
this
.
setRules
();
}
/**
* 跳转登录页面
*
* @memberof Register
*/
public
goLogin
():
void
{
const
_this
=
this
;
_this
.
$router
.
push
(
'/login'
);
}
}
...
@@ -228,38 +256,40 @@
...
@@ -228,38 +256,40 @@
}
}
var
param
:
any
=
this
.
form
;
var
param
:
any
=
this
.
form
;
if
(
this
.
registerType
===
"qq"
)
{
if
(
this
.
code
&&
this
.
state
)
{
param
.
registerType
=
"qq"
;
param
.
code
=
this
.
code
;
param
.
openId
=
this
.
openId
;
param
.
state
=
this
.
state
;
param
.
accessToken
=
this
.
accessToken
;
param
.
openid
=
this
.
openid
;
param
.
nickname
=
this
.
nickname
;
}
}
else
{
else
{
this
.
$Message
.
error
({
this
.
$message
.
error
(
"QQ授权,获取code失败"
);
content
:
"注册并绑定QQ失败"
,
duration
:
3
,
closable
:
true
});
return
;
return
;
}
}
const
post
:
Promise
<
any
>
=
this
.
$http
.
post
(
'/uaa/register'
,
param
,
true
);
const
post
:
Promise
<
any
>
=
this
.
$http
.
post
(
'/uaa/bindQQtoRegister'
,
param
,
true
);
post
.
then
((
response
:
any
)
=>
{
post
.
then
((
response
:
any
)
=>
{
if
(
response
&&
response
.
status
===
200
)
{
if
(
response
&&
response
.
status
===
200
)
{
const
data
=
response
.
data
;
const
data
=
response
.
data
;
if
(
data
&&
data
.
ibzuser
)
{
if
(
data
)
{
this
.
$Message
.
success
({
content
:
"注册成功,用户名:"
+
data
.
ibzuser
.
loginname
+
",密码:"
+
data
.
ibzuser
.
password
,
duration
:
3
,
closable
:
true
});
}
else
{
this
.
$Message
.
success
({
this
.
$Message
.
success
({
content
:
"注册成功"
,
content
:
"注册成功,正在登录"
duration
:
3
,
closable
:
true
});
});
if
(
data
.
token
)
{
localStorage
.
setItem
(
'token'
,
data
.
token
);
}
if
(
data
.
user
)
{
localStorage
.
setItem
(
'user'
,
JSON
.
stringify
(
data
.
user
));
}
if
(
data
.
ibzuser
)
{
let
ibzuser
:
any
=
JSON
.
stringify
(
data
.
ibzuser
);
// 设置cookie,保存账号密码7天
this
.
setCookie
(
ibzuser
.
loginname
,
ibzuser
.
password
,
7
);
// 跳转首页
const
url
:
any
=
'*'
;
this
.
$router
.
push
({
path
:
url
});
}
}
}
// 3s后自动登录
this
.
countDown
(
3
);
}
}
}).
catch
((
e
:
any
)
=>
{
}).
catch
((
e
:
any
)
=>
{
const
data
=
e
.
data
;
const
data
=
e
.
data
;
...
...
app_web/src/components/login/register.vue
浏览文件 @
f096060c
...
@@ -203,15 +203,7 @@
...
@@ -203,15 +203,7 @@
const
data
=
response
.
data
;
const
data
=
response
.
data
;
if
(
data
&&
data
.
ibzuser
)
{
if
(
data
&&
data
.
ibzuser
)
{
this
.
$Message
.
success
({
this
.
$Message
.
success
({
content
:
"注册成功,用户名:"
+
data
.
ibzuser
.
loginname
+
",密码:"
+
data
.
ibzuser
.
password
,
content
:
"注册成功,正在登录"
duration
:
3
,
closable
:
true
});
}
else
{
this
.
$Message
.
success
({
content
:
"注册成功"
,
duration
:
3
,
closable
:
true
});
});
}
}
// 自动登录
// 自动登录
...
...
app_web/src/components/login/weixinLoginRedirect.vue
浏览文件 @
f096060c
...
@@ -87,7 +87,7 @@
...
@@ -87,7 +87,7 @@
public
state
:
any
;
public
state
:
any
;
/**
/**
*
钉钉
用户身份的唯一标识
*
微信
用户身份的唯一标识
*/
*/
public
openid
:
any
;
public
openid
:
any
;
...
...
ibzuaa-boot/src/main/java/cn/ibizlab/config/DevBootSecurityConfig.java
浏览文件 @
f096060c
...
@@ -118,6 +118,10 @@ public class DevBootSecurityConfig extends WebSecurityConfigurerAdapter {
...
@@ -118,6 +118,10 @@ public class DevBootSecurityConfig extends WebSecurityConfigurerAdapter {
.
antMatchers
(
"/uaa/getDingtalkUserInfoByCode"
).
permitAll
()
.
antMatchers
(
"/uaa/getDingtalkUserInfoByCode"
).
permitAll
()
.
antMatchers
(
"/uaa/bindDingtalkToRegister"
).
permitAll
()
.
antMatchers
(
"/uaa/bindDingtalkToRegister"
).
permitAll
()
.
antMatchers
(
"/uaa/getQQAppId"
).
permitAll
()
.
antMatchers
(
"/uaa/queryQQUserByCode"
).
permitAll
()
.
antMatchers
(
"/uaa/getQQUserInfoByCode"
).
permitAll
()
.
antMatchers
(
"/uaa/bindQQtoRegister"
).
permitAll
()
.
anyRequest
().
authenticated
()
.
anyRequest
().
authenticated
()
// 防止iframe 造成跨域
// 防止iframe 造成跨域
.
and
().
headers
().
frameOptions
().
disable
();
.
and
().
headers
().
frameOptions
().
disable
();
...
...
ibzuaa-core/src/main/java/cn/ibizlab/core/uaa/extensions/service/UserQQRegisterService.java
0 → 100644
浏览文件 @
f096060c
package
cn
.
ibizlab
.
core
.
uaa
.
extensions
.
service
;
import
cn.ibizlab.util.domain.IBZUSER
;
import
cn.ibizlab.util.errors.BadRequestAlertException
;
import
cn.ibizlab.util.helper.HttpUtils
;
import
cn.ibizlab.util.service.IBZUSERService
;
import
com.alibaba.fastjson.JSONObject
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.StringUtils
;
import
java.io.UnsupportedEncodingException
;
/**
* 实体[IBZUSER] QQ用户注册接口实现
*/
@Service
@Slf4j
public
class
UserQQRegisterService
{
@Autowired
private
IBZUSERService
ibzuserService
;
/**
* 注册
*
* @param ibzuser
*/
public
void
toRegister
(
IBZUSER
ibzuser
)
{
// 创建ibzuser
boolean
flag
=
ibzuserService
.
save
(
ibzuser
);
if
(!
flag
)
{
throw
new
BadRequestAlertException
(
"注册失败"
,
"UserQQRegisterService"
,
""
);
}
}
/**
* 通过code获取QQ用户信息
*
* @param code
* @param qqRedirectUri
* @param qqAppid
* @param qqAppkey
* @return
*/
public
JSONObject
requestQQUserByCode
(
String
code
,
String
qqRedirectUri
,
String
qqAppid
,
String
qqAppkey
)
{
JSONObject
returnObj
=
null
;
try
{
// 1.根据code获取access_token
String
getAccessTokenUrl
=
"https://graph.qq.com/oauth2.0/token?"
+
"grant_type=authorization_code"
+
"&client_id="
+
qqAppid
+
"&client_secret="
+
qqAppkey
+
"&code="
+
code
+
"&redirect_uri="
+
qqRedirectUri
;
String
responserStr
=
HttpUtils
.
get
(
getAccessTokenUrl
,
null
,
null
);
JSONObject
responseObj
=
new
JSONObject
();
if
(
StringUtils
.
isEmpty
(
responserStr
))
{
throw
new
BadRequestAlertException
(
"QQ服务端获取access_token失败!"
,
"UserQQRegisterService"
,
""
);
}
else
{
String
[]
split
=
responserStr
.
split
(
"&"
);
for
(
int
i
=
0
;
i
<
split
.
length
;
i
++)
{
if
(
split
[
i
].
indexOf
(
"="
)!=-
1
){
String
[]
split1
=
split
[
i
].
split
(
"="
);
if
(
split1
.
length
>
0
)
{
responseObj
.
put
(
split1
[
0
],
split1
[
1
]);
continue
;
}
}
}
}
String
access_token
=
responseObj
.
getString
(
"access_token"
);
String
refresh_token
=
responseObj
.
getString
(
"refresh_token"
);
// 2.使用access_token来获取用户的OpenID
String
openid
=
null
;
String
getOpenIdUrl
=
"https://graph.qq.com/oauth2.0/me?access_token="
+
access_token
;
String
responseStr2
=
HttpUtils
.
get
(
getOpenIdUrl
);
if
(
StringUtils
.
isEmpty
(
responseStr2
))
{
throw
new
BadRequestAlertException
(
"QQ服务端请求openid失败!"
,
"UserQQRegisterService"
,
""
);
}
else
{
responseStr2
=
responseStr2
.
replace
(
"callback("
,
""
).
replace
(
");"
,
""
);
JSONObject
responseObj2
=
JSONObject
.
parseObject
(
responseStr2
);
if
(
responseObj2
.
containsKey
(
"openid"
))
{
openid
=
responseObj2
.
getString
(
"openid"
);
}
else
{
throw
new
BadRequestAlertException
(
"QQ服务端获取openid失败!"
,
"UserQQRegisterService"
,
""
);
}
}
// 3.使用access_token以及OpenID来访问和修改用户数据
String
getQQUserInfoUrl
=
"https://graph.qq.com/user/get_user_info?"
+
"access_token="
+
access_token
+
"&oauth_consumer_key="
+
qqAppid
+
"&openid="
+
openid
;
returnObj
=
JSONObject
.
parseObject
(
HttpUtils
.
get
(
getQQUserInfoUrl
,
null
,
null
));
if
(
StringUtils
.
isEmpty
(
returnObj
))
{
throw
new
BadRequestAlertException
(
"QQ服务端返回结果为空!"
,
"UserQQRegisterService"
,
""
);
}
else
if
(
returnObj
.
getInteger
(
"ret"
)!=
0
)
{
throw
new
BadRequestAlertException
(
"获取QQ用户信息失败!"
,
"UserQQRegisterService"
,
""
);
}
else
{
returnObj
.
put
(
"openid"
,
openid
);
}
}
catch
(
UnsupportedEncodingException
e
)
{
throw
new
BadRequestAlertException
(
"连接微信服务端失败!"
,
"UserQQRegisterService"
,
""
);
}
return
returnObj
;
}
}
\ No newline at end of file
ibzuaa-provider/ibzuaa-provider-api/src/main/java/cn/ibizlab/api/rest/extensions/UserDingtalkRegisterResource.java
浏览文件 @
f096060c
...
@@ -47,6 +47,8 @@ public class UserDingtalkRegisterResource {
...
@@ -47,6 +47,8 @@ public class UserDingtalkRegisterResource {
@Value
(
"${ibiz.auth.dingtalk.nickname:}"
)
@Value
(
"${ibiz.auth.dingtalk.nickname:}"
)
private
String
DingtalkNickname
;
private
String
DingtalkNickname
;
private
JSONObject
DingtalkUserInfo
;
// 钉钉用户信息
/**
/**
* 获取钉钉开放平台创建的网站应用appid
* 获取钉钉开放平台创建的网站应用appid
*/
*/
...
@@ -87,6 +89,7 @@ public class UserDingtalkRegisterResource {
...
@@ -87,6 +89,7 @@ public class UserDingtalkRegisterResource {
// 将用户信息存到缓存,供当前人后续请求使用
// 将用户信息存到缓存,供当前人后续请求使用
DingtalkOpenid
=
openid
;
DingtalkOpenid
=
openid
;
DingtalkNickname
=
nickname
;
DingtalkNickname
=
nickname
;
DingtalkUserInfo
=
returnObj
;
}
}
//根据openid查用户
//根据openid查用户
...
@@ -145,7 +148,7 @@ public class UserDingtalkRegisterResource {
...
@@ -145,7 +148,7 @@ public class UserDingtalkRegisterResource {
* @return
* @return
*/
*/
@PostMapping
(
value
=
"/uaa/bindDingtalkToRegister"
)
@PostMapping
(
value
=
"/uaa/bindDingtalkToRegister"
)
public
ResponseEntity
<
JSONObject
>
thirdPart
Register
(
@RequestBody
JSONObject
param
)
{
public
ResponseEntity
<
JSONObject
>
bindDingtalkTo
Register
(
@RequestBody
JSONObject
param
)
{
JSONObject
object
=
new
JSONObject
();
JSONObject
object
=
new
JSONObject
();
// 空校验
// 空校验
String
loginname
=
param
.
getString
(
"loginname"
);
String
loginname
=
param
.
getString
(
"loginname"
);
...
...
ibzuaa-provider/ibzuaa-provider-api/src/main/java/cn/ibizlab/api/rest/extensions/UserQQRegisterResource.java
浏览文件 @
f096060c
package
cn
.
ibizlab
.
api
.
rest
.
extensions
;
package
cn
.
ibizlab
.
api
.
rest
.
extensions
;
import
cn.ibizlab.core.uaa.extensions.service.UserQQRegisterService
;
import
cn.ibizlab.core.uaa.service.ISysPSSystemService
;
import
cn.ibizlab.util.domain.IBZUSER
;
import
cn.ibizlab.util.errors.BadRequestAlertException
;
import
cn.ibizlab.util.helper.CachedBeanCopier
;
import
cn.ibizlab.util.security.AuthTokenUtil
;
import
cn.ibizlab.util.security.AuthenticationUser
;
import
cn.ibizlab.util.service.AuthenticationUserService
;
import
com.alibaba.fastjson.JSONObject
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Qualifier
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.util.StringUtils
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RestController
;
import
org.springframework.web.bind.annotation.RestController
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.UUID
;
@RestController
@RestController
public
class
UserQQRegisterResource
{
public
class
UserQQRegisterResource
{
@Value
(
"${ibiz.auth.qq.appid:}"
)
// qq互联appid
@Autowired
private
UserQQRegisterService
userQQRegisterService
;
@Autowired
private
ISysPSSystemService
iSysPSSystemService
;
@Autowired
private
AuthTokenUtil
jwtTokenUtil
;
@Autowired
@Qualifier
(
"UAAUserService"
)
private
AuthenticationUserService
userDetailsService
;
@Value
(
"${ibiz.auth.qq.appid:101882103}"
)
// qq互联appid
private
String
qqAppId
;
private
String
qqAppId
;
@Value
(
"${ibiz.auth.qq.appkey:}"
)
// qq互联appkey
@Value
(
"${ibiz.auth.qq.appkey:
64ebdde56c1aeeacf0c312b49ddc42e1
}"
)
// qq互联appkey
private
String
qqAppKey
;
private
String
qqAppKey
;
@Value
(
"${ibiz.auth.qq.redirect_uri:}"
)
// qq互联应用回调地址
@Value
(
"${ibiz.auth.qq.redirect_uri:
http://passport.ibizlab.cn/assets/qqRedirect.html
}"
)
// qq互联应用回调地址
private
String
qqRedirectUri
;
private
String
qqRedirectUri
;
@Value
(
"${ibiz.auth.qq.openid:}"
)
private
String
qqOpenid
;
@Value
(
"${ibiz.auth.qq.nickname:}"
)
private
String
qqNickname
;
private
JSONObject
qqUserInfo
;
// qq用户信息
/**
* 获取QQ互联平台创建的网站应用appid
*/
@GetMapping
(
value
=
"/uaa/getQQAppId"
)
public
ResponseEntity
<
JSONObject
>
getQQAppId
()
{
JSONObject
obj
=
new
JSONObject
();
String
appid
=
qqAppId
;
if
(!
StringUtils
.
isEmpty
(
appid
))
{
obj
.
put
(
"appid"
,
appid
);
}
return
ResponseEntity
.
ok
(
obj
);
}
/**
* 根据code查QQ用户
*
* @param param
* @return
*/
@PostMapping
(
value
=
"/uaa/queryQQUserByCode"
)
public
ResponseEntity
<
JSONObject
>
queryQQUserByCode
(
@RequestBody
JSONObject
param
)
{
JSONObject
object
=
new
JSONObject
();
// 空校验
String
code
=
param
.
getString
(
"code"
);
if
(
StringUtils
.
isEmpty
(
code
))
throw
new
BadRequestAlertException
(
"code为空"
,
"UserQQRegisterResource"
,
""
);
// 通过code获取QQ用户信息
String
openid
=
null
;
String
nickname
=
null
;
JSONObject
returnObj
=
userQQRegisterService
.
requestQQUserByCode
(
code
,
qqRedirectUri
,
qqAppId
,
qqAppKey
);
if
(!
StringUtils
.
isEmpty
(
returnObj
)
&&
!
returnObj
.
containsKey
(
"errcode"
))
{
openid
=
returnObj
.
getString
(
"openid"
);
nickname
=
returnObj
.
getString
(
"nickname"
);
// 将用户信息存到缓存,供当前人后续请求使用
qqOpenid
=
openid
;
qqNickname
=
nickname
;
qqUserInfo
=
returnObj
;
}
//根据openid查用户
String
sql
=
"select * from ibzuser where avatar=#{et.avatar}"
;
Map
<
String
,
Object
>
sqlParam
=
new
HashMap
<>();
sqlParam
.
put
(
"avatar"
,
openid
);
List
<
JSONObject
>
select
=
iSysPSSystemService
.
select
(
sql
,
sqlParam
);
// 该QQ用户注册过账号,登录系统
if
(
select
.
size
()
>
0
)
{
IBZUSER
ibzuser
=
select
.
get
(
0
).
toJavaObject
(
IBZUSER
.
class
);
object
.
put
(
"ibzuser"
,
ibzuser
);
// 生成登录token信息
userDetailsService
.
resetByUsername
(
ibzuser
.
getLoginname
());
AuthenticationUser
user
=
userDetailsService
.
loadUserByLogin
(
ibzuser
.
getLoginname
(),
ibzuser
.
getPassword
());
final
String
token
=
jwtTokenUtil
.
generateToken
(
user
);
AuthenticationUser
user2
=
new
AuthenticationUser
();
CachedBeanCopier
.
copy
(
user
,
user2
);
user2
.
setAuthorities
(
null
);
user2
.
setPermissionList
(
null
);
object
.
put
(
"token"
,
token
);
object
.
put
(
"user"
,
user2
);
}
return
ResponseEntity
.
ok
().
body
(
object
);
}
/**
* 根据code获取QQ用户信息
*
* @param param
* @return
*/
@PostMapping
(
value
=
"/uaa/getQQUserInfoByCode"
)
public
ResponseEntity
<
JSONObject
>
getQQUserInfoByCode
(
@RequestBody
JSONObject
param
)
{
JSONObject
object
=
new
JSONObject
();
// 空校验
String
code
=
param
.
getString
(
"code"
);
if
(
StringUtils
.
isEmpty
(
code
))
throw
new
BadRequestAlertException
(
"code为空"
,
"UserQQRegisterResource"
,
""
);
// 通过code获取微信用户信息
String
openid
=
qqOpenid
;
String
nickname
=
qqNickname
;
object
.
put
(
"openid"
,
openid
);
object
.
put
(
"nickname"
,
nickname
);
return
ResponseEntity
.
ok
().
body
(
object
);
}
/**
* 绑定QQ并注册
*
* @param param
* @return
*/
@PostMapping
(
value
=
"/uaa/bindQQtoRegister"
)
public
ResponseEntity
<
JSONObject
>
bindQQtoRegister
(
@RequestBody
JSONObject
param
)
{
JSONObject
object
=
new
JSONObject
();
// 空校验
String
loginname
=
param
.
getString
(
"loginname"
);
String
password
=
param
.
getString
(
"password"
);
String
code
=
param
.
getString
(
"code"
);
String
state
=
param
.
getString
(
"state"
);
String
openid
=
param
.
getString
(
"openid"
);
if
(
StringUtils
.
isEmpty
(
openid
))
{
openid
=
qqOpenid
;
}
String
nickname
=
param
.
getString
(
"nickname"
);
if
(
StringUtils
.
isEmpty
(
nickname
))
{
nickname
=
qqNickname
;
}
if
(
StringUtils
.
isEmpty
(
loginname
))
throw
new
BadRequestAlertException
(
"用户名为空"
,
"UserQQRegisterResource"
,
""
);
if
(
StringUtils
.
isEmpty
(
password
))
throw
new
BadRequestAlertException
(
"密码为空"
,
"UserQQRegisterResource"
,
""
);
if
(
StringUtils
.
isEmpty
(
code
))
throw
new
BadRequestAlertException
(
"QQ授权code为空"
,
"UserQQRegisterResource"
,
""
);
if
(
StringUtils
.
isEmpty
(
state
))
throw
new
BadRequestAlertException
(
"QQ授权state为空"
,
"UserQQRegisterResource"
,
""
);
// 检查用户名是否已被注册
String
sql
=
"select loginname from ibzuser where loginname=#{et.loginname}"
;
Map
<
String
,
Object
>
sqlParam
=
new
HashMap
<>();
sqlParam
.
put
(
"loginname"
,
loginname
);
List
<
JSONObject
>
select
=
iSysPSSystemService
.
select
(
sql
,
sqlParam
);
if
(
select
.
size
()
>
0
)
throw
new
BadRequestAlertException
(
"该用户名已被注册"
,
"UserQQRegisterResource"
,
""
);
IBZUSER
ibzuser
=
new
IBZUSER
();
if
(
StringUtils
.
isEmpty
(
openid
))
{
// 通过code获取微信用户信息
JSONObject
returnObj
=
userQQRegisterService
.
requestQQUserByCode
(
code
,
qqRedirectUri
,
qqAppId
,
qqAppKey
);
if
(!
StringUtils
.
isEmpty
(
returnObj
))
{
if
(
returnObj
.
containsKey
(
"openid"
))
{
// 微信注册
String
uuid
=
UUID
.
randomUUID
().
toString
();
ibzuser
.
setPassword
(
password
);
ibzuser
.
setLoginname
(
loginname
);
ibzuser
.
setUserid
(
"tencent-"
+
uuid
);
ibzuser
.
setPersonname
(
returnObj
.
getString
(
"nickname"
));
ibzuser
.
setNickname
(
returnObj
.
getString
(
"nickname"
));
ibzuser
.
setAvatar
(
returnObj
.
getString
(
"openid"
));
userQQRegisterService
.
toRegister
(
ibzuser
);
}
else
{
throw
new
BadRequestAlertException
(
"获取QQ授权用户相关信息失败!"
,
"UserQQRegisterResource"
,
""
);
}
}
else
{
throw
new
BadRequestAlertException
(
"获取QQ授权用户相关信息失败!"
,
"UserQQRegisterResource"
,
""
);
}
}
else
{
// 已经有微信用户信息直接注册
String
uuid
=
UUID
.
randomUUID
().
toString
();
ibzuser
.
setPassword
(
password
);
ibzuser
.
setLoginname
(
loginname
);
ibzuser
.
setUserid
(
"tencent-"
+
uuid
);
ibzuser
.
setPersonname
(
nickname
);
ibzuser
.
setNickname
(
nickname
);
ibzuser
.
setAvatar
(
openid
);
userQQRegisterService
.
toRegister
(
ibzuser
);
}
// 注册成功,登录系统
if
(!
StringUtils
.
isEmpty
(
ibzuser
))
{
object
.
put
(
"ibzuser"
,
ibzuser
);
}
// 生成登录token信息
userDetailsService
.
resetByUsername
(
ibzuser
.
getLoginname
());
AuthenticationUser
user
=
userDetailsService
.
loadUserByLogin
(
ibzuser
.
getLoginname
(),
ibzuser
.
getPassword
());
final
String
token
=
jwtTokenUtil
.
generateToken
(
user
);
AuthenticationUser
user2
=
new
AuthenticationUser
();
CachedBeanCopier
.
copy
(
user
,
user2
);
user2
.
setAuthorities
(
null
);
user2
.
setPermissionList
(
null
);
object
.
put
(
"token"
,
token
);
object
.
put
(
"user"
,
user2
);
return
ResponseEntity
.
ok
().
body
(
object
);
}
}
}
ibzuaa-provider/ibzuaa-provider-api/src/main/java/cn/ibizlab/api/rest/extensions/UserWechatRegisterResource.java
浏览文件 @
f096060c
...
@@ -48,6 +48,7 @@ public class UserWechatRegisterResource {
...
@@ -48,6 +48,7 @@ public class UserWechatRegisterResource {
@Value
(
"${ibiz.auth.wechat.nickname:}"
)
@Value
(
"${ibiz.auth.wechat.nickname:}"
)
private
String
WechatNickname
;
private
String
WechatNickname
;
private
JSONObject
WechatUserInfo
;
// 微信用户信息
public
static
final
String
TOKEN
=
""
;
// 这里的token要和微信公众测试号网页填写的token一致
public
static
final
String
TOKEN
=
""
;
// 这里的token要和微信公众测试号网页填写的token一致
/**
/**
...
@@ -122,6 +123,7 @@ public class UserWechatRegisterResource {
...
@@ -122,6 +123,7 @@ public class UserWechatRegisterResource {
// 将用户信息存到缓存,供当前人后续请求使用
// 将用户信息存到缓存,供当前人后续请求使用
WechatOpenid
=
openid
;
WechatOpenid
=
openid
;
WechatNickname
=
nickname
;
WechatNickname
=
nickname
;
WechatUserInfo
=
returnObj
;
}
}
//根据openid查用户
//根据openid查用户
...
@@ -181,7 +183,7 @@ public class UserWechatRegisterResource {
...
@@ -181,7 +183,7 @@ public class UserWechatRegisterResource {
* @return
* @return
*/
*/
@PostMapping
(
value
=
"/uaa/bindWechatToRegister"
)
@PostMapping
(
value
=
"/uaa/bindWechatToRegister"
)
public
ResponseEntity
<
JSONObject
>
thirdPart
Register
(
@RequestBody
JSONObject
param
)
{
public
ResponseEntity
<
JSONObject
>
bindWechatTo
Register
(
@RequestBody
JSONObject
param
)
{
JSONObject
object
=
new
JSONObject
();
JSONObject
object
=
new
JSONObject
();
// 空校验
// 空校验
String
loginname
=
param
.
getString
(
"loginname"
);
String
loginname
=
param
.
getString
(
"loginname"
);
...
...
编辑
预览
Markdown
格式
0%
请重试
or
添加新附件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
先完成此消息的编辑!
取消
想要评论请
注册
或
登录