Rlax 8 年 前
コミット
90ac0259c5
100 ファイル変更906 行追加3 行削除
  1. 5 3
      README.md
  2. BIN
      doc/img/jwt.png
  3. 3 0
      jboot-admin-base/src/main/java/io/jboot/admin/base/common/CacheKey.java
  4. 41 0
      jboot-admin-base/src/main/java/io/jboot/admin/base/plugin/jwt/JwtToken.java
  5. BIN
      jboot-admin/src/main/resources/static/img/eW-logo.png
  6. 3 0
      jboot-b2c/README.md
  7. 67 0
      jboot-b2c/src/main/java/io/jboot/b2c/controller/MainController.java
  8. 49 0
      jboot-b2c/src/main/java/io/jboot/b2c/support/JwtTokenInterceptor.java
  9. 7 0
      jboot-b2c/src/main/resources/jboot.properties
  10. 91 0
      jboot-b2c/src/main/resources/static/css/iconfont.css
  11. 167 0
      jboot-b2c/src/main/resources/static/js/jquery-1.4.4.min.js
  12. 2 0
      jboot-b2c/src/main/resources/static/js/layui/css/layui.css
  13. 2 0
      jboot-b2c/src/main/resources/static/js/layui/css/layui.mobile.css
  14. 2 0
      jboot-b2c/src/main/resources/static/js/layui/css/modules/code.css
  15. 2 0
      jboot-b2c/src/main/resources/static/js/layui/css/modules/laydate/default/laydate.css
  16. BIN
      jboot-b2c/src/main/resources/static/js/layui/css/modules/layer/default/icon-ext.png
  17. BIN
      jboot-b2c/src/main/resources/static/js/layui/css/modules/layer/default/icon.png
  18. 2 0
      jboot-b2c/src/main/resources/static/js/layui/css/modules/layer/default/layer.css
  19. BIN
      jboot-b2c/src/main/resources/static/js/layui/css/modules/layer/default/loading-0.gif
  20. BIN
      jboot-b2c/src/main/resources/static/js/layui/css/modules/layer/default/loading-1.gif
  21. BIN
      jboot-b2c/src/main/resources/static/js/layui/css/modules/layer/default/loading-2.gif
  22. BIN
      jboot-b2c/src/main/resources/static/js/layui/font/iconfont.eot
  23. 459 0
      jboot-b2c/src/main/resources/static/js/layui/font/iconfont.svg
  24. BIN
      jboot-b2c/src/main/resources/static/js/layui/font/iconfont.ttf
  25. BIN
      jboot-b2c/src/main/resources/static/js/layui/font/iconfont.woff
  26. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/0.gif
  27. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/1.gif
  28. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/10.gif
  29. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/11.gif
  30. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/12.gif
  31. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/13.gif
  32. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/14.gif
  33. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/15.gif
  34. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/16.gif
  35. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/17.gif
  36. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/18.gif
  37. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/19.gif
  38. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/2.gif
  39. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/20.gif
  40. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/21.gif
  41. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/22.gif
  42. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/23.gif
  43. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/24.gif
  44. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/25.gif
  45. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/26.gif
  46. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/27.gif
  47. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/28.gif
  48. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/29.gif
  49. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/3.gif
  50. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/30.gif
  51. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/31.gif
  52. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/32.gif
  53. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/33.gif
  54. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/34.gif
  55. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/35.gif
  56. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/36.gif
  57. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/37.gif
  58. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/38.gif
  59. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/39.gif
  60. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/4.gif
  61. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/40.gif
  62. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/41.gif
  63. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/42.gif
  64. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/43.gif
  65. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/44.gif
  66. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/45.gif
  67. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/46.gif
  68. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/47.gif
  69. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/48.gif
  70. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/49.gif
  71. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/5.gif
  72. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/50.gif
  73. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/51.gif
  74. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/52.gif
  75. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/53.gif
  76. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/54.gif
  77. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/55.gif
  78. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/56.gif
  79. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/57.gif
  80. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/58.gif
  81. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/59.gif
  82. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/6.gif
  83. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/60.gif
  84. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/61.gif
  85. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/62.gif
  86. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/63.gif
  87. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/64.gif
  88. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/65.gif
  89. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/66.gif
  90. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/67.gif
  91. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/68.gif
  92. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/69.gif
  93. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/7.gif
  94. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/70.gif
  95. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/71.gif
  96. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/8.gif
  97. BIN
      jboot-b2c/src/main/resources/static/js/layui/images/face/9.gif
  98. 2 0
      jboot-b2c/src/main/resources/static/js/layui/lay/modules/carousel.js
  99. 2 0
      jboot-b2c/src/main/resources/static/js/layui/lay/modules/code.js
  100. 0 0
      jboot-b2c/src/main/resources/static/js/layui/lay/modules/element.js

