Browse Source

replace base path

AE86 4 years ago
parent
commit
8da8d78e51

+ 46 - 52
dbsyncer-web/src/main/java/org/dbsyncer/web/config/WebAppConfig.java

@@ -52,6 +52,11 @@ public class WebAppConfig extends WebSecurityConfigurerAdapter implements Authen
      */
     private static final String LOGIN_PAGE = "/login.html";
 
+    /**
+     * 404页面
+     */
+    private static final String ERROR_404_PAGE = "/404.html";
+
     /**
      * 每个帐号允许同时登录会话数, 默认同一个帐号只能在一个地方登录
      */
@@ -63,35 +68,6 @@ public class WebAppConfig extends WebSecurityConfigurerAdapter implements Authen
     @Autowired
     private ConfigService configService;
 
-    @Override
-    protected void configure(HttpSecurity http) throws Exception {
-//        http.csrf().disable()
-//                .authorizeRequests()
-//                .anyRequest().permitAll()
-//                .and().logout().permitAll();
-
-        http.csrf().disable()
-                .authorizeRequests()
-                .antMatchers("/css/**", "/js/**", "/img/**", "/config/**", "/plugins/**").permitAll().anyRequest()
-                .authenticated()
-                .and()
-                .formLogin()
-                .loginProcessingUrl(LOGIN)
-                .loginPage(LOGIN_PAGE)
-                .successHandler(loginSuccessHandler())
-                .failureHandler(loginFailHandler())
-                .permitAll()
-                .and()
-                .logout()
-                .permitAll()
-                .invalidateHttpSession(true).deleteCookies("JSESSIONID").logoutSuccessHandler(logoutHandler())
-                .and()
-                .sessionManagement()
-                .sessionFixation()
-                .migrateSession()
-                .maximumSessions(MAXIMUM_SESSIONS);
-    }
-
     /**
      * 登录失败
      *
@@ -124,11 +100,6 @@ public class WebAppConfig extends WebSecurityConfigurerAdapter implements Authen
         };
     }
 
-    /**
-     * 注销
-     *
-     * @return
-     */
     @Bean
     public LogoutSuccessHandler logoutHandler() {
         return new LogoutSuccessHandler() {
@@ -146,13 +117,35 @@ public class WebAppConfig extends WebSecurityConfigurerAdapter implements Authen
         };
     }
 
-    /**
-     * 认证
-     *
-     * @param authentication
-     * @return
-     * @throws AuthenticationException
-     */
+    @Override
+    protected void configure(HttpSecurity http) throws Exception {
+        //http.csrf().disable()
+        //        .authorizeRequests()
+        //        .anyRequest().permitAll()
+        //        .and().logout().permitAll();
+
+        http.csrf().disable()
+                .authorizeRequests()
+                .antMatchers("/css/**", "/js/**", "/img/**", "/config/**", "/plugins/**").permitAll().anyRequest()
+                .authenticated()
+                .and()
+                .formLogin()
+                .loginProcessingUrl(LOGIN)
+                .loginPage(LOGIN_PAGE)
+                .successHandler(loginSuccessHandler())
+                .failureHandler(loginFailHandler())
+                .permitAll()
+                .and()
+                .logout()
+                .permitAll()
+                .invalidateHttpSession(true).deleteCookies("JSESSIONID").logoutSuccessHandler(logoutHandler())
+                .and()
+                .sessionManagement()
+                .sessionFixation()
+                .migrateSession()
+                .maximumSessions(MAXIMUM_SESSIONS);
+    }
+
     @Override
     public Authentication authenticate(Authentication authentication) throws AuthenticationException {
         // 获取表单用户名
@@ -172,6 +165,18 @@ public class WebAppConfig extends WebSecurityConfigurerAdapter implements Authen
         return true;
     }
 
