Browse Source

!113 优化

Merge pull request !113 from blue/v_3.0.0
master
blue 1 year ago
committed by Gitee
parent
commit
93aea9930c
No known key found for this signature in database GPG Key ID: 173E9B9CA92EEF8F
  1. 3
      .gitignore
  2. 2
      im-platform/src/main/java/com/bx/implatform/service/impl/UserServiceImpl.java
  3. 2
      im-server/src/main/java/com/bx/imserver/netty/processor/LoginProcessor.java
  4. 29
      im-uniapp/App.vue
  5. 1
      im-uniapp/common/request.js
  6. 3
      im-uniapp/main.js
  7. 3
      im-uniapp/package.json
  8. 25
      im-uniapp/pages/chat/chat-box.vue
  9. 1
      im-uniapp/pages/login/login.vue
  10. 1
      im-uniapp/pages/register/register.vue
  11. 19
      im-uniapp/ssl/cert.crt
  12. 27
      im-uniapp/ssl/cert.key
  13. 10
      im-uniapp/vite.config.js
  14. 19
      im-web/src/ssl/cert.crt
  15. 27
      im-web/src/ssl/cert.key
  16. 4
      im-web/src/view/Home.vue
  17. 19
      im-web/src/view/Login.vue
  18. 7
      im-web/vue.config.js

3
.gitignore

@ -7,8 +7,9 @@
/im-server/target/
/im-platform/target/
/im-client/target/
/im-common/itarget/
/im-common/target/
/im-web/node_modules/
/im-web/dist/
/im-uniapp/node_modules/
/im-uniapp/package-lock.json
/im-uniapp/unpackage/

2
im-platform/src/main/java/com/bx/implatform/service/impl/UserServiceImpl.java