+ 5 - 3
README.md

@@ -20,7 +20,7 @@
  - 注册中心:consul/zookeeper
  - RPC:motan/dubbo
  - RPC治理:motan-manager
- - 安全框架:shiro
+ - 安全框架:shiro/jwt [jwt多设备token demo](./jboot-b2c/README.md)
  - 缓存框架:ehcache/redis
  - 容错隔离:hystrix
  - 调用监控:hystrix-dashboard
@@ -34,8 +34,8 @@
  - jboot-admin-parent:父模块,主要管理依赖
  - jboot-admin-base:框架相关代码
  - jboot-admin:后台管理客户端模块
- - jboot-wechat:微信公众号客户端模块
- - jboot-b2c:b2c客户端模块
+ - jboot-wechat:微信公众号客户端模块,客户端demo
+ - jboot-b2c:b2c客户端模块,客户的demo
  - jboot-admin-service:系统服务端模块,包含api、entity、provider三个子模块
  - jboot-admin-service-api:系统服务api模块,定义服务端与客户端api标准
  - jboot-admin-service-entity:系统服务实体模块,定义服务所需model、dto、服务状态类
@@ -44,11 +44,13 @@
  - jboot-b2c-service-api:B2C服务api模块,定义服务端与客户端api标准
  - jboot-b2c-service-entity:B2C服务实体模块,定义服务所需model、dto、服务状态类
  - jboot-b2c-service-provider:B2C服务实现模块,针对api的实现
+ 
 ### 重要更新
 
     1、2018-01-18: 添加微信公众号模块jboot-wechat,微信公众号demo
     2、2018-01-23: 添加B2C服务端模块jboot-b2c-service,b2c商品管理demo
     3、2018-01-25: 添加B2C客户端模块,初始化上传,作为商城秒杀demo模块
+    4、2018-02-01: B2C客户端添加 JWT 前后分离验证 demo 
  
 ### 项目使用
 

BIN
doc/img/jwt.png


+ 3 - 0
jboot-admin-base/src/main/java/io/jboot/admin/base/common/CacheKey.java

@@ -36,4 +36,7 @@ public class CacheKey {
 	
 	/** 验证码 缓存 */
 	public static final String CACHE_CAPTCHAR_SESSION = "captchar-cache";
+
+	/** jwt_token */
+	public static final String CACHE_JWT_TOKEN = "jwt_token";
 }

+ 41 - 0
jboot-admin-base/src/main/java/io/jboot/admin/base/plugin/jwt/JwtToken.java

@@ -0,0 +1,41 @@
+package io.jboot.admin.base.plugin.jwt;
+
+import java.io.Serializable;
+
+/**
+ * JwtToken
+ * @author Rlax
+ *
+ */
+public class JwtToken implements Serializable {
+
+    public JwtToken() {
+
+    }
+
+    public JwtToken(String userId, String version) {
+        this.userId = userId;
+        this.version = version;
+    }
+
+    /** 用户id */
+    private String userId;
+    /** 版本号 */
+    private String version;
+
+    public String getUserId() {
+        return userId;
+    }
+
+    public void setUserId(String userId) {
+        this.userId = userId;
+    }
+
+    public String getVersion() {
+        return version;
+    }
+
+    public void setVersion(String version) {
+        this.version = version;
+    }
+}

BIN
jboot-admin/src/main/resources/static/img/eW-logo.png


+ 3 - 0
jboot-b2c/README.md

@@ -0,0 +1,3 @@
+### JWT 多设备token支持
+
+![jwt](./doc/img/jwt.png)