+    @Override
+    public void sessionCreated(HttpSessionEvent se) {
+        logger.debug("创建会话:{}", se.getSession().getId());
+        int maxInactiveInterval = se.getSession().getMaxInactiveInterval();
+        logger.debug(String.valueOf(maxInactiveInterval));
+    }
+
+    @Override
+    public void sessionDestroyed(HttpSessionEvent se) {
+        logger.debug("销毁会话:{}", se.getSession().getId());
+    }
+
     /**
      * 响应
      *
@@ -195,15 +200,4 @@ public class WebAppConfig extends WebSecurityConfigurerAdapter implements Authen
         }
     }
 
-    @Override
-    public void sessionCreated(HttpSessionEvent se) {
-        logger.debug("创建会话:{}", se.getSession().getId());
-        int maxInactiveInterval = se.getSession().getMaxInactiveInterval();
-        logger.debug(String.valueOf(maxInactiveInterval));
-    }
-
-    @Override
-    public void sessionDestroyed(HttpSessionEvent se) {
-        logger.debug("销毁会话:{}", se.getSession().getId());
-    }
 }

+ 9 - 1
dbsyncer-web/src/main/java/org/dbsyncer/web/controller/DefaultController.java

@@ -1,5 +1,9 @@
 package org.dbsyncer.web.controller;
 
+import org.springframework.boot.web.server.ErrorPage;
+import org.springframework.boot.web.server.ErrorPageRegistrar;
+import org.springframework.boot.web.server.ErrorPageRegistry;
+import org.springframework.http.HttpStatus;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -8,7 +12,7 @@ import javax.servlet.http.HttpServletRequest;
 
 @Controller
 @RequestMapping("/")
-public class DefaultController {
+public class DefaultController implements ErrorPageRegistrar {
 
     @RequestMapping("")
     public String index(HttpServletRequest request, ModelMap model) {
@@ -20,4 +24,8 @@ public class DefaultController {
         return "login.html";
     }
 
+    @Override
+    public void registerErrorPages(ErrorPageRegistry registry) {
+        registry.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/404.html"));
+    }
 }

+ 1 - 0
dbsyncer-web/src/main/resources/application.properties

@@ -6,6 +6,7 @@ dbsyncer.web.login.username=admin
 dbsyncer.web.login.password=0DPiKuNIrrVmD8IUCuw1hQxNqZc=
 dbsyncer.web.cache.connector.timeout=5
 server.servlet.session.timeout=1800
+server.servlet.context-path=/
 
 #storage
 dbsyncer.storage.id=1

+ 25 - 0
dbsyncer-web/src/main/resources/public/404.html

@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:th="http://www.thymeleaf.org" lang="zh-CN">
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+    <title>DBSyncer 404</title>
+    <link type="image/x-icon" rel="icon" th:href="@{/img/sync.ico}"/>
+    <style>
+    body {margin: 0;padding: 0;width: 100%;height: 100%;color: #B0BEC5;display: table;font-weight: 100;font-family: 'Lato';}
+    .container {text-align: center;display: table-cell;vertical-align: middle;}
+    .content {text-align: center;display: inline-block;}
+    .title {font-size: 42px;margin-bottom: 40px;}
+    .content p a { color:#B0BEC5; text-decoration:none;}
+    .content p a:hover { color:#333; text-decoration:underline;}
+    </style>
+</head>
+<body>
+<div class="container">
+    <div class="content">
+        <div class="title">404 很抱歉,您查看的页面找不到了!</div>
+        <p>》<a style="cursor:pointer" onclick="history.back()">返回上一页面</a></p>
+    </div>
+</div>
+</body>
+</html>

+ 1 - 1
dbsyncer-web/src/main/resources/public/login.html

@@ -4,7 +4,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>dbsyncer</title>
-<link type="image/x-icon" rel="icon" th:href="@{img}"/>
+<link type="image/x-icon" rel="icon" th:href="@{/img/sync.ico}"/>
 <link type="text/css" rel="stylesheet" th:href="@{/css/login/login.css}"/>
 </head>
 <body>

+ 35 - 16
dbsyncer-web/src/main/resources/static/js/common.js

@@ -1,6 +1,7 @@
 // 获取项目地址
 var $location = (window.location + '').split('/');
-var $basePath = $location[0] + '//' + $location[2];
+var $path = document.location.pathname;
+var $basePath = $location[0] + '//' + $location[2] + $path.substr(0, $path.substr(1).indexOf("/")+1);
 // 全局内容区域
 var $initContainer = $("#initContainer");
 
@@ -17,14 +18,7 @@ function bootGrowl(data, type) {
 // 跳转主页
 function backIndexPage() {
     // 加载页面
-    $initContainer.load("/index?refresh=" + new Date().getTime());
-}
-
-// 跳转菜单
-function activeMenu($url){
-    var $menu = $('#menu > li');
-    $menu.removeClass('active');
-    $menu.find("a[url='" + $url + "']").parent().addClass('active');
+    doLoader("/index?refresh=" + new Date().getTime());
 }
 
 // 美化SQL
@@ -57,10 +51,16 @@ $.fn.serializeJson = function () {
     return o;
 };
 
+// 全局加载页面
+function doLoader(url){
+    // 加载页面
+    $initContainer.load($basePath + url);
+}
+
 // 全局Ajax post
 function doPoster(url, params, action) {
     $.loadingT(true);
-    $.post(url, params, function (data) {
+    $.post($basePath + url, params, function (data) {
         $.loadingT(false);
         // 异常请求:302
         if (!(data instanceof Object)) {
@@ -77,13 +77,32 @@ function doPoster(url, params, action) {
     });
 }
 
+// 全局Ajax get
+function doGetter(url, params, action, loading) {
+    if(loading == undefined || loading == true){
+        $.loadingT(true);
+    }
+    $.get($basePath + url, params, function (data) {
+        $.loadingT(false);
+        action(data);
+    }).error(function (xhr, status, info) {
+        $.loadingT(false);
+        bootGrowl("访问异常,请刷新或重试.", "danger");
+    });
+}
+
+// 全局Ajax get, 不显示加载动画
+function doGetWithoutLoading(url, params, action) {
+    doGetter(url, params, action, false);
+}
+
 // ******************* 常量配置 ***************************
 // 连接器类型
 var ConnectorConstant = {
-    "Mysql" : "/connector/page/addMysql",
-    "Oracle" : "/connector/page/addOracle",
-    "SqlServer" : "/connector/page/addSqlServer",
-    "DqlMysql" : "/connector/page/addDqlMysql",
-    "DqlOracle" : "/connector/page/addDqlOracle",
-    "Redis" : "/connector/page/addRedis"
+    "Mysql" : $basePath + "/connector/page/addMysql",
+    "Oracle" : $basePath + "/connector/page/addOracle",
+    "SqlServer" : $basePath + "/connector/page/addSqlServer",
+    "DqlMysql" : $basePath + "/connector/page/addDqlMysql",
+    "DqlOracle" : $basePath + "/connector/page/addDqlOracle",
+    "Redis" : $basePath + "/connector/page/addRedis"
 }

+ 2 - 2
dbsyncer-web/src/main/resources/static/js/index.js

@@ -3,7 +3,7 @@
 $(function () {
 
     // 初始化版权信息
-    $.getJSON("/config/system.json", function (data) {
+    doGetter("/config/system.json",{}, function (data) {
         // 获取头部版权信息
         $("#logoName").html(data.headName);
         // 获取底部版权信息
@@ -38,7 +38,7 @@ $(function () {
     // 绑定所有的菜单链接点击事件,根据不同的URL加载页面
     $("#menu li a[url]").click(function () {
         // 加载页面
-        $initContainer.load($(this).attr("url"));
+        doLoader($(this).attr("url"));
     });
 
     // 头部导航栏选中切换事件

+ 9 - 6
dbsyncer-web/src/main/resources/static/js/index/index.js

@@ -2,7 +2,7 @@
 function bindAddConnector() {
     // 绑定添加连接器按钮点击事件
     $("#indexAddConnectorBtn").click(function () {
-        $initContainer.load('/connector/page/add');
+        doLoader('/connector/page/add');
     });
 }
 
@@ -10,14 +10,14 @@ function bindAddConnector() {
 function bindEditConnector() {
     $(".connectorList .dbsyncer_block").click(function () {
         var $id = $(this).attr("id");
-        $initContainer.load('/connector/page/edit?id=' + $id);
+        doLoader('/connector/page/edit?id=' + $id);
     });
 }
 
 // 添加驱动
 function bindAddMapping() {
     $("#indexAddMappingBtn").click(function () {
-        $initContainer.load('/mapping/pageAdd');
+        doLoader('/mapping/pageAdd');
     });
 }
 
@@ -25,7 +25,7 @@ function bindAddMapping() {
 function bindEditMapping() {
     $(".mappingList .dbsyncer_block").click(function () {
         var $id = $(this).attr("id");
-        $initContainer.load('/mapping/page/edit?id=' + $id);
+        doLoader('/mapping/page/edit?id=' + $id);
     });
 }
 
@@ -34,9 +34,12 @@ function bindQueryData() {
     $(".mappingList .queryData").click(function () {
         // 阻止触发click传递事件
         event.cancelBubble=true;
+        var $menu = $('#menu > li');
+        $menu.removeClass('active');
+        $menu.find("a[url='/monitor']").parent().addClass('active');
+
         var $id = $(this).attr("id");
-        activeMenu('/monitor');
-        $initContainer.load('/monitor?id=' + $id);
+        doLoader('/monitor?id=' + $id);
     });
 }
 

+ 4 - 3
dbsyncer-web/src/main/resources/static/js/login/login.js

@@ -1,6 +1,7 @@
 // 获取项目地址
 var $location = (window.location + '').split('/');
-var $basePath = $location[0] + '//' + $location[2];
+var $path = document.location.pathname;
+var $basePath = $location[0] + '//' + $location[2] + $path.substr(0, $path.substr(1).indexOf("/")+1);
 
 var $formHtml = "<dl class=\"admin_login\">\n" +
     "\t<dt>\n" +
@@ -54,7 +55,7 @@ $(document).ready(function () {
 
 //初始化加载版权信息
 function initLoginCopyrightInfo() {
-    $.getJSON("/config/system.json", function (data) {
+    $.getJSON($basePath + "/config/system.json", function (data) {
         // 获取底部版权信息
         $("#loginCopyrightInfo").html(data.footerName);
     });
@@ -82,7 +83,7 @@ function login($form) {
         $form.find("#loginTip").removeClass("loginVerifcateTextError").addClass("loginVerifcateTextTip").html("登录中...");
         $form.find("input").attr("disabled", "disabled");
         // 点击确定确认登录请求后台
-        $.post("/login", {"username": username, "password": password}, function (data) {
+        $.post($basePath + "/login", {"username": username, "password": password}, function (data) {
             showResponse($form, data);
         }).error(function (xhr, status, info) {
             var data = {success: false, resultValue: "登录异常,请刷新或重试."};

+ 1 - 1
dbsyncer-web/src/main/resources/static/js/mapping/add.js

@@ -2,7 +2,7 @@ function submit(data) {
     doPoster("/mapping/add", data, function (data) {
         if (data.success == true) {
             bootGrowl("新增驱动成功!", "success");
-            $initContainer.load('/mapping/page/edit?id=' + data.resultValue);
+            doLoader('/mapping/page/edit?id=' + data.resultValue);
         } else {
             bootGrowl(data.resultValue, "danger");
         }

+ 2 - 2
dbsyncer-web/src/main/resources/static/js/mapping/edit.js

@@ -12,7 +12,7 @@ function submit(data) {
 //*********************************** 驱动保存 结束位置***********************************//
 // 刷新页面
 function refresh(id){
-    $initContainer.load('/mapping/page/edit?id=' + id);
+    doLoader('/mapping/page/edit?id=' + id);
 }
 
 // 绑定修改驱动同步方式切换事件
