diff --git a/root/index.html b/root/index.html index 02fed0d..e990677 100644 --- a/root/index.html +++ b/root/index.html @@ -30,15 +30,15 @@
  • - + + 退出 +
  • - - root - +
  • @@ -111,11 +111,14 @@ {name: "关于", url: "/single/about.html"} ], - menus: red.getData("menus", [ - {url:"/qtask/plat.html", name:"业务平台"}, - {url:"/qtask/list.html", name:"QTask"}, - {url:"/qtask/debug.html", name:"QT-Debug"}, - ]), + menus: red.getData("menus", {name: "MetaData", url: "/meta", nodes: [ + /*{url:"/metadata/metatable/list.html", name:"TableList"},*/ + {url:"/metadata/metatable/metaTable.html", name:"MetaTable"}, + /*{url:"/metadata/metaLink.html", name:"MetaLink"},*/ + {url:"/metadata/metaService.html", name:"MetaService"}, + {url:"/metadata/dataList.html", name:"数据查询"}, + ] + }), page: red.getData("page", {url:"/qtask/list.html", name:"QTask"}), pageId: red.getData("pageId", "QTask") }, @@ -143,6 +146,14 @@ loadMain: function (item) { this.menus = item.nodes || [item]; this.pageId = item.name; + }, + logout: function () { + red.getJSON("/user/logout",{}, function () { + red.showMsg({msg:"退出成功"}); + setTimeout(() => { + location.href = "/user/login.html"; + }, 2000) + }) } }, mounted: function () { diff --git a/root/metadata/metaService.html b/root/metadata/metaService.html index 46820d2..ea90317 100644 --- a/root/metadata/metaService.html +++ b/root/metadata/metaService.html @@ -7,6 +7,8 @@ .tlist>li.active>a:hover, .tlist>li>a:hover { background-color: #92b0cb; + border-bottom: 2px solid #607d8b; + color: #fff; } diff --git a/root/res/css/red-kit.css b/root/res/css/red-kit.css index 4b280db..f146ab3 100644 --- a/root/res/css/red-kit.css +++ b/root/res/css/red-kit.css @@ -28,21 +28,23 @@ body { } #top a { color: #ddd; + font-size: 15px; } #top .nav-tabs{ border-bottom:0; } -.nav-tabs>li>a{ +#top>.nav-tabs>li>a{ border: 0; - font-size: 15px; } - -.nav-tabs>li.active>a, .nav-tabs>li.active>a:focus, .nav-tabs>li.active>a:hover, .nav-tabs>li>a:hover { +#top>.nav-tabs>li.active>a, +#top>.nav-tabs>li.active>a:focus, +#top>.nav-tabs>li.active>a:hover, +#top>.nav-tabs>li>a:hover { background-color: #404a53; color: #fff; border: 0; - border-bottom: 2px solid #607d8b; + border-bottom: 3px solid #607d8b; } #left { diff --git a/root/user/login.html b/root/user/login.html index f69c089..9707e41 100644 --- a/root/user/login.html +++ b/root/user/login.html @@ -100,12 +100,12 @@ doc:"sys_plat", shows: JSON.stringify(["_id", "_key", "name", "token","remark", "status"]) }; - red.getJSON("/meta/find", para, function (json) { - vm.sysPlats = json.rows; + red.getJSON("/meta/plat_list", {}, function (json) { + vm.sysPlats = json; if (!vm.sysPlat) { - vm.sysPlat = json.rows[0]; + vm.sysPlat = json[0]; } - red.setData("sysPlats", json.rows); + red.setData("sysPlats", json); }); }, goIndex: function () { diff --git a/src/main/java/net/tccn/service/BaseServlet.java b/src/main/java/net/tccn/service/BaseServlet.java index 8566fc7..cc0770e 100644 --- a/src/main/java/net/tccn/service/BaseServlet.java +++ b/src/main/java/net/tccn/service/BaseServlet.java @@ -2,12 +2,17 @@ package net.tccn.service; import com.arangodb.ArangoDBException; import com.google.gson.Gson; +import net.tccn.base.JBean; import net.tccn.base.Kv; import net.tccn.base.arango.ArangoSource; +import net.tccn.user.User; +import net.tccn.user.UserService; import org.redkale.net.http.HttpRequest; import org.redkale.net.http.HttpResponse; +import org.redkale.net.http.HttpScope; import org.redkale.net.http.HttpServlet; +import javax.annotation.Resource; import java.io.IOException; import java.util.logging.Level; import java.util.logging.Logger; @@ -17,6 +22,9 @@ import java.util.logging.Logger; */ public class BaseServlet extends HttpServlet { + @Resource + private UserService userService; + public Logger logger = Logger.getLogger(this.getClass().getSimpleName()); protected static Gson gson = new Gson(); @@ -31,8 +39,8 @@ public class BaseServlet extends HttpServlet { } if (sessionid != null) { - //User user = userService.current(sessionid); - //request.setCurrentUser(user); + User user = userService.current(sessionid); + request.setCurrentUser(user); } super.preExecute(request, response); @@ -40,7 +48,7 @@ public class BaseServlet extends HttpServlet { @Override protected void authenticate(HttpRequest request, HttpResponse response) throws IOException { - /* fixme: 权限拦截 + //fixme: 权限拦截 if (request.currentUser() == null) { if ("XMLHttpRequest".equals(request.getHeader("X-Requested-With"))){ response.finish(JBean.by(-2, "未登陆")); @@ -48,7 +56,7 @@ public class BaseServlet extends HttpServlet { response.finish(HttpScope.refer("/user/login.html")); } return; - }*/ + } super.authenticate(request, response); } diff --git a/src/main/java/net/tccn/service/MetadataService.java b/src/main/java/net/tccn/service/MetadataService.java index 7b86ab8..5c5aae3 100644 --- a/src/main/java/net/tccn/service/MetadataService.java +++ b/src/main/java/net/tccn/service/MetadataService.java @@ -199,4 +199,13 @@ public class MetadataService extends BaseService { //arango return JBean.by(0, ""); } + @RestMapping(name = "plat_list", comment = "平台列表") + public JBean platList() { + JBean jBean = new JBean(); + List plats = SysPlat.dao.find(); + + jBean.setBody(plats); + return jBean; + } + } diff --git a/src/main/java/net/tccn/user/User.java b/src/main/java/net/tccn/user/User.java new file mode 100644 index 0000000..a6d7202 --- /dev/null +++ b/src/main/java/net/tccn/user/User.java @@ -0,0 +1,108 @@ +package net.tccn.user; + +import net.tccn.base.JBean; +import net.tccn.base.arango.Doc; +import org.redkale.convert.ConvertColumn; +import org.redkale.convert.ConvertType; +import org.redkale.convert.json.JsonConvert; +import org.redkale.util.Utility; + +import javax.persistence.Table; + +/** + * @author: liangxianyou at 2018/11/22 17:37. + */ +@Table(name = "sys_user", catalog = "db_dev") +public class User extends Doc { + public static User dao = dao(User.class); + + private String username; + private String pwd; + private Long createTime; + private Long loginTime; + private Integer status; + private String sessionid; + + public User() { + } + + public User(String sessionid) { + this.sessionid = sessionid; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + @ConvertColumn(ignore = true,type = ConvertType.JSON) + public String getPwd() { + return pwd; + } + + public void setPwd(String pwd) { + this.pwd = pwd; + } + + public Long getCreateTime() { + return createTime; + } + + public void setCreateTime(Long createTime) { + this.createTime = createTime; + } + + public Long getLoginTime() { + return loginTime; + } + + public void setLoginTime(Long loginTime) { + this.loginTime = loginTime; + } + + public Integer getStatus() { + return status; + } + + public void setStatus(Integer status) { + this.status = status; + } + + public String getSessionid() { + return sessionid; + } + + public void setSessionid(String sessionid) { + this.sessionid = sessionid; + } + + @Override + public String toString() { + return JsonConvert.root().convertTo(this); + } + + //------------------------------- + + public static String md5IfNeed(String password){ + if (password == null || password.length() == 0) { + return ""; + } + return Utility.md5Hex(password); + } + + public JBean checkLogin(String pwd) { + JBean jBean = JBean.by(0, ""); + + if (!this.pwd.equalsIgnoreCase(md5IfNeed(pwd))) { + jBean.set(-1, "密码错误"); + } else if (status != 1) { + jBean.set(-1, "登陆失败,限制登陆。"); + } + jBean.setBody(this); + return jBean; + } + +} diff --git a/src/main/java/net/tccn/user/UserService.java b/src/main/java/net/tccn/user/UserService.java new file mode 100644 index 0000000..d90ce9d --- /dev/null +++ b/src/main/java/net/tccn/user/UserService.java @@ -0,0 +1,56 @@ +package net.tccn.user; + +import net.tccn.base.JBean; +import net.tccn.service.BaseService; +import org.redkale.net.http.RestMapping; +import org.redkale.net.http.RestService; +import org.redkale.net.http.RestSessionid; + +/** + * @author: liangxianyou at 2018/11/22 17:16. + */ +@RestService(name = "user", automapping = true, comment = "用户服务") +public class UserService extends BaseService { + + @RestMapping(name = "login", auth = false, comment = "登陆验证") + public JBean login(@RestSessionid String sessionid, + String username, + String pwd) { + User bean = new User(); + bean.setUsername(username); + + User user = User.dao.findFirst(bean); + if (user == null) { + return JBean.by(-1, "登陆失败:账号无效"); + } + + JBean jBean = user.checkLogin(pwd); + if (jBean.getCode() == 0) { + cacheSource.set(30 * 60 * 2,sessionid, User.class, user); + + user.setSessionid(sessionid); + user.setLoginTime(System.currentTimeMillis()); + user.update(); + } + + return jBean; + } + + @RestMapping(name = "current") + public User current(@RestSessionid String sessionid) { + return getT("user_" + sessionid, User.class, () -> User.dao.findFirst(new User(sessionid))); + } + + @RestMapping(name = "logout", comment = "退出登陆") + public JBean logout(@RestSessionid String sessionid) { + User user = User.dao.findFirst(new User(sessionid)); + if (user != null) { + user.setSessionid(""); + user.update(); + } + cacheSource.removeAsync("user_" + sessionid); + + return new JBean(); + } + +} diff --git a/src/test/java/RunTest.java b/src/test/java/RunTest.java index 23b7912..ad619f1 100644 --- a/src/test/java/RunTest.java +++ b/src/test/java/RunTest.java @@ -39,7 +39,7 @@ public class RunTest { //System.out.println(query.getClass()); } ParseMysql parser = new ParseMysql(); - @Test + //@Test public void parseFBeanTest() { FBean fBean = new Gson().fromJson("{name:'user_service', filters:[{col:'a.username',type:'like',value:'lxy'}], orders:[{col:a.`id`,desc: -1},{col:a.`deptName`,desc: 1}], limit:{ps:2,pn:10}}", FBean.class); @@ -96,8 +96,8 @@ public class RunTest { System.out.println(s); System.out.println("--------------"); - Date date1 = Kv.toAs("Sun Mar 17 12:11:12 CST 2019", Date.class); - System.out.println(date1); + //Date date1 = Kv.toAs("Sun Mar 17 12:11:12 CST 2019", Date.class); + //System.out.println(date1); }