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)
   }