+ 67 - 0
jboot-b2c/src/main/java/io/jboot/b2c/controller/MainController.java

@@ -0,0 +1,67 @@
+package io.jboot.b2c.controller;
+
+import com.jfinal.aop.Before;
+import com.jfinal.kit.Ret;
+import io.jboot.Jboot;
+import io.jboot.admin.base.common.CacheKey;
+import io.jboot.admin.base.common.RestResult;
+import io.jboot.admin.base.exception.BusinessException;
+import io.jboot.admin.base.interceptor.NotNullPara;
+import io.jboot.admin.base.plugin.jwt.JwtToken;
+import io.jboot.admin.base.web.base.BaseController;
+import io.jboot.b2c.support.JwtTokenInterceptor;
+import io.jboot.web.controller.annotation.RequestMapping;
+
+
+/**
+ * 主控制器
+ * @author Rlax
+ *
+ */
+@RequestMapping("/")
+public class MainController extends BaseController {
+
+    @Before(JwtTokenInterceptor.class)
+    public void index() {
+        renderJson(RestResult.buildSuccess(Ret.create("userId", getJwtPara("userId")).set("version", getJwtPara("version"))));
+    }
+
+    /**
+     * 调转登录页面
+     */
+    public void login() {
+
+    }
+
+    /**
+     * 登录 基于 jwt
+     */
+    @NotNullPara({"loginName", "pwd"})
+    public void postLogin(String loginName, String pwd) {
+
+        // 实际项目这里应该调用service
+        if ("user1".equals(loginName) && "123123".equals(pwd)) {
+            // 此处1 为用户id,实际项目中,使用服务查询id
+            JwtToken jwtToken =  Jboot.me().getCache().get(CacheKey.CACHE_JWT_TOKEN, String.valueOf(1L));
+            if (jwtToken == null) {
+                // 新创建 jwt token,此处为 demo
+                jwtToken = new JwtToken(String.valueOf(1L), String.valueOf(System.currentTimeMillis()));
+                // token 缓存 默认 2小时
+                Jboot.me().getCache().put(CacheKey.CACHE_JWT_TOKEN, jwtToken.getUserId(), jwtToken, 2 * 60 * 60);
+            }
+
+            setJwtAttr("userId", jwtToken.getUserId());
+            setJwtAttr("version", jwtToken.getVersion());
+        } else {
+            throw new BusinessException("用户名密码错误");
+        }
+
+        renderJson(RestResult.buildSuccess("登录成功"));
+    }
+
+    @Before(JwtTokenInterceptor.class)
+    public void logout() {
+        Jboot.me().getCache().remove(CacheKey.CACHE_JWT_TOKEN, getJwtPara("userId"));
+        renderJson(RestResult.buildSuccess("退出成功"));
+    }
+}

+ 49 - 0
jboot-b2c/src/main/java/io/jboot/b2c/support/JwtTokenInterceptor.java

@@ -0,0 +1,49 @@
+package io.jboot.b2c.support;
+
+import com.jfinal.aop.Interceptor;
+import com.jfinal.aop.Invocation;
+import io.jboot.Jboot;
+import io.jboot.admin.base.common.CacheKey;
+import io.jboot.admin.base.exception.BusinessException;
+import io.jboot.admin.base.plugin.jwt.JwtToken;
+import io.jboot.utils.StringUtils;
+import io.jboot.web.controller.JbootController;
+
+/**
+ * jwt 拦截器
+ * @author Rlax
+ *
+ */
+public class JwtTokenInterceptor implements Interceptor {
+
+    @Override
+    public void intercept(Invocation inv) {
+
+        if (inv.getController() instanceof JbootController) {
+            JbootController c = (JbootController) inv.getController();
+            String userId = c.getJwtPara("userId");
+            String version = c.getJwtPara("version");
+
+            if (StringUtils.isBlank(userId) || StringUtils.isBlank(version) ) {
+                throw new BusinessException("not auth");
+            }
+
+            // 此处1L 为测试,实际会从服务获取
+            if (!"1".equals(userId)) {
+                throw new BusinessException("not auth");
+            }
+
+            JwtToken jwtToken =  Jboot.me().getCache().get(CacheKey.CACHE_JWT_TOKEN, userId);
+            if (jwtToken == null) {
+                throw new BusinessException("not auth");
+            }
+
+            if (!jwtToken.getVersion().equals(version)) {
+                throw new BusinessException("not auth");
+            }
+        }
+
+        inv.invoke();
+    }
+
+}

