Parcourir la source

init from phab

xielq il y a 5 ans
Parent
commit
272e6d7d48
29 fichiers modifiés avec 97 ajouts et 353 suppressions
  1. 25 0
      Jenkinsfile
  2. 26 24
      build.gradle
  3. 0 28
      gradle/dependencies-base.gradle
  4. 0 11
      gradle/tasks.gradle
  5. 0 6
      src/main/docker/Dockerfile
  6. 5 18
      src/main/java/com/uas/cloud/mall/admin/AdminApplication.java
  7. 0 20
      src/main/java/com/uas/cloud/mall/admin/config/InterceptorConfig.java
  8. 1 0
      src/main/java/com/uas/cloud/mall/admin/config/RootConfig.java
  9. 0 18
      src/main/java/com/uas/cloud/mall/admin/config/UrlConfig.java
  10. 0 49
      src/main/java/com/uas/cloud/mall/admin/interceptor/LoginInterceptor.java
  11. 2 1
      src/main/java/com/uas/cloud/mall/admin/service/CarouselService.java
  12. 1 6
      src/main/java/com/uas/cloud/mall/admin/service/DfsServiceRibbon.java
  13. 2 1
      src/main/java/com/uas/cloud/mall/admin/service/FloorService.java
  14. 0 31
      src/main/java/com/uas/cloud/mall/admin/service/LoginService.java
  15. 11 0
      src/main/java/com/uas/cloud/mall/admin/util/MeshUtils.java
  16. 0 47
      src/main/java/com/uas/cloud/mall/admin/web/LoginAndLogoutController.java
  17. 3 13
      src/main/resources/application-dev.yml
  18. 12 0
      src/main/resources/application-mesh.yml
  19. 1 4
      src/main/resources/application-prod.yml
  20. 3 1
      src/main/resources/application.yml
  21. 0 7
      src/main/resources/bootstrap-dev.yml
  22. 0 6
      src/main/resources/bootstrap-prod.yml
  23. 0 6
      src/main/resources/bootstrap-test.yml
  24. 0 9
      src/main/resources/bootstrap.yml
  25. 2 2
      src/main/resources/static/js/carousel.js
  26. 2 3
      src/main/resources/static/js/floor.js
  27. 0 41
      src/main/resources/templates/login.html
  28. 0 1
      src/main/resources/templates/tpls/nav.html
  29. 1 0
      src/test/java/com/uas/cloud/mall/admin/util/JsonUtilsTest.java

+ 25 - 0
Jenkinsfile

@@ -0,0 +1,25 @@
+#!/groovy
+
+pipeline {
+    agent any
+
+    stages {
+        stage('Build') {
+            steps {
+                gradle dockerPush
+            }
+        }
+        stage('Test') {
+            steps {
+                echo 'Testing'
+            }
+        }
+        stage('Deploy') {
+            steps {
+                sshagent (credentials: ['docker-swarm']) {
+                    sh 'ssh -o StrictHostKeyChecking=no -l uas 192.168.1.106 uname -a'
+                }
+            }
+        }
+    }
+}

+ 26 - 24
build.gradle

@@ -1,61 +1,63 @@
-// Gradle build file for Gradle 2.14.1
-// Created by huxz on 2017-3-17 13:38:59
 buildscript {
-    ext {
-        springBootVersion = '1.4.4.RELEASE'
-        // 0.12.0 升级到了 Gradle 3.4,Gradle 2.14.1 只能使用 0.11.0及以下
-        dockerVersion = '0.12.0'
-        dcokerRegistry = "10.10.100.200:5000"
-    }
     repositories {
         maven { url "https://plugins.gradle.org/m2/" }
+        maven { url 'http://113.105.74.141:8081/artifactory/libs-release-local' }
         maven { url "http://maven.aliyun.com/nexus/content/groups/public/" }
-        mavenCentral()
         jcenter()
     }
     dependencies {
-        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
-        classpath "gradle.plugin.com.palantir.gradle.docker:gradle-docker:${dockerVersion}"
+        classpath 'com.uas.demo.mesh:spring-boot-docker-plugin:1.0.0'
+        classpath "org.springframework.boot:spring-boot-gradle-plugin:1.5.6.RELEASE"
     }
 }
 
 group 'com.uas.cloud.mall'