@ -81,7 +81,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
public LoginVO refreshToken(String refreshToken) {
//验证 token
if (!JwtUtil.checkSign(refreshToken, jwtProperties.getRefreshTokenSecret())) {
throw new GlobalException("refreshToken无效或已过期");
throw new GlobalException("您的登陆信息已过期,请重新登陆");
}
String strJson = JwtUtil.getInfo(refreshToken);
Long userId = JwtUtil.getUserId(refreshToken);

2
im-server/src/main/java/com/bx/imserver/netty/processor/LoginProcessor.java

@ -34,7 +34,7 @@ public class LoginProcessor extends AbstractMessageProcessor<IMLoginInfo> {
private String accessTokenSecret;
@Override
public synchronized void process(ChannelHandlerContext ctx, IMLoginInfo loginInfo) {
public void process(ChannelHandlerContext ctx, IMLoginInfo loginInfo) {
if (!JwtUtil.checkSign(loginInfo.getAccessToken(), accessTokenSecret)) {
ctx.channel().close();
log.warn("用户token校验不通过,强制下线,token:{}", loginInfo.getAccessToken());

29
im-uniapp/App.vue

@ -307,11 +307,24 @@
// this.audioTip.src = "/static/audio/tip.wav";
// this.audioTip.play();
},
isExpired(loginInfo) {
if (!loginInfo || !loginInfo.expireTime) {
return true;
}
return loginInfo.expireTime < new Date().getTime();
refreshToken(loginInfo) {
return new Promise((resolve, reject) => {
if (!loginInfo || !loginInfo.refreshToken) {
reject();
}
http({
url: '/refreshToken',
method: 'PUT',
header: {
refreshToken: loginInfo.refreshToken
}
}).then((newLoginInfo) => {
uni.setStorageSync("loginInfo", newLoginInfo)
resolve()
}).catch((e) => {
reject(e)
})
})
},
reconnectWs() {
// 退
@ -348,21 +361,21 @@
this.$mountStore();
//
let loginInfo = uni.getStorageSync("loginInfo")
if (!this.isExpired(loginInfo)) {
this.refreshToken(loginInfo).then(() => {
//
this.init();
//
uni.switchTab({
url: "/pages/chat/chat"
})
} else {
}).catch(() => {
//
// #ifdef H5
uni.navigateTo({
url: "/pages/login/login"
})
// #endif
}
})
}
}
</script>

1
im-uniapp/common/request.js

@ -42,7 +42,6 @@ const request = (options) => {
return;
}
let newInfo = res.data.data;
newInfo.expireTime = new Date().getTime() + newInfo.refreshTokenExpiresIn*1000;
uni.setStorageSync("loginInfo", newInfo);
requestList.forEach(cb => cb());
requestList = [];

3
im-uniapp/main.js

@ -14,6 +14,9 @@ import useGroupStore from '@/store/groupStore.js'
import useConfigStore from '@/store/configStore.js'
import useUserStore from '@/store/userStore.js'
//import VConsole from 'vconsole'
//new VConsole();
// #ifdef H5
import * as recorder from './common/recorder-h5';
// #endif

3
im-uniapp/package.json

@ -5,6 +5,7 @@
},
"dependencies": {
"js-audio-recorder": "^1.0.7",
"pinyin-pro": "^3.23.1"
"pinyin-pro": "^3.23.1",
"vconsole": "^3.15.1"
}
}

25
im-uniapp/pages/chat/chat-box.vue

@ -45,7 +45,7 @@
@touchend.prevent="sendTextMessage()" size="mini">发送</button>
</view>
<view class="chat-tab-bar" v-show="chatTabBox!='none' ||showKeyBoard " :style="{height:`${keyboardHeight}px`}">
<view class="chat-tab-bar" v-show="chatTabBox!='none' || (showKeyBoard && !isH5) " :style="{height:`${keyboardHeight}px`}">
<view v-if="chatTabBox == 'tools'" class="chat-tools">
<view class="chat-tools-item">
<image-upload :maxCount="9" sourceType="album" :onBefore="onUploadImageBefore"
@ -136,7 +136,8 @@
needScrollToBottom: false, //
showMinIdx: 0, // showMinIdx
reqQueue: [], //
isSending: false //
isSending: false, //
isH5: false // h5
}
},
methods: {
@ -645,6 +646,22 @@
})
}
},
listenKeyBoardForH5() {
// H5TextArea@keyboardheightchange
//
let initHeight = window.innerHeight;
window.addEventListener('resize', () => {
let keyboardHeight = initHeight - window.innerHeight;
if (keyboardHeight > 0) {
this.keyboardHeight = keyboardHeight - 20;
this.showKeyBoard = true;
this.switchChatTabBox('none', false)
this.scrollToBottom();
} else {
this.showKeyBoard = false;
}
});
},
generateId() {
// id
return String(new Date().getTime()) + String(Math.floor(Math.random() * 1000));
@ -721,6 +738,10 @@
}
},
onLoad(options) {
// #ifdef H5
this.isH5 = true;
this.listenKeyBoardForH5();
// #endif
//
this.chat = this.chatStore.chats[options.chatIdx];
// 20

1
im-uniapp/pages/login/login.vue

@ -51,7 +51,6 @@
console.log("登录成功,自动跳转到聊天页面...")
uni.setStorageSync("userName", this.loginForm.userName);
uni.setStorageSync("password", this.loginForm.password);
loginInfo.expireTime = new Date().getTime() + loginInfo.refreshTokenExpiresIn * 1000;
uni.setStorageSync("loginInfo", loginInfo);
// App.vue
getApp().$vm.init()

1
im-uniapp/pages/register/register.vue

@ -96,7 +96,6 @@
console.log("登录成功,自动跳转到聊天页面...")
uni.setStorageSync("userName", loginForm.userName);
uni.setStorageSync("password", loginForm.password);
loginInfo.expireTime = new Date().getTime() + loginInfo.refreshTokenExpiresIn * 1000;
uni.setStorageSync("loginInfo", loginInfo);
// App.vue
getApp().init()

19
im-uniapp/ssl/cert.crt

@ -1,19 +0,0 @@
-----BEGIN CERTIFICATE-----
MIIDIjCCAgoCCQCw2aUcFWVX4jANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJj
bjEMMAoGA1UECAwDZ3oIMQswCQYDVQQHDAJnejEcMBoGA1UECgwTRGVmYXVsdCBD
b21wYW55IEx0ZDELMAkGA1UEAwwCYngwHhcNMjQwNDI4MTQzNTIzWhcNMzQwNDI2
MTQzNTIzWjBTMQswCQYDVQQGEwJjbjEMMAoGA1UECAwDZ3oIMQswCQYDVQQHDAJn
ejEcMBoGA1UECgwTRGVmYXVsdCBDb21wYW55IEx0ZDELMAkGA1UEAwwCYngwggEi
MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDqZXvAXwH0xA5TSposclmZXxox
pfT5F0eSOaxRE2NFfUbHoCrCHYV8pPAIy9S6vbG5Bbh4eprv4smH4lHWfa+81nI8
sKizmJ3jdFSzCRrIHzbdlQsY0Vg+VasyoWjyjVDJeDzz/G/vQUeb19+kXlHVDETt
J7sZEqNyDxewsiDBUf2f+fvsgtIWakuD7CGe/P9e6gHz0D++GezOUKgUtL3eUkCa
pI8+ecoAG1ud/3MtRvGyq9FwwsQwsscu1YVmt7fRhuGbcM3/bog1VXe/to/msKUC
gCZjWS82D9sw0ikEAn7jagKJu1ezybmN9/JljhpC8UgZnqPT01LzfFvDECN7AgMB
AAEwDQYJKoZIhvcNAQELBQADggEBAMnjP0ANnPSTbwSCufVXwJgX5tWcSGjezFAY
Du+rbdUipn2O4/NCkTTPpDbrDKRET2zDUrxJOXu/UZBS8lreowtUQCk8lX7kH5oj
72lmcOFgWUyk8ULTPzrl0sdaQ8mhsvf+vHO9Ww/+RqQlzlr+eMuamMm1wDrbczWK
z1tq2QQuIhxf1pIznHag5eWui6Z0RIRQaozbXWU6VuSf703CNixxdZsdNWHpdiJW
vj8LewFaSmGp6HzwMX6/Kx/kocqpeeCZ6CharePv2C5bC5Kd5KVFCHnp5xbcZKUq
8Q7CSH5WKV3QkoFKGPz1qh17qeryxgoqLQXLapptNKOS76QBivM=
-----END CERTIFICATE-----

27
im-uniapp/ssl/cert.key

@ -1,27 +0,0 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEA6mV7wF8B9MQOU0qaLHJZmV8aMaX0+RdHkjmsURNjRX1Gx6Aq
wh2FfKTwCMvUur2xuQW4eHqa7+LJh+JR1n2vvNZyPLCos5id43RUswkayB823ZUL
GNFYPlWrMqFo8o1QyXg88/xv70FHm9ffpF5R1QxE7Se7GRKjcg8XsLIgwVH9n/n7
7ILSFmpLg+whnvz/XuoB89A/vhnszlCoFLS93lJAmqSPPnnKABtbnf9zLUbxsqvR
cMLEMLLHLtWFZre30Ybhm3DN/26INVV3v7aP5rClAoAmY1kvNg/bMNIpBAJ+42oC
ibtXs8m5jffyZY4aQvFIGZ6j09NS83xbwxAjewIDAQABAoIBAQC8uyPunFE15Rrn
w9zpxtUQIjw0F71tR2pQefGegm7fR+TS3csv65dM6n1/h6ftCMpuAQYstAPG/aNp
rzhX7XGwKjdnWJMtsMgImeWNFtqiokeKGPULcZyM7GvhY4feLR0Ma60gg3UZf0WK
XUJs1aksUym4jtIeeRxzvWVE19h57uEG1fJM3Rf0OFhb1iUYVjtW4iW+RTtc1mpb
hoda+8P3Tua33WuhSYtFusDx35ZM2WDgYlgeMxm94JUFUUOIhiggasYNsu1YmQl4
AqhRncGn6p/gZVQsjkeCtmTIyD+igqulI/OkqI3DmFCzFSoSXLFE7HZ4pL500Vxn
aOvOYRCZAoGBAP1Aopr0scpLzt7Lei+dbLc3wxziCyeNtVDvswFS93Lx1bnSJw4m
0PAvQGoOdeiPI1vmsdDJdV5R0Vmbybyz7JPiTyUyti4p909s5AtpPqdLptjuO2ge
2b1YD/HnubL0omlejKu5fKg3zaPqhr/Z8f6WfYSsm1dV10arSBj4JdvVAoGBAOzw
epHXXnAfaC/cEOUOOVe5o/MNxIYYfJkG6VtmB3v+oY0/C+SyUbkY3Qu5yjCDBYhP
rLVr1+TiLE3Sqj+ndRvICy8T6Iv+hA2ijvJiNVAjtqkwM5YOMJdFYI6fem1N+Hkv
ipOQUWFmwUBAKQm4BSGtNdbL89KTTV1tMubH4joPAoGBANRGmkWSd3gepO8A1ZEV
vmuw1N3f5wOnd2S5Fm00su9pIAGa0lu9U4MPyEldh52AZV4B9+gPBU8i+3zF5YpD
sjifCEIgyK3XRVIQ7vFVrUujUN4iii8TNOXN68eTuYb0ITJ7KyRB3OhPphIQYhRr
xbjlQZ6045yH+mNk7JDpZyplAoGAVF4sxtGRZwtH5gLOYUF3Wa1Ym6tDVxxRAYxc
e5cRAy3gCJNygLSeNPKNgydcv3ln9umn7dHAxldivzNMO+483O+WS+Ui4PZ3vwMr
M1OU+Dw/Rm9LbxsOYk7p2t8ekN06pKwxA+pXj/8uwNoXwsYrzZoHmbx1zX12BtZj
UZnLDDECgYBpvFK+cntSzE+qpsvxYnosSswcJvmGoOzBCE2aWebwXp0QOwjg/Zh/
VR5Mc8L8xHpcpUJZXaTmyeouwc2XPfBvvbWlGZFh7zBn2dKCNxT62fPXKFX2rBgE
k4f033ToXD6Lv0JT94JfjS0GB+zzHjfcS/K8Lr3d3lUmkiI1LFD5GA==
-----END RSA PRIVATE KEY-----

10
im-uniapp/vite.config.js

@ -13,13 +13,7 @@ export default defineConfig({
logLevel: 'debug',
target: 'http://127.0.0.1:8888',
changeOrigin: true
},
},
// 音视频功能需要ssl证书,如需调试请打开注释
// https: {
// cert: fs.readFileSync(path.join(__dirname, 'ssl/cert.crt')),
// key: fs.readFileSync(path.join(__dirname, 'ssl/cert.key'))
// }
}
}
}
})