+ 7 - 0
jboot-b2c/src/main/resources/jboot.properties

@@ -100,3 +100,10 @@ jboot.mq.redis.password=123456
 jboot.mq.redis.channel=message-channel
 jboot.mq.redis.database=0
 #---------------------------------------------------------------------------------#
+
+#---------------------------------------------------------------------------------#
+jboot.web.jwt.httpHeaderName=Jwt
+jboot.web.jwt.secret=wtSB6bFrfJWLBmfhtyJbpF1L17F7XrGX
+# 60 * 60 * 24 * 7 * 1000
+jboot.web.jwt.validityPeriod=604800000
+#---------------------------------------------------------------------------------#

ファイルの差分が大きいため隠しています
+ 91 - 0
jboot-b2c/src/main/resources/static/css/iconfont.css


ファイルの差分が大きいため隠しています
+ 167 - 0
jboot-b2c/src/main/resources/static/js/jquery-1.4.4.min.js


ファイルの差分が大きいため隠しています
+ 2 - 0
jboot-b2c/src/main/resources/static/js/layui/css/layui.css


ファイルの差分が大きいため隠しています
+ 2 - 0
jboot-b2c/src/main/resources/static/js/layui/css/layui.mobile.css


ファイルの差分が大きいため隠しています
+ 2 - 0
jboot-b2c/src/main/resources/static/js/layui/css/modules/code.css


ファイルの差分が大きいため隠しています
+ 2 - 0
jboot-b2c/src/main/resources/static/js/layui/css/modules/laydate/default/laydate.css


BIN
jboot-b2c/src/main/resources/static/js/layui/css/modules/layer/default/icon-ext.png


BIN
jboot-b2c/src/main/resources/static/js/layui/css/modules/layer/default/icon.png


ファイルの差分が大きいため隠しています
+ 2 - 0
jboot-b2c/src/main/resources/static/js/layui/css/modules/layer/default/layer.css


BIN
jboot-b2c/src/main/resources/static/js/layui/css/modules/layer/default/loading-0.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/css/modules/layer/default/loading-1.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/css/modules/layer/default/loading-2.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/font/iconfont.eot


ファイルの差分が大きいため隠しています
+ 459 - 0
jboot-b2c/src/main/resources/static/js/layui/font/iconfont.svg


BIN
jboot-b2c/src/main/resources/static/js/layui/font/iconfont.ttf


BIN
jboot-b2c/src/main/resources/static/js/layui/font/iconfont.woff


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/0.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/1.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/10.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/11.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/12.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/13.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/14.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/15.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/16.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/17.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/18.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/19.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/2.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/20.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/21.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/22.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/23.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/24.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/25.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/26.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/27.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/28.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/29.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/3.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/30.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/31.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/32.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/33.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/34.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/35.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/36.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/37.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/38.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/39.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/4.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/40.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/41.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/42.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/43.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/44.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/45.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/46.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/47.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/48.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/49.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/5.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/50.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/51.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/52.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/53.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/54.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/55.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/56.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/57.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/58.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/59.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/6.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/60.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/61.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/62.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/63.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/64.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/65.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/66.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/67.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/68.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/69.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/7.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/70.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/71.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/8.gif


BIN
jboot-b2c/src/main/resources/static/js/layui/images/face/9.gif


ファイルの差分が大きいため隠しています
+ 2 - 0
jboot-b2c/src/main/resources/static/js/layui/lay/modules/carousel.js


ファイルの差分が大きいため隠しています
+ 2 - 0
jboot-b2c/src/main/resources/static/js/layui/lay/modules/code.js


+ 0 - 0
jboot-b2c/src/main/resources/static/js/layui/lay/modules/element.js


この差分においてかなりの量のファイルが変更されているため、一部のファイルを表示していません