@@ -52,7 +52,7 @@ function bindMappingTableGroupListClick() {
     var $tableGroupList = $("#tableGroupList");
     $tableGroupList.unbind("click");
     $tableGroupList.find("tr").bind('click', function () {
-        $initContainer.load('/tableGroup/page/editTableGroup?id=' + $(this).attr("id"));
+        doLoader('/tableGroup/page/editTableGroup?id=' + $(this).attr("id"));
     });
 
     var $del = $(".tableGroupDelete");

+ 1 - 1
dbsyncer-web/src/main/resources/static/js/mapping/editTableGroup.js

@@ -102,7 +102,7 @@ function bindAutoSelect(){
 }
 // 返回驱动配置页面
 function backMappingPage($this){
-    $initContainer.load('/mapping/page/edit?id=' + $this.attr("mappingId"));
+    doLoader('/mapping/page/edit?id=' + $this.attr("mappingId"));
 }
 
 $(function() {

+ 10 - 22
dbsyncer-web/src/main/resources/static/js/monitor/index.js

@@ -10,18 +10,6 @@ function formatDate(time) {
   return YY + MM + DD +" "+hh + mm + ss;
 }
 
-// 全局Ajax get
-function doGetter(url, params, action) {
-    $.loadingT(true);
-    $.get(url, params, function (data) {
-        $.loadingT(false);
-        action(data);
-    }).error(function (xhr, status, info) {
-        $.loadingT(false);
-        bootGrowl("访问异常,请刷新或重试.", "danger");
-    });
-}
-
 // 查看详细数据
 function bindQueryDataDetailEvent() {
     $(".metaDataList .queryData").click(function () {
@@ -58,7 +46,7 @@ function bindClearEvent($btn, $title, $msg, $url){
                     doPoster($url, data, function (data) {
                         if (data.success == true) {
                             bootGrowl($msg, "success");
-                            $initContainer.load('/monitor?id=' + $id);
+                            doLoader('/monitor?id=' + $id);
                         } else {
                             bootGrowl(data.resultValue, "danger");
                         }
@@ -135,15 +123,15 @@ function showLogList(arr){
 
 // 查看系统指标
 function showSystemInfo(){
-    $.getJSON("/app/health", function (data) {
+    doGetWithoutLoading("/app/health",{}, function (data) {
         var details = data.details;
         var html = showPoint("硬盘", details.diskSpace);
 
-        $.getJSON("/app/metrics/jvm.threads.live", function (data) {
+        doGetWithoutLoading("/app/metrics/jvm.threads.live",{}, function (data) {
             html += showSystemItem("线程活跃", data.measurements[0].value);
-            $.getJSON("/app/metrics/jvm.threads.peak", function (data) {
+            doGetWithoutLoading("/app/metrics/jvm.threads.peak",{}, function (data) {
                 html += showSystemItem("线程峰值", data.measurements[0].value);
-                $.getJSON("/app/metrics/jvm.gc.pause", function (data) {
+                doGetWithoutLoading("/app/metrics/jvm.gc.pause",{}, function (data) {
                     var count =  data.measurements[0].value;
                     var time =  data.measurements[1].value;
                     time = time.toFixed(2);
@@ -160,7 +148,7 @@ function showSystemInfo(){
 
 // CPU
 function showCpu(){
-    $.getJSON("/app/metrics/system.cpu.usage", function (data) {
+    doGetWithoutLoading("/app/metrics/system.cpu.usage",{}, function (data) {
         var value = data.measurements[0].value * 100;
         value = value.toFixed(2);
         var option={
@@ -211,13 +199,13 @@ function showCpu(){
 
 // 内存
 function showMem(){
-    $.getJSON("/app/metrics/jvm.memory.max", function (data) {
+    doGetWithoutLoading("/app/metrics/jvm.memory.max",{}, function (data) {
         var max = data.measurements[0].value;
         max = (max / 1024 / 1024 / 1024).toFixed(2);
-        $.getJSON("/app/metrics/jvm.memory.used", function (data) {
+        doGetWithoutLoading("/app/metrics/jvm.memory.used",{}, function (data) {
             var used = data.measurements[0].value;
             used = (used / 1024 / 1024 / 1024).toFixed(2);
-            $.getJSON("/app/metrics/jvm.memory.committed", function (data) {
+            doGetWithoutLoading("/app/metrics/jvm.memory.committed",{}, function (data) {
                 var committed = data.measurements[0].value;
                 committed = (committed / 1024 / 1024 / 1024).toFixed(2);
 
@@ -315,7 +303,7 @@ $(function () {
     //连接器类型切换事件
     $("select[name='metaData']").change(function () {
         var $id = $(this).val();
-        $initContainer.load('/monitor?id=' + $id);
+        doLoader('/monitor?id=' + $id);
     });
 
     bindQueryLogEvent();

+ 1 - 1
dbsyncer-web/src/main/resources/static/js/pwd/index.js

@@ -6,7 +6,7 @@ function submit(data) {
             });
         } else {
             bootGrowl(data.resultValue, "danger");
-            $initContainer.load("/pwd");
+            doLoader("/pwd");
         }
     });
 }

+ 1 - 1
dbsyncer-web/src/main/resources/static/js/ststem/index.js

@@ -5,7 +5,7 @@ function submit(data) {
         } else {
             bootGrowl(data.resultValue, "danger");
         }
-        $initContainer.load("/system");
+        doLoader("/system");
     });
 }