19
im-web/src/ssl/cert.crt

@ -1,19 +0,0 @@
-----BEGIN CERTIFICATE-----
MIIDIjCCAgoCCQCw2aUcFWVX4jANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJj
bjEMMAoGA1UECAwDZ3oIMQswCQYDVQQHDAJnejEcMBoGA1UECgwTRGVmYXVsdCBD
b21wYW55IEx0ZDELMAkGA1UEAwwCYngwHhcNMjQwNDI4MTQzNTIzWhcNMzQwNDI2
MTQzNTIzWjBTMQswCQYDVQQGEwJjbjEMMAoGA1UECAwDZ3oIMQswCQYDVQQHDAJn
ejEcMBoGA1UECgwTRGVmYXVsdCBDb21wYW55IEx0ZDELMAkGA1UEAwwCYngwggEi
MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDqZXvAXwH0xA5TSposclmZXxox
pfT5F0eSOaxRE2NFfUbHoCrCHYV8pPAIy9S6vbG5Bbh4eprv4smH4lHWfa+81nI8
sKizmJ3jdFSzCRrIHzbdlQsY0Vg+VasyoWjyjVDJeDzz/G/vQUeb19+kXlHVDETt
J7sZEqNyDxewsiDBUf2f+fvsgtIWakuD7CGe/P9e6gHz0D++GezOUKgUtL3eUkCa
pI8+ecoAG1ud/3MtRvGyq9FwwsQwsscu1YVmt7fRhuGbcM3/bog1VXe/to/msKUC
gCZjWS82D9sw0ikEAn7jagKJu1ezybmN9/JljhpC8UgZnqPT01LzfFvDECN7AgMB
AAEwDQYJKoZIhvcNAQELBQADggEBAMnjP0ANnPSTbwSCufVXwJgX5tWcSGjezFAY
Du+rbdUipn2O4/NCkTTPpDbrDKRET2zDUrxJOXu/UZBS8lreowtUQCk8lX7kH5oj
72lmcOFgWUyk8ULTPzrl0sdaQ8mhsvf+vHO9Ww/+RqQlzlr+eMuamMm1wDrbczWK
z1tq2QQuIhxf1pIznHag5eWui6Z0RIRQaozbXWU6VuSf703CNixxdZsdNWHpdiJW
vj8LewFaSmGp6HzwMX6/Kx/kocqpeeCZ6CharePv2C5bC5Kd5KVFCHnp5xbcZKUq
8Q7CSH5WKV3QkoFKGPz1qh17qeryxgoqLQXLapptNKOS76QBivM=
-----END CERTIFICATE-----

27
im-web/src/ssl/cert.key

@ -1,27 +0,0 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEA6mV7wF8B9MQOU0qaLHJZmV8aMaX0+RdHkjmsURNjRX1Gx6Aq
wh2FfKTwCMvUur2xuQW4eHqa7+LJh+JR1n2vvNZyPLCos5id43RUswkayB823ZUL
GNFYPlWrMqFo8o1QyXg88/xv70FHm9ffpF5R1QxE7Se7GRKjcg8XsLIgwVH9n/n7
7ILSFmpLg+whnvz/XuoB89A/vhnszlCoFLS93lJAmqSPPnnKABtbnf9zLUbxsqvR
cMLEMLLHLtWFZre30Ybhm3DN/26INVV3v7aP5rClAoAmY1kvNg/bMNIpBAJ+42oC
ibtXs8m5jffyZY4aQvFIGZ6j09NS83xbwxAjewIDAQABAoIBAQC8uyPunFE15Rrn
w9zpxtUQIjw0F71tR2pQefGegm7fR+TS3csv65dM6n1/h6ftCMpuAQYstAPG/aNp
rzhX7XGwKjdnWJMtsMgImeWNFtqiokeKGPULcZyM7GvhY4feLR0Ma60gg3UZf0WK
XUJs1aksUym4jtIeeRxzvWVE19h57uEG1fJM3Rf0OFhb1iUYVjtW4iW+RTtc1mpb
hoda+8P3Tua33WuhSYtFusDx35ZM2WDgYlgeMxm94JUFUUOIhiggasYNsu1YmQl4
AqhRncGn6p/gZVQsjkeCtmTIyD+igqulI/OkqI3DmFCzFSoSXLFE7HZ4pL500Vxn
aOvOYRCZAoGBAP1Aopr0scpLzt7Lei+dbLc3wxziCyeNtVDvswFS93Lx1bnSJw4m
0PAvQGoOdeiPI1vmsdDJdV5R0Vmbybyz7JPiTyUyti4p909s5AtpPqdLptjuO2ge
2b1YD/HnubL0omlejKu5fKg3zaPqhr/Z8f6WfYSsm1dV10arSBj4JdvVAoGBAOzw
epHXXnAfaC/cEOUOOVe5o/MNxIYYfJkG6VtmB3v+oY0/C+SyUbkY3Qu5yjCDBYhP
rLVr1+TiLE3Sqj+ndRvICy8T6Iv+hA2ijvJiNVAjtqkwM5YOMJdFYI6fem1N+Hkv
ipOQUWFmwUBAKQm4BSGtNdbL89KTTV1tMubH4joPAoGBANRGmkWSd3gepO8A1ZEV
vmuw1N3f5wOnd2S5Fm00su9pIAGa0lu9U4MPyEldh52AZV4B9+gPBU8i+3zF5YpD
sjifCEIgyK3XRVIQ7vFVrUujUN4iii8TNOXN68eTuYb0ITJ7KyRB3OhPphIQYhRr
xbjlQZ6045yH+mNk7JDpZyplAoGAVF4sxtGRZwtH5gLOYUF3Wa1Ym6tDVxxRAYxc
e5cRAy3gCJNygLSeNPKNgydcv3ln9umn7dHAxldivzNMO+483O+WS+Ui4PZ3vwMr
M1OU+Dw/Rm9LbxsOYk7p2t8ekN06pKwxA+pXj/8uwNoXwsYrzZoHmbx1zX12BtZj
UZnLDDECgYBpvFK+cntSzE+qpsvxYnosSswcJvmGoOzBCE2aWebwXp0QOwjg/Zh/
VR5Mc8L8xHpcpUJZXaTmyeouwc2XPfBvvbWlGZFh7zBn2dKCNxT62fPXKFX2rBgE
k4f033ToXD6Lv0JT94JfjS0GB+zzHjfcS/K8Lr3d3lUmkiI1LFD5GA==
-----END RSA PRIVATE KEY-----

