You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by al...@apache.org on 2021/02/07 02:45:30 UTC
[dubbo-admin] branch develop updated: 易用性方面的一点优化 (#673)
This is an automated email from the ASF dual-hosted git repository.
albumenj pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/dubbo-admin.git
The following commit(s) were added to refs/heads/develop by this push:
new 89d9377 易用性方面的一点优化 (#673)
89d9377 is described below
commit 89d937710254c11431f33d19128414250a69ce00
Author: sadeychai <30...@users.noreply.github.com>
AuthorDate: Sun Feb 7 10:45:19 2021 +0800
易用性方面的一点优化 (#673)
* 增加用户token有效时长配置
* 修复登录根路径时不校验登录态问题
* 优化登录后及登录态失效后的页面跳转
* Update UserController.java
* Update AuthInterceptor.java
* Update application.properties
* Update http-common.js
* Update http-common.js
* Update Login.vue
* Update http-common.js
Co-authored-by: chaihaipeng <ch...@sogou-inc.com>
---
.../java/org/apache/dubbo/admin/controller/UserController.java | 6 +++++-
.../java/org/apache/dubbo/admin/interceptor/AuthInterceptor.java | 3 +--
dubbo-admin-server/src/main/resources/application.properties | 3 +++
dubbo-admin-ui/src/Login.vue | 8 +++++++-
dubbo-admin-ui/src/components/http-common.js | 7 ++++++-
5 files changed, 22 insertions(+), 5 deletions(-)
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/UserController.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/UserController.java
index 4cfb3f1..84a7940 100644
--- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/UserController.java
+++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/UserController.java
@@ -43,6 +43,10 @@ public class UserController {
private String rootUserName;
@Value("${admin.root.user.password:}")
private String rootUserPassword;
+ //make session timeout configurable
+ //default to be an hour:1000 * 60 * 60
+ @Value("${admin.check.sessionTimeoutMilli:3600000}")
+ private long sessionTimeoutMilli;
@RequestMapping(value = "/login", method = RequestMethod.GET)
public String login(@RequestParam String userName, @RequestParam String password) {
@@ -69,7 +73,7 @@ public class UserController {
@Scheduled(cron= "0 5 * * * ?")
public void clearExpiredToken() {
- tokenMap.entrySet().removeIf(entry -> entry.getValue() == null || System.currentTimeMillis() - entry.getValue().getLastUpdateTime() > 1000 * 60 * 15);
+ tokenMap.entrySet().removeIf(entry -> entry.getValue() == null || System.currentTimeMillis() - entry.getValue().getLastUpdateTime() > sessionTimeoutMilli);
}
public static class User {
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/interceptor/AuthInterceptor.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/interceptor/AuthInterceptor.java
index a9cf6cc..ecc6e57 100644
--- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/interceptor/AuthInterceptor.java
+++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/interceptor/AuthInterceptor.java
@@ -35,12 +35,11 @@ import java.lang.reflect.Method;
public class AuthInterceptor extends HandlerInterceptorAdapter {
@Value("${admin.check.authority:true}")
private boolean checkAuthority;
-
+
//make session timeout configurable
//default to be an hour:1000 * 60 * 60
@Value("${admin.check.sessionTimeoutMilli:3600000}")
private long sessionTimeoutMilli;
-
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (!(handler instanceof HandlerMethod) || !checkAuthority) {
diff --git a/dubbo-admin-server/src/main/resources/application.properties b/dubbo-admin-server/src/main/resources/application.properties
index a34f434..01e2943 100644
--- a/dubbo-admin-server/src/main/resources/application.properties
+++ b/dubbo-admin-server/src/main/resources/application.properties
@@ -31,6 +31,9 @@ admin.registry.group=dubbo
admin.config-center.group=dubbo
admin.metadata-report.group=dubbo
+#session timeout, default is one hour
+admin.check.sessionTimeoutMilli=3600000
+
#namespace used by nacos
admin.registry.namespace=public
admin.config-center.namespace=public
diff --git a/dubbo-admin-ui/src/Login.vue b/dubbo-admin-ui/src/Login.vue
index e462bf1..c9e18f0 100644
--- a/dubbo-admin-ui/src/Login.vue
+++ b/dubbo-admin-ui/src/Login.vue
@@ -85,7 +85,13 @@
if (response.status === 200 && response.data) {
localStorage.setItem('token', response.data)
localStorage.setItem('username', userName)
- this.$router.replace('/')
+ //login and redirect
+ let redirect = this.$route.query.redirect
+ if(redirect) {
+ this.$router.replace(redirect)
+ } else {
+ this.$router.replace('/')
+ }
} else {
vm.$notify('Username or password error,please try again')
}
diff --git a/dubbo-admin-ui/src/components/http-common.js b/dubbo-admin-ui/src/components/http-common.js
index 00a3967..30946a8 100644
--- a/dubbo-admin-ui/src/components/http-common.js
+++ b/dubbo-admin-ui/src/components/http-common.js
@@ -41,7 +41,12 @@ instance.interceptors.response.use((response) => {
localStorage.removeItem('token')
localStorage.removeItem('username')
Vue.prototype.$notify.error(i18n.t('authFailed'))
- router.push({ path: 'login' })
+ let paths = location.href.split('#')
+ if (paths.length > 1 && paths[1].startsWith('/login')) {
+ // avoid splicing multiple redirects
+ return
+ }
+ router.push({path: 'login', query: {redirect: paths.length === 1 ? '/' : paths[1]}})
} else if (error.response.status >= HttpStatus.BAD_REQUEST) {
Vue.prototype.$notify.error(error.response.data.message)
}