-version '0.1.5'
+version '0.1.6-MESH'
 
 apply plugin: 'java'
 apply plugin: 'maven'
-apply plugin: "com.palantir.docker"
 apply plugin: "org.springframework.boot"
+apply plugin: 'com.uas.docker.spring.boot'
 
-apply from: "$rootDir/gradle/tasks.gradle"
-apply from: "$rootDir/gradle/dependencies-base.gradle"
+sourceCompatibility = 1.8
 
-jar {
-    baseName = project.name
-    version = ''
+repositories {
+    maven { url 'http://10.10.101.21:8081/artifactory/libs-snapshot' }
+    maven { url 'http://10.10.101.21:8081/artifactory/libs-release' }
+    maven { url "http://maven.aliyun.com/nexus/content/groups/public/" }
+    jcenter()
+    mavenCentral()
 }
 
-allprojects {
-    sourceCompatibility = 1.8
+dependencyManagement {
+    imports {
+        mavenBom 'org.springframework.cloud:spring-cloud-dependencies:Camden.SR5'
+    }
 }
 
 dependencies {
+    compile "org.springframework.boot:spring-boot-starter-web"
     compile("org.springframework.boot:spring-boot-starter-thymeleaf")
     // Spring Boot will create a MultipartConfigElement bean and make itself ready for file uploads.
     compile("org.springframework.cloud:spring-cloud-starter-feign")
     compile("org.springframework.cloud:spring-cloud-starter-ribbon")
     compile("org.springframework.cloud:spring-cloud-starter-hystrix")
     compile "com.uas.cloud.base.commons:common:0.1.0"
+
     compile("org.springframework.boot:spring-boot-devtools")
+
     compile("org.springframework.boot:spring-boot-starter-actuator")
     compile("org.webjars:webjars-locator")
-    compile "org.springframework.boot:spring-boot-configuration-processor"
+
     compile "commons-fileupload:commons-fileupload:1.3.1"
 
-//    compile "io.github.openfeign.form:feign-form:2.1.0"
-//    compile "io.github.openfeign.form:feign-form-spring:2.1.0"
+    testCompile "org.springframework.boot:spring-boot-starter-test"
+}
+
+customDocker {
+    baseImage 'hub.c.163.com/library/java:8-jre-alpine'
+    registry '10.10.100.200:5000'
 }
-compileJava.dependsOn(processResources)
 
 uploadArchives {
     repositories {

+ 0 - 28
gradle/dependencies-base.gradle

@@ -1,28 +0,0 @@
-// Gradle Base Dependencies Configurations
-// Created by huxz on 2017-3-17 14:39:36
-repositories {
-	mavenLocal()
-	maven { url "http://maven.aliyun.com/nexus/content/groups/public/" }
-	maven {
-		url 'http://10.10.101.21:8081/artifactory/libs-release'
-	}
-	maven {
-		url 'http://10.10.101.21:8081/artifactory/libs-snapshot'
-	}
-	maven {
-		url 'http://10.10.101.21:8081/artifactory/plugins-snapshot'
-	}
-	mavenCentral()
-}
-
-dependencyManagement {
-	imports {
-		mavenBom 'org.springframework.cloud:spring-cloud-dependencies:Camden.SR5'
-	}
-}
-
-dependencies {
-	compile 'org.springframework.cloud:spring-cloud-starter-config'
-	compile "org.springframework.cloud:spring-cloud-starter-eureka"
-	testCompile 'org.springframework.boot:spring-boot-starter-test'
-}

+ 0 - 11
gradle/tasks.gradle

@@ -1,11 +0,0 @@
-// Gradle Tasks Configurations
-// Created by huxz on 2017-3-17 14:39:36
-bootRun {
-	addResources = true
-}
-
-docker {
-	name "${dcokerRegistry}/${project.name}:${project.version}"
-	dockerfile "${projectDir}/src/main/docker/Dockerfile"
-	files "${buildDir}/libs/${project.name}.jar"
-}.dependsOn build

+ 0 - 6
src/main/docker/Dockerfile

@@ -1,6 +0,0 @@
-FROM hub.c.163.com/library/java:8-jre-alpine
-VOLUME /tmp # reate a temporary file on my host under "/var/lib/docker" and link it to the container under "/tmp".
-ADD mall-admin-app.jar app.jar
-RUN sh -c "touch /app.jar" #  "touch" the jar file so that it has a file modification time (Docker creates all container files in an "unmodified" state by default). This actually isn’t important for the simple app that we wrote, but any static content (e.g. "index.html") would require the file to have a modification time.
-ENV JAVA_OPTS=""
-ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar --spring.profiles.active=test"] # To reduce Tomcat startup time we added a system property pointing to "/dev/urandom" as a source of entropy.

+ 5 - 18
src/main/java/com/uas/cloud/mall/admin/AdminApplication.java

@@ -1,37 +1,24 @@
 package com.uas.cloud.mall.admin;
 
 import com.uas.cloud.mall.admin.config.RootConfig;
+import org.springframework.boot.Banner.Mode;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.builder.SpringApplicationBuilder;
-import org.springframework.boot.web.servlet.MultipartConfigFactory;
-import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
 import org.springframework.cloud.netflix.feign.EnableFeignClients;
-import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Import;
 
-import javax.servlet.MultipartConfigElement;
-
 /**
  * @author yangck
  * @create 2017-02-16 16:43
  */
 @SpringBootApplication
-@EnableDiscoveryClient
 @EnableFeignClients
 @Import(RootConfig.class)
 public class AdminApplication {
     public static void main(String[] args) {
-        new SpringApplicationBuilder(AdminApplication.class).web(true).run(args);
-    }
-
-    /**
-     * 文件上传临时路径
-     */
-    @Bean
-    MultipartConfigElement multipartConfigElement() {
-        MultipartConfigFactory factory = new MultipartConfigFactory();
-        factory.setLocation("/tmp");
-        return factory.createMultipartConfig();
+        new SpringApplicationBuilder(AdminApplication.class)
+                .bannerMode(Mode.OFF)
+                .web(true)
+                .run(args);
     }
 }
-

+ 0 - 20
src/main/java/com/uas/cloud/mall/admin/config/InterceptorConfig.java

@@ -1,20 +0,0 @@
-package com.uas.cloud.mall.admin.config;
-
-import com.uas.cloud.mall.admin.interceptor.LoginInterceptor;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
-
-/**
- * 拦截器配置
- * @author liuam
- * @version 2018/4/19 0019 下午 13:45 创建文件
- */
-@Configuration
-public class InterceptorConfig extends WebMvcConfigurerAdapter {
-    @Override
-    public void addInterceptors(InterceptorRegistry registry) {
-        registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**");
-        super.addInterceptors(registry);
-    }
-}

+ 1 - 0
src/main/java/com/uas/cloud/mall/admin/config/RootConfig.java

@@ -14,6 +14,7 @@ import org.springframework.web.client.RestTemplate;
 @Configuration
 public class RootConfig {
 
+    @LoadBalanced
     @Bean
     public RestTemplate restTemplate() {
         return new RestTemplate();

+ 0 - 18
src/main/java/com/uas/cloud/mall/admin/config/UrlConfig.java

@@ -1,18 +0,0 @@
-package com.uas.cloud.mall.admin.config;
-
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.stereotype.Component;
-
-@Component
-@ConfigurationProperties(prefix = "url")
-public class UrlConfig {
-    private String uploadFileUrl;
-
-    public String getUploadFileUrl() {
-        return uploadFileUrl;
-    }
-
-    public void setUploadFileUrl(String uploadFileUrl) {
-        this.uploadFileUrl = uploadFileUrl;
-    }
-}

+ 0 - 49
src/main/java/com/uas/cloud/mall/admin/interceptor/LoginInterceptor.java

@@ -1,49 +0,0 @@
-package com.uas.cloud.mall.admin.interceptor;
-
-import org.springframework.web.servlet.HandlerInterceptor;
-import org.springframework.web.servlet.ModelAndView;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
-
-/**
- * 拦截所有请求,若用户没有登录,则转发到登录页面
- * @author liuam
- * @version 2018/4/19 0019 下午 13:39 创建文件
- */
-public class LoginInterceptor implements HandlerInterceptor {
-
-    @Override
-    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
-        String uri = request.getRequestURI();
-        // 可以公开访问的地址
-        String[] strings = {"login", "logout", "dologin"};
-
-        // 放行
-        for (String string : strings) {
-            if (uri.indexOf(string) >=0 ) {
-                return true;
-            }
-        }
-
-        HttpSession session = request.getSession();
-        Object attribute = session.getAttribute("user");
-        if(attribute!=null){
-            return true;
-        }
-        //不满足条件,返回到登录页面
-        response.sendRedirect("/login");;
-        return false;
-    }
-
-    @Override
-    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
-
-    }
-
-    @Override
-    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
-
-    }
-}

+ 2 - 1
src/main/java/com/uas/cloud/mall/admin/service/CarouselService.java

@@ -2,6 +2,7 @@ package com.uas.cloud.mall.admin.service;
 
 import com.uas.cloud.mall.admin.domain.Carousel;
 import com.uas.cloud.mall.admin.service.fallback.CarouselServiceFallback;
+import com.uas.cloud.mall.admin.util.MeshUtils;
 import org.springframework.cloud.netflix.feign.FeignClient;
 import org.springframework.web.bind.annotation.*;
 
@@ -13,7 +14,7 @@ import java.util.List;
  * @author yangck
  * @create 2017-02-16 17:29
  */
-@FeignClient(value = "MALL-CAROUSEL-SERVICE", fallback = CarouselServiceFallback.class)
+@FeignClient(name = "MALL-CAROUSEL-SERVICE", url = MeshUtils.MESH_URL + "/mesh/mall-carousel-service", fallback = CarouselServiceFallback.class)
 public interface CarouselService {
 
     @RequestMapping(value = "/carousels", method = RequestMethod.GET)

+ 1 - 6
src/main/java/com/uas/cloud/mall/admin/service/DfsServiceRibbon.java

@@ -1,11 +1,9 @@
 package com.uas.cloud.mall.admin.service;
 
 import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
-import com.uas.cloud.mall.admin.config.UrlConfig;
 import org.apache.log4j.LogManager;
 import org.apache.log4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.core.io.ByteArrayResource;
 import org.springframework.http.*;
 import org.springframework.stereotype.Service;
@@ -27,9 +25,6 @@ public class DfsServiceRibbon {
     @Autowired
     private RestTemplate restTemplate;
 
-    @Autowired
-    private UrlConfig urlConfig;
-
     @HystrixCommand(fallbackMethod = "saveFallback")
     public String save(MultipartFile multipartFile) {
         //try {
@@ -58,7 +53,7 @@ public class DfsServiceRibbon {
 
         HttpEntity<LinkedMultiValueMap<String, Object>> requestEntity = new HttpEntity<> (parts, headers);
 
-        ResponseEntity<String> responseEntity = restTemplate.postForEntity(urlConfig.getUploadFileUrl(), requestEntity, String.class);
+        ResponseEntity<String> responseEntity = restTemplate.exchange("http://BASE-DFS-SERVICE/file/part", HttpMethod.POST, requestEntity, String.class);
         return responseEntity.getBody();
     }
 

+ 2 - 1
src/main/java/com/uas/cloud/mall/admin/service/FloorService.java

@@ -3,6 +3,7 @@ package com.uas.cloud.mall.admin.service;
 import com.uas.cloud.mall.admin.domain.Floor;
 import com.uas.cloud.mall.admin.domain.Item;
 import com.uas.cloud.mall.admin.service.fallback.FloorServiceFallback;
+import com.uas.cloud.mall.admin.util.MeshUtils;
 import org.springframework.cloud.netflix.feign.FeignClient;
 import org.springframework.web.bind.annotation.*;
 
@@ -12,7 +13,7 @@ import java.util.List;
  * @author yangck
  * @create 2017-02-28 9:30
  */
-@FeignClient(value = "MALL-FLOOR-SERVICE", fallback = FloorServiceFallback.class)
+@FeignClient(name = "MALL-FLOOR-SERVICE", url = MeshUtils.MESH_URL + "/mesh/mall-floor-service", fallback = FloorServiceFallback.class)
 public interface FloorService {
 
     @RequestMapping(value = "/floors", method = RequestMethod.GET, produces = "application/json")

+ 0 - 31
src/main/java/com/uas/cloud/mall/admin/service/LoginService.java

@@ -1,31 +0,0 @@
-package com.uas.cloud.mall.admin.service;
-
-import org.springframework.stereotype.Service;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * @author liuam
- * @version 2018/4/19 0019 下午 14:01 创建文件
- */
-@Service
-public class LoginService {
-
-    private Map<String, String> users = new HashMap();
-
-    public LoginService() {
-        // 登录账号
-        users.put("admin", "admin123***");
-    }
-
-    public String findUser(String userName, String password) {
-        if (!users.containsKey(userName)) {
-            return null;
-        }
-        if (users.get(userName).equals(password)) {
-            return userName;
-        }
-        return null;
-    }
-}

+ 11 - 0
src/main/java/com/uas/cloud/mall/admin/util/MeshUtils.java

@@ -0,0 +1,11 @@
+package com.uas.cloud.mall.admin.util;
+
+/**
+ * A static utility class for storing constants of service mesh.
+ *
+ * @author huxz
+ */
+public class MeshUtils {
+
+    public static final String MESH_URL = "http://10.10.100.23:29800";
+}

+ 0 - 47
src/main/java/com/uas/cloud/mall/admin/web/LoginAndLogoutController.java

@@ -1,47 +0,0 @@
-package com.uas.cloud.mall.admin.web;
-
-import com.uas.cloud.mall.admin.service.LoginService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-import org.springframework.util.StringUtils;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-
-import javax.servlet.http.HttpSession;
-import java.util.Map;
-
-/**
- * 登录、登出
- * @author liuam
- * @version 2018/4/19 0019 下午 13:56 创建文件
- *
- */
-@Controller
-public class LoginAndLogoutController {
-
-    @Autowired
-    private LoginService loginService;
-
-    @RequestMapping(value = "/dologin", method = RequestMethod.POST)
-    public String dologin(String userName, String password, HttpSession session, Map<String, String> model) {
-        String user = loginService.findUser(userName, password);
-        if (StringUtils.isEmpty(user)) {
-            model.put("message", "用户名或密码错误");
-            return "login";
-        }
-        session.setAttribute("user", user);
-        return "redirect:/";
-    }
-
-    @RequestMapping(value = "/login", method = RequestMethod.GET)
-    public String login() {
-        return "login";
-    }
-
-    @RequestMapping(value = "/logout", method = RequestMethod.GET)
-    public String logout(HttpSession session) {
-        session.removeAttribute("user");
-        return "redirect:/login";
-    }
-
-}

+ 3 - 13
src/main/resources/application-dev.yml

@@ -1,22 +1,12 @@
+server:
+  port: 20010
+
 spring:
-  application:
-    name: mall-admin-app
   http:
     multipart:
       max-file-size: 100Mb
-server:
-  port: 20010
-eureka:
-  client:
-    serviceUrl:
-      defaultZone: http://10.10.100.23:28000/eureka/
-
-#      http://localhost:1111/eureka/
 
 hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 60000
 ribbon:
   ConnectTimeout: 6000
   ReadTimeout: 60000
-
-url:
-  uploadFileUrl: http://10.10.100.200:9999/file/upload

+ 12 - 0
src/main/resources/application-mesh.yml

@@ -0,0 +1,12 @@
+server:
+  port: 20012
+
+spring:
+  http:
+    multipart:
+      max-file-size: 100Mb
+
+hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 60000
+ribbon:
+  ConnectTimeout: 6000
+  ReadTimeout: 60000

+ 1 - 4
src/main/resources/application-prod.yml

@@ -16,7 +16,4 @@ eureka:
 hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 60000
 ribbon:
   ConnectTimeout: 6000
-  ReadTimeout: 60000
-
-url:
-  uploadFileUrl: http://dfs-api.ubtob.com/file/upload
+  ReadTimeout: 60000

+ 3 - 1
src/main/resources/application.yml

@@ -1,3 +1,5 @@
 spring:
+  application:
+    name: mall-admin-app
   profiles:
-    active: dev
+      active: dev

+ 0 - 7
src/main/resources/bootstrap-dev.yml

@@ -1,7 +0,0 @@
-spring:
-  cloud:
-    config:
-      profile: dev
-      label: master
-      uri: http://10.10.100.23:28001/
-

+ 0 - 6
src/main/resources/bootstrap-prod.yml

@@ -1,6 +0,0 @@
-spring:
-  cloud:
-    config:
-      profile: prod
-      label: master
-      uri: http://configserver:28001/

+ 0 - 6
src/main/resources/bootstrap-test.yml

@@ -1,6 +0,0 @@
-spring:
-  cloud:
-    config:
-      profile: test
-      label: master
-      uri: http://configserver:28001/

+ 0 - 9
src/main/resources/bootstrap.yml

@@ -1,9 +0,0 @@
-spring:
-  application:
-    name: mall-admin-app
-  cloud:
-    config:
-      profile: test
-      label: master
-      uri: http://configserver:28001/
-

+ 2 - 2
src/main/resources/static/js/carousel.js

@@ -34,7 +34,7 @@ $(function () {
                 });
             data.submit().always(function (data) {
                 $this.remove();
-                $('#picture-url').val(data.path);
+                $('#picture-url').val(data.responseText);
             })
         });
     $('#fileupload').fileupload({
@@ -86,7 +86,7 @@ $(function () {
         );
     }).on('fileuploaddone', function (e, data) {
         if(data.result) {
-            $('#picture-url').val(data.result.path);
+            $('#picture-url').val(data.result);
         }
     }).on('fileuploadfail', function (e, data) {
         console.log('上传失败', data);

+ 2 - 3
src/main/resources/static/js/floor.js

@@ -87,9 +87,8 @@ $(function () {
             },
             done: function(e, data) {
                 var path = data.result;
-                var data = eval('(' + path + ')');
-                $('input[name=pictureUrl]').val(data.path);
-                $('.x-picture-preview').show().find('img').attr('src', data.path);
+                $('input[name=pictureUrl]').val(path);
+                $('.x-picture-preview').show().find('img').attr('src', path);
             }
         },
         init: function () {

+ 0 - 41
src/main/resources/templates/login.html

@@ -1,41 +0,0 @@
-<!DOCTYPE html>
-<html xmlns:th="http://www.thymeleaf.org">
-<head>
-    <meta charset="UTF-8"/>
-    <title>商城后台管理系统登录页面</title>
-    <script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
-    <script crossorigin="anonymous" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
-    <link crossorigin="anonymous" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" rel="stylesheet"/>
-    <style type="text/css">
-        div#login-form {
-            margin: 120px auto;
-            width: 300px;
-        }
-    </style>
-</head>
-<body>
-
-
-    <div class="container">
-        <div id="login-form">
-            <h2 style="text-align: center;">商城后台管理系统</h2>
-            <form action="/dologin" class="form-horizontal" method="post">
-                <div class="form-group">
-                    <label class="sr-only" for="userName">Email address</label>
-                    <input class="form-control" id="userName" name="userName" placeholder="账号" type="text"/>
-                </div>
-                <div class="form-group">
-                    <label class="sr-only" for="password">Password</label>
-                    <input class="form-control" id="password" name="password" placeholder="密码" type="password"/>
-                </div>
-                <div class="form-group">
-                    <button class="btn btn-primary form-control" type="submit">登录</button>
-                </div>
-                <div class="form-group">
-                    <span th:text="${message}"></span>
-                </div>
-            </form>
-        </div>
-    </div>
-</body>
-</html>

+ 0 - 1
src/main/resources/templates/tpls/nav.html

@@ -15,7 +15,6 @@
                 <li><a href="#">设置</a></li>
                 <li><a href="#">个人主页</a></li>
                 <li><a href="#">帮助</a></li>
-                <li><a href="/logout">退出</a></li>
             </ul>
             <form class="navbar-form navbar-right">
                 <input type="text" class="form-control" placeholder="搜索..." />

+ 1 - 0
src/test/java/com/uas/cloud/mall/admin/util/JsonUtilsTest.java

@@ -13,6 +13,7 @@ import java.util.Map;
  * Created by chaokunyang on 2017/4/14.
  */
 public class JsonUtilsTest {
+
     @Test
     public void testJson() throws IOException {
         Carousel carousel1 = new Carousel(null, "home", 0L, "http://dfs.ubtob.com/group1/M00/17/F3/CgpkyFjaM62AQafMAACiyPLUFOk177.jpg", "", "http://mall.ubtob.com/product#/kinds/100", null, "轮播1");