4
im-web/src/view/Home.vue

@ -178,7 +178,6 @@
})
},
insertPrivateMessage(friend, msg) {
let chatInfo = {
type: 'PRIVATE',
targetId: friend.id,
@ -238,7 +237,6 @@
})
},
insertGroupMessage(group, msg) {
let chatInfo = {
type: 'GROUP',
targetId: group.id,
@ -257,7 +255,6 @@
},
handleSystemMessage(msg){
//
if (msg.type == this.$enums.MESSAGE_TYPE.USER_BANNED) {
this.$wsApi.close(3000);
this.$alert("您的账号已被管理员封禁,原因:"+ msg.content, "账号被封禁", {
@ -287,7 +284,6 @@
audio.src = url;
audio.play();
}
},
showSetting() {
this.showSettingDialog = true;

19
im-web/src/view/Login.vue

@ -123,7 +123,6 @@
resetForm(formName) {
this.$refs[formName].resetFields();
},
// cookie
getCookie(name) {
let reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)");
let arr = document.cookie.match(reg)
@ -132,22 +131,10 @@
}
return '';
},
// cookie,vue便
setCookie(name, value, expiredays) {
var exdate = new Date();
exdate.setDate(exdate.getDate() + expiredays);
document.cookie = name + "=" + escape(value) + ((expiredays == null) ? "" : ";expires=" + exdate
.toGMTString());
},
// cookie
delCookie(name) {
var exp = new Date();
exp.setTime(exp.getTime() - 1);
var cval = this.getCookie(name);
if (cval != null) {
document.cookie = name + "=" + cval + ";expires=" + exp.toGMTString();
}
setCookie(name, value) {
document.cookie = name + "=" + escape(value);
}
},
mounted() {
this.loginForm.userName = this.getCookie("username");

7
im-web/vue.config.js

@ -12,12 +12,7 @@ module.exports = {
'^/api': ''
}
}
},
// 音视频功能需要ssl证书,如需调试请打开注释
// https: {
// cert: fs.readFileSync(path.join(__dirname, 'src/ssl/cert.crt')),
// key: fs.readFileSync(path.join(__dirname, 'src/ssl/cert.key'))
// }
}
}
}
Loading…
Cancel
Save