From 0f2da43c89ad2eb5373e0555794b27f9c5ee2546 Mon Sep 17 00:00:00 2001 From: lyf666 Date: Mon, 9 Oct 2017 10:09:53 +0800 Subject: [PATCH] auth,username duplicate check,filter,change passwd, default passwd --- src/main/java/Main.kt | 31 +- src/main/java/config/Const.kt | 2 + src/main/java/model/Model.kt | 144 +++++++- src/main/java/route/CtrlMenu.kt | 4 +- src/main/java/route/CtrlUser.kt | 58 +++- src/main/java/service/Service.kt | 549 +++++++++++++++++-------------- src/main/java/util/Util.kt | 61 +++- 7 files changed, 548 insertions(+), 301 deletions(-) diff --git a/src/main/java/Main.kt b/src/main/java/Main.kt index 3dfdf09..967653b 100644 --- a/src/main/java/Main.kt +++ b/src/main/java/Main.kt @@ -1,7 +1,7 @@ import com.jfinal.plugin.activerecord.ActiveRecordPlugin import com.jfinal.plugin.druid.DruidPlugin -import model.ModelMenu2 -import model.ModelUser2 +import model.JFinalModelMenu +import model.JFinalModelUser import org.slf4j.LoggerFactory import ro.pippo.controller.ControllerApplication import ro.pippo.core.Pippo @@ -10,6 +10,8 @@ import ro.pippo.session.SessionManager import ro.pippo.session.SessionRequestResponseFactory import ro.pippo.session.cookie.CookieSessionDataStorage import route.* +import service.Service +import util.md5 object Main { @@ -52,6 +54,25 @@ class BasicApplication : ControllerApplication() { println("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<") } + ANY("/.*") { routeContext -> + if (routeContext.requestUri.contains("user/auth")) { + routeContext.next() + return@ANY + } else { + val token = routeContext.getSession("token") + val name = routeContext.getSession("name") + if (token != null && name != null) { + val user = Service().getUserByName(name) + if (user != null) { + if (token == md5(user.name + ":" + user.passwd)) { + routeContext.next() + return@ANY + } + } + } + } + }.runAsFinally() + addControllers(CtrlUser::class.java) addControllers(CrtlGroup::class.java) addControllers(CtrlMenu::class.java) @@ -59,19 +80,21 @@ class BasicApplication : ControllerApplication() { addControllers(CtrlRole::class.java) + val dp = DruidPlugin( "jdbc:mysql://rm-wz9n28sq10rz5b0u2o.mysql.rds.aliyuncs.com:3306/sh-upgram?serverTimezone=Asia/Shanghai", "shzhyjxy", "Admin111") val arp = ActiveRecordPlugin(dp) - arp.addMapping("menu", ModelMenu2::class.java) - arp.addMapping("user", ModelUser2::class.java) + arp.addMapping("menu", JFinalModelMenu::class.java) + arp.addMapping("user", JFinalModelUser::class.java) dp.start() arp.start() PUT("/test") { context -> context.send("ok") } + } override fun createRequestResponseFactory(): RequestResponseFactory { diff --git a/src/main/java/config/Const.kt b/src/main/java/config/Const.kt index 431d88c..3a4e4de 100644 --- a/src/main/java/config/Const.kt +++ b/src/main/java/config/Const.kt @@ -8,6 +8,7 @@ object Const { val msgEmptyMsg = "" val msgNotFoundById = "根据id没有找到对应资源" + val msgNotFound = "没有找到对应资源" val msgInsertUserFailed = "新增用户失败,请检查参数,或许已有相同用户存在" val msgUpdateUserFailed = "更新用户信息失败" val msgUpdateRoleFailed = "更新角色信息失败" @@ -17,4 +18,5 @@ object Const { val msgInvalidParams = "参数错误" val msgOperationFailed = "操作失败" val msgCheckNameFailed = "用户名不存在,请重新输入" + val msgDuplicateUserName = "用户名已存在" } \ No newline at end of file diff --git a/src/main/java/model/Model.kt b/src/main/java/model/Model.kt index bc35013..76b268b 100644 --- a/src/main/java/model/Model.kt +++ b/src/main/java/model/Model.kt @@ -2,34 +2,152 @@ package model import com.jfinal.plugin.activerecord.Model import java.sql.Timestamp +import kotlin.reflect.full.memberProperties + +data class ModelUser(val id: Int?, var name: String?, var passwd: String?, val groupId: Int/*default -1*/, val roleId: Int/*default -1*/, val createTime: Timestamp?) { + companion object { + fun fromJFinal(model: Model<*>): ModelUser { + return ModelUser( + id = model.getInt("id"), + name = model.getStr("name"), + passwd = model.getStr("passwd"), + groupId = model.getInt("groupId"), + roleId = model.getInt("roleId"), + createTime = model.getTimestamp("createTime") + ) + } + } + + fun toJFinal(): Model<*> { + val model = JFinalModelUser() + this::class.memberProperties.forEach { + model.set(it.name, it.getter.call(this)) + } + return model + } -class ModelUser(val id: Int?, var name: String?, var passwd: String?, val groupId: Int/*default -1*/, val roleId: Int/*default -1*/, val createTime: Timestamp?) { constructor() : this(null, null, null, -1, -1, null) } data class ModelGroup(val id: Int?, val description: String, val createTime: Timestamp?) { + companion object { + fun fromJFinal(model: Model<*>): ModelGroup { + return ModelGroup( + id = model.getInt("id"), + description = model.getStr("description"), + createTime = model.getTimestamp("createTime") + ) + } + } + + fun toJFinal(): Model<*> { + val model = JFinalModelGroup() + this::class.memberProperties.forEach { + model.set(it.name, it.getter.call(this)) + } + return model + } + constructor() : this(null, "", null) } data class ModelPerm(val id: Int?, val description: String?, val perm: String?, val createTime: Timestamp?) { + companion object { + fun fromJFinal(model: Model<*>): ModelPerm { + return ModelPerm( + id = model.getInt("id"), + description = model.getStr("description"), + perm = model.getStr("perm"), + createTime = model.getTimestamp("createTime") + ) + } + } + + fun toJFinal(): Model<*> { + val model = JFinalModelGroup() + this::class.memberProperties.forEach { + model.set(it.name, it.getter.call(this)) + } + return model + } + constructor() : this(null, null, null, null) } -data class ModelMenu(val id: Int?, val description: String?, val url: String?, val permId: Int?, val parentId:Int?, val createTime: Timestamp?) { - constructor() : this(null, null, null, -1, -1,null) -} +data class ModelMenu(val id: Int?, val description: String?, val url: String?, val permId: Int?, val parentId: Int?, val createTime: Timestamp?) { + companion object { + fun fromJFinal(model: Model<*>): ModelMenu { + return ModelMenu( + id = model.getInt("id"), + description = model.getStr("description"), + url = model.getStr("url"), + permId = model.getInt("permId"), + parentId = model.getInt("parentId"), + createTime = model.getTimestamp("createTime") + ) + } + } -class ModelMenu2() : Model() { - companion object { - val DAO: ModelMenu2 = ModelMenu2() - } -} -class ModelUser2() : Model() { - companion object { - val DAO: ModelUser2 = ModelUser2() + fun toJFinal(): Model<*> { + val model = JFinalModelMenu() + this::class.memberProperties.forEach { + model.set(it.name, it.getter.call(this)) + } + return model } + + constructor() : this(null, null, null, -1, -1, null) } data class ModelRole(val id: Int?, val description: String?, val createTime: Timestamp?) { + companion object { + fun fromJFinal(model: Model<*>): ModelRole { + return ModelRole( + id = model.getInt("id"), + description = model.getStr("description"), + createTime = model.getTimestamp("createTime") + ) + } + } + + fun toJFinal(): Model<*> { + val model = JFinalModelRole() + this::class.memberProperties.forEach { + model.set(it.name, it.getter.call(this)) + } + return model + } + constructor() : this(null, null, null) -} \ No newline at end of file +} + +class JFinalModelUser() : Model() { + companion object { + val DAO: JFinalModelUser = JFinalModelUser() + } +} + +class JFinalModelGroup() : Model() { + companion object { + val DAO: JFinalModelGroup = JFinalModelGroup() + } +} + +class JFinalModelRole() : Model() { + companion object { + val DAO: JFinalModelRole = JFinalModelRole() + } +} + +class JFinalModelMenu() : Model() { + companion object { + val DAO: JFinalModelMenu = JFinalModelMenu() + } +} + +class JFinalModelPerm() : Model() { + companion object { + val DAO: JFinalModelPerm = JFinalModelPerm() + } +} + diff --git a/src/main/java/route/CtrlMenu.kt b/src/main/java/route/CtrlMenu.kt index f99ae96..9d6d30b 100644 --- a/src/main/java/route/CtrlMenu.kt +++ b/src/main/java/route/CtrlMenu.kt @@ -5,7 +5,7 @@ import com.jfinal.plugin.activerecord.Db import com.jfinal.plugin.activerecord.Record import model.JSONResponse import model.ModelMenu -import model.ModelMenu2 +import model.JFinalModelMenu import ro.pippo.controller.* import ro.pippo.controller.extractor.Param import service.Service @@ -53,7 +53,7 @@ class CtrlMenu : Controller() { if (menu == null) { return responseInvalidParams() } - val menu2 = ModelMenu2() + val menu2 = JFinalModelMenu() menu2.put("description", menu.description) menu2.put("url", menu.url) menu2.put("permId", menu.permId) diff --git a/src/main/java/route/CtrlUser.kt b/src/main/java/route/CtrlUser.kt index 7e941cd..2c5e5d6 100644 --- a/src/main/java/route/CtrlUser.kt +++ b/src/main/java/route/CtrlUser.kt @@ -3,6 +3,7 @@ package route import com.jfinal.kit.JsonKit import com.jfinal.plugin.activerecord.Db import com.jfinal.plugin.activerecord.Record +import config.Const import model.JSONResponse import model.ModelUser import ro.pippo.controller.* @@ -42,12 +43,16 @@ class CtrlUser : Controller() { if (user == null) { return responseInvalidParams() } - val isSuccess = service.saveUser(user) - return if (isSuccess) { - user.passwd = "" - responseSuccess(user) + val (status, isSuccess) = service.saveUser(user) + return if (status == Service.Status.DUPLICATED) { + JSONResponse(Const.codeInvalidParams, Const.msgDuplicateUserName, null) } else { - responseOperationFailed() + if (isSuccess) { + user.passwd = "" + responseSuccess(user) + } else { + responseOperationFailed() + } } } @@ -69,33 +74,36 @@ class CtrlUser : Controller() { } } } + //校验用户名是否存在 @POST("/checkName/{name}") @Produces(Produces.JSON) - fun checkName(@Param("name") name : String ) :JSONResponse{ - if ( null == name || "" == name.trim()){ + fun checkName(@Param("name") name: String): JSONResponse { + if (null == name || "" == name.trim()) { responseCheckNameFailed() } service.getUserByName(name) ?: return responseCheckNameFailed() return responseSuccess(true) } + //更新 User @POST("/update") @Produces(Produces.JSON) - fun updateUser() :JSONResponse{ + fun updateUser(): JSONResponse { if (request.parameters["id"] != null) { val record = Record() - updateUtil(record,request) - val isSuccess = Db.update("user","id",record) - return if (isSuccess){ + updateUtil(record, request) + val isSuccess = Db.update("user", "id", record) + return if (isSuccess) { responseSuccess(true) - } else{ + } else { responseUpdateUserFailed() } - }else { + } else { return responseUpdateUserFailed() } } + @POST("/del/{id: [0-9]+}") @Produces(Produces.JSON) fun delUser(@Param("id") id: Int): JSONResponse { @@ -126,7 +134,7 @@ class CtrlUser : Controller() { return if (user == null) { responseNotFoundById() } else { - val isSuccess = service.changePasswd(user, passwd!!) + val (isSuccess, _) = service.changePasswd(user, passwd!!) if (isSuccess) { responseSuccess(true) } else { @@ -135,6 +143,28 @@ class CtrlUser : Controller() { } } + @POST("/auth") + @Produces(Produces.JSON) + fun auth(): JSONResponse { + val name = request.getQueryParameter("name")?.toString(null) + val passwd = request.getQueryParameter("passwd")?.toString(null) + + if (name == null || passwd == null) { + return responseInvalidParams() + } + + val user = service.getUserByName(name) + if (user == null) { + return JSONResponse(Const.codeResourceNotFound, Const.msgNotFound, null) + } else { + val session = request.getSession(true) + val token = md5(name + ":" + passwd) + session.put("name", name) + session.put("token", token) + return responseSuccess(token) + } + } + @POST("/bindGroup/{userId: [0-9]+}/{groupId: [0-9]+}") @Produces(Produces.JSON) fun bindGroup(@Param("userId") userId: Int, @Param("groupId") groupId: Int): JSONResponse { diff --git a/src/main/java/service/Service.kt b/src/main/java/service/Service.kt index 4f47250..7fe877d 100644 --- a/src/main/java/service/Service.kt +++ b/src/main/java/service/Service.kt @@ -1,17 +1,261 @@ package service import com.jfinal.plugin.activerecord.Db +import com.jfinal.plugin.activerecord.Model import com.jfinal.plugin.activerecord.Page import com.jfinal.plugin.activerecord.Record import model.* import sun.reflect.generics.reflectiveObjects.NotImplementedException import util.* +import kotlin.reflect.KClass +import kotlin.reflect.full.companionObjectInstance +import kotlin.reflect.full.functions class Service { + /* + 通用函数 + */ + + private fun getDAOFromClass(cls: KClass<*>): Model<*> { + return when (cls) { + ModelUser::class -> JFinalModelUser.DAO + ModelRole::class -> JFinalModelRole.DAO + ModelGroup::class -> JFinalModelGroup.DAO + ModelPerm::class -> JFinalModelPerm.DAO + ModelMenu::class -> JFinalModelMenu.DAO + else -> throw IllegalArgumentException() + } + } + + fun getById(cls: KClass<*>, id: Int): T? { + val dao = getDAOFromClass(cls) + val model = dao.findById(id) ?: return null + + val companion = cls.companionObjectInstance!! + val func = companion::class.functions.filter { "fromJFinal" == it.name }.first() + val ret = func.call(companion, model) + return ret as T? + } + + fun getByColumn(cls: KClass<*>, instance: Any) { + throw NotImplementedException() + } + + fun save(cls: KClass<*>, instance: Any): Boolean { + val model = instance::class.functions.filter { "toJFinal" == it.name }.first() as Model<*> + return model.save() + } + + fun save(cls: KClass<*>, instance: Any, modelNeedReturn: Boolean): Pair { + if (modelNeedReturn) { + val model = instance::class.functions.filter { "toJFinal" == it.name }.first() as Model<*> + val companion = cls.companionObjectInstance!! + val func = companion::class.functions.filter { "fromJFinal" == it.name }.first() + val ret = func.call(companion, model) + return (ret as T) to model.save() + } else { + return null to save(cls, instance) + } + } + + fun update(cls: KClass<*>, instance: Any): Boolean { + val model = instance::class.functions.filter { "toJFinal" == it.name }.first() as Model<*> + return model.update() + } + + fun update(cls: KClass<*>, instance: Any, modelNeedReturn: Boolean): Pair { + if (modelNeedReturn) { + val model = instance::class.functions.filter { "toJFinal" == it.name }.first() as Model<*> + val companion = cls.companionObjectInstance!! + val func = companion::class.functions.filter { "fromJFinal" == it.name }.first() + val ret = func.call(companion, model) + return (ret as T) to model.update() + } else { + return null to save(cls, instance) + } + } + + fun deleteById(cls: KClass<*>, id: Int): Boolean { + val dao = getDAOFromClass(cls) + return dao.deleteById(id) + } + //分隔符 + + fun isUserNameDuplicate(name: String): Boolean { + val userModel = JFinalModelUser.DAO.findFirst("select * from `user` where name='$name'") + return userModel != null + } + + fun saveUser(user: ModelUser): Pair { + var isDuplicated = false + if (user.name != null) { + isDuplicated = isUserNameDuplicate(user.name!!) + } + + return if (isDuplicated) { + Status.DUPLICATED to false + } else { + user.passwd = "111" + val result = save(ModelUser::class, user) + if (result) { + Status.SUCCESS to result + } else { + Status.FAILED_WITH_UNKNOWN_REASON to result + } + } + + } + + fun getGroupByUserId(userId: Int): ModelGroup? { + val userModel = JFinalModelUser.DAO.findById(userId) ?: return null + val user = ModelUser.fromJFinal(userModel) + + val groupModel = JFinalModelGroup.DAO.findById(user.groupId) ?: return null + return ModelGroup.fromJFinal(groupModel) + } + + fun changePasswd(user: ModelUser, passwd: String): Pair { + val userModel = user.toJFinal() + val result = userModel.set("passwd", passwd).update() + return if (result) { + true to ModelUser.fromJFinal(userModel.remove("passwd")) + } else { + false to null + } + } + + fun bindUserToGroup(userId: Int, groupId: Int): Boolean { + JFinalModelGroup.DAO.findById(groupId) ?: return false + val userModel = JFinalModelUser.DAO.findById(userId) ?: return false + userModel.set("groupId", groupId) + return userModel.update() + } + + fun unbindUserToGroup(userId: Int, groupId: Int): Boolean { + JFinalModelGroup.DAO.findById(groupId) ?: return false + val userModel = JFinalModelUser.DAO.findById(userId) ?: return false + userModel.set("groupId", -1) + return userModel.update() + } + + fun getRoleByUserId(userId: Int): ModelRole? { + val userModel = JFinalModelUser.DAO.findById(userId) ?: return null + val user = ModelUser.fromJFinal(userModel) + + val roleModel = JFinalModelRole.DAO.findById(user.roleId) ?: return null + return ModelRole.fromJFinal(roleModel) + } + + fun bindUserToRole(userId: Int, roleId: Int): Boolean { + JFinalModelRole.DAO.findById(roleId) ?: return false + val userModel = JFinalModelUser.DAO.findById(userId) ?: return false + userModel.set("roleId", roleId) + return userModel.update() + } + + fun unbindUserToRole(userId: Int, roleId: Int): Boolean { + JFinalModelGroup.DAO.findById(roleId) ?: return false + val userModel = JFinalModelUser.DAO.findById(userId) ?: return false + userModel.set("roleId", -1) + return userModel.update() + } + + fun getPermByRoleId(roleId: Int): List { + val list = mutableListOf() + val perms = JFinalModelPerm.DAO.find( + """ + select * from perm t + where exists( + select * from mapping_perm_role m where m.roleid = ? + ) + """.trim() + ) ?: return list + perms.forEach { + list.add(ModelPerm.fromJFinal(it)) + } + return list + } + + fun bindPermToRole(permId: Int, roleId: Int): Boolean { + JFinalModelRole.DAO.findById(roleId) ?: return false + JFinalModelPerm.DAO.findById(permId) ?: return false + val record = Db.findFirst("select * from mapping_perm_role where permId=$permId and roleId=$roleId") + return if (record != null) true + else Db.save("mapping_perm_role", Record().set("permId", permId).set("roleId", roleId)) + } + + fun unbindPermToRole(permId: Int, roleId: Int): Boolean { + JFinalModelRole.DAO.findById(roleId) ?: return false + JFinalModelPerm.DAO.findById(permId) ?: return false + Db.findFirst("select * from mapping_perm_role where permId=$permId and roleId=$roleId") ?: return true + return Db.delete("mapping_perm_role", Record().set("permId", permId).set("roleId", roleId)) + } + + fun getMenuByRole(roleId: Int): List { + //todo join + throw NotImplementedException() + } + + fun bindMenuToPerm(menuId: Int, permId: Int): Boolean { + JFinalModelPerm.DAO.findById(permId) ?: return false + val menu = JFinalModelMenu.DAO.findById(menuId) ?: return false + menu.set("permId", permId) + return menu.save() + } + + fun unbindMenuToPerm(menuId: Int, permId: Int): Boolean { + JFinalModelPerm.DAO.findById(permId) ?: return false + val menu = JFinalModelMenu.DAO.findById(menuId) ?: return false + menu.set("permId", -1) + return menu.save() + } + + private fun getTableNameFromClass(cls: KClass<*>): String { + return when (cls) { + ModelUser::class -> "`user`" + ModelRole::class -> "`role`" + ModelGroup::class -> "`group`" + ModelPerm::class -> "`perm`" + ModelMenu::class -> "`menu`" + else -> throw IllegalArgumentException() + } + } + + fun simplePagi(cls: KClass<*>, page: Int, size: Int): Page { + val tableName = getTableNameFromClass(cls) + return Db.paginate(page, size, "select *", "from `$tableName`") + } + + @Deprecated("", ReplaceWith("simplePagi")) + fun pagiUser(page: Int, size: Int): Page { + return Db.paginate(page, size, "select *", "from `user`") + } + + @Deprecated("", ReplaceWith("simplePagi")) + fun pagiGroup(page: Int, size: Int): Page { + return Db.paginate(page, size, "select *", "from `group`") + } + + @Deprecated("", ReplaceWith("simplePagi")) + fun pagiMenu(page: Int, size: Int): Page { + return Db.paginate(page, size, "select *", "from `menu`") + } + + @Deprecated("", ReplaceWith("simplePagi")) + fun pagiPerm(page: Int, size: Int): Page { + return Db.paginate(page, size, "select *", "from `perm`") + } + + @Deprecated("", ReplaceWith("simplePagi")) + fun pagiRole(page: Int, size: Int): Page { + return Db.paginate(page, size, "select *", "from `role`") + } + + @Deprecated("") fun getUserById(id: Int): ModelUser? { val conn = DBUtil.getConnection() val prep = conn.prepareStatement("select * from `user` where id=?") - prep.setInt(1,id) + prep.setInt(1, id) val rs = prep.executeQuery() return if (rs.next()) { val user = rsToUser(rs) @@ -21,42 +265,34 @@ class Service { null } } - fun getUserByName(userName : String ) : ModelUser? { + + @Deprecated("") + fun getUserByName(userName: String): ModelUser? { val conn = DBUtil.getConnection() - val prep = conn.prepareStatement("select * from `user` where name=?"); - prep.setString(1,userName) + val prep = conn.prepareStatement("select * from `user` where name=?") + prep.setString(1, userName) val rs = prep.executeQuery(); - return if (rs.next()){ + return if (rs.next()) { val user = rsToUser(rs) conn.close() return user - }else { + } else { null } } - fun saveUser(user: ModelUser): Boolean { - val conn = DBUtil.getConnection() - try { - conn.createStatement() - .execute(userToInsertSQL(user)) - - return true - } catch (e: Exception) { - return false - } finally { - conn.close() - } - } + @Deprecated("") fun updateUser(user: ModelUser): Boolean { - throw NotImplementedException() + throw NotImplementedException() } + + @Deprecated("") fun deleteUser(userId: Int): Boolean { val conn = DBUtil.getConnection() try { - val prep = conn.prepareStatement("delete from `user` where id=?") - prep.setInt(1,userId) + val prep = conn.prepareStatement("delete from `user` where id=?") + prep.setInt(1, userId) prep.execute() return true } catch (e: Exception) { @@ -66,30 +302,7 @@ class Service { } } - fun changePasswd(user: ModelUser, passwd: String): Boolean { - throw NotImplementedException() - } - - fun getGroupByUserId(userId: Int): ModelGroup? { - val user = getUserById(userId) - if (user == null) { - return null - } - val conn = DBUtil.getConnection() - try { - val prep = conn.prepareStatement("select * from `group` where id=?") - prep.setInt(1,user.groupId) - val rs = prep.executeQuery() - return if (rs.next()) { - return rsToGroup(rs) - } else { - null - } - } finally { - conn.close() - } - } - + @Deprecated("") fun saveGroup(group: ModelGroup): Boolean { val conn = DBUtil.getConnection() try { @@ -105,15 +318,17 @@ class Service { } } + @Deprecated("") fun updateGroup(group: ModelGroup): Boolean { throw NotImplementedException() } + @Deprecated("") fun deleteGroup(groupId: Int): Boolean { val conn = DBUtil.getConnection() try { val prep = conn.prepareStatement("delete from `group` where id=?") - prep.setInt(1,groupId) + prep.setInt(1, groupId) prep.execute() return true } catch (e: Exception) { @@ -123,11 +338,12 @@ class Service { } } + @Deprecated("") fun getGroupById(groupId: Int): ModelGroup? { val conn = DBUtil.getConnection() try { val prep = conn.prepareStatement("select * from `group` where id=?") - prep.setInt(1,groupId) + prep.setInt(1, groupId) val rs = prep.executeQuery() return if (rs.next()) { return rsToGroup(rs) @@ -139,39 +355,12 @@ class Service { } } - fun bindUserToGroup(userId: Int, groupId: Int): Boolean { - val user = getUserById(userId) - if (user == null) { - return false - } - - val conn = DBUtil.getConnection() - try { - val prep = conn.prepareStatement("update `user` set groupId=? where id=?") - prep.setInt(1,groupId) - prep.setInt(2,userId) - return prep.execute() - } finally { - conn.close() - } - } - - fun unbindUserToGroup(userId: Int, groupId: Int): Boolean { - val conn = DBUtil.getConnection() - try { - val prep = conn.prepareStatement("update `user` set groupId=-1 where id=?") - prep.setInt(1,userId) - return prep.execute() - } finally { - conn.close() - } - } - + @Deprecated("") fun getRoleById(roleId: Int): ModelRole? { val conn = DBUtil.getConnection() try { val prep = conn.prepareStatement("select * from `role` where id=?") - prep.setInt(1,roleId) + prep.setInt(1, roleId) val rs = prep.executeQuery() return if (rs.next()) { @@ -183,41 +372,23 @@ class Service { conn.close() } } - fun getRoleByName(roleName : String ) : ModelRole? { + + @Deprecated("") + fun getRoleByName(roleName: String): ModelRole? { val conn = DBUtil.getConnection() val prep = conn.prepareStatement("select * from `role` where description=?") - prep.setString(1,roleName) + prep.setString(1, roleName) val rs = prep.executeQuery(); - return if (rs.next()){ + return if (rs.next()) { val role = rsToRole(rs) conn.close() return role - }else { + } else { null } } - fun getRoleByUserId(userId: Int): ModelRole? { - val user = getUserById(userId) - if (user == null) { - return null - } - val conn = DBUtil.getConnection() - try { - val prep = conn.prepareStatement("select * from `role` where id=?") - prep.setInt(1,user.roleId) - val rs = prep.executeQuery() - - return if (rs.next()) { - return rsToRole(rs) - } else { - null - } - } finally { - conn.close() - } - } - + @Deprecated("") fun saveRole(role: ModelRole): Boolean { val conn = DBUtil.getConnection() try { @@ -231,11 +402,12 @@ class Service { } } + @Deprecated("") fun deleteRole(roleId: Int): Boolean { val conn = DBUtil.getConnection() try { val prep = conn.prepareStatement("delete from `role` where id=?") - prep.setInt(1,roleId) + prep.setInt(1, roleId) prep.execute() return true @@ -247,49 +419,17 @@ class Service { } } + @Deprecated("") fun updateRole(role: ModelRole): Boolean { throw NotImplementedException() } - fun bindUserToRole(userId: Int, roleId: Int): Boolean { - val user = getUserById(userId) - if (user == null) { - return false - } - - val conn = DBUtil.getConnection() - try { - val prep = conn.prepareStatement("update `user` set roleId=? where id=?") - prep.setInt(1,roleId) - prep.setInt(2,userId) - return prep.execute() - } finally { - conn.close() - } - } - - fun unbindUserToRole(userId: Int, roleId: Int): Boolean { - val user = getUserById(userId) - if (user == null) { - return false - } - - val conn = DBUtil.getConnection() - try { - val prep = conn.prepareStatement("update `user` set roleId=-1 where id=?") - prep.setInt(1,userId) - - return prep.execute() - } finally { - conn.close() - } - } - + @Deprecated("") fun getPermById(permId: Int): ModelPerm? { val conn = DBUtil.getConnection() try { val prep = conn.prepareStatement("select * from `perm` where id=?") - prep.setInt(1,permId) + prep.setInt(1, permId) val rs = prep.executeQuery() @@ -302,41 +442,23 @@ class Service { conn.close() } } - fun getPremByName(permName : String ) : ModelPerm? { + + @Deprecated("") + fun getPremByName(permName: String): ModelPerm? { val conn = DBUtil.getConnection() val prep = conn.prepareStatement("select * from `perm` where description=?") - prep.setString(1,permName) + prep.setString(1, permName) val rs = prep.executeQuery() - return if (rs.next()){ + return if (rs.next()) { val perm = rsToPerm(rs) conn.close() return perm - }else { + } else { null } } - fun getPermByRoleId(roleId: Int): List { - val conn = DBUtil.getConnection() - try { - val prep = conn.prepareStatement(""" - select * from perm t - where exists( - select * from mapping_perm_role m where m.roleid = ? - ) - """.trim()) - prep.setInt(1,roleId) - - val rs = prep.executeQuery() - val list = mutableListOf() - while (rs.next()) { - list.add(rsToPerm(rs)) - } - return list - } finally { - conn.close() - } - } + @Deprecated("") fun savePerm(perm: ModelPerm): Boolean { val conn = DBUtil.getConnection() try { @@ -350,50 +472,17 @@ class Service { } } + @Deprecated("") fun updatePerm(perm: ModelPerm): Boolean { throw NotImplementedException() } + @Deprecated("") fun deletePerm(permId: Int): Boolean { val conn = DBUtil.getConnection() try { val prep = conn.prepareStatement("delete from `perm` where id=?") - prep.setInt(1,permId) - prep.execute() - - return true - } catch (e: Exception) { - return false - } finally { - conn.close() - } - } - - fun bindPermToRole(permId: Int, roleId: Int): Boolean { - val perm = getPermById(permId) - val role = getRoleById(roleId) - if (perm == null || role == null) { - return false - } - - val conn = DBUtil.getConnection() - try { - val prep = conn.prepareStatement("insert into mapping_perm_role(?,?)") - prep.setInt(1,permId) - prep.setInt(2,roleId) - - return prep.execute() - } finally { - conn.close() - } - } - - fun unbindPermToRole(permId: Int, roleId: Int): Boolean { - val conn = DBUtil.getConnection() - try { - val prep = conn.prepareStatement("delete from mapping_perm_role where permId=? and roleId=?)") - prep.setInt(1,permId) - prep.setInt(2,roleId) + prep.setInt(1, permId) prep.execute() return true @@ -404,11 +493,12 @@ class Service { } } + @Deprecated("") fun getMenuById(menuId: Int): ModelMenu? { val conn = DBUtil.getConnection() try { val prep = conn.prepareStatement("select * from `menu` where id=?") - prep.setInt(1,menuId) + prep.setInt(1, menuId) val rs = prep.executeQuery() @@ -422,11 +512,7 @@ class Service { } } - fun getMenuByRole(roleId: Int): List { - //todo join - throw NotImplementedException() - } - + @Deprecated("") fun saveMenu(menu: ModelMenu): Boolean { val conn = DBUtil.getConnection() try { @@ -440,15 +526,17 @@ class Service { } } + @Deprecated("") fun updateMenu(menu: ModelMenu): Boolean { throw NotImplementedException() } + @Deprecated("") fun deleteMenu(menuId: Int): Boolean { val conn = DBUtil.getConnection() try { val prep = conn.prepareStatement("delete from `menu` where id=?") - prep.setInt(1,menuId) + prep.setInt(1, menuId) prep.execute() return true @@ -459,52 +547,7 @@ class Service { } } - fun bindMenuToPerm(menuId: Int, permId: Int): Boolean { - val menu = getMenuById(menuId) - if (menu == null) { - return false - } - - val conn = DBUtil.getConnection() - try { - val prep = conn.prepareStatement("update `menu` set permId=? where id=?") - prep.setInt(1,-1) - prep.setInt(2,-menuId) - prep.execute() - - prep.setInt(1,permId) - prep.setInt(2,menuId) - - val bool = prep.executeUpdate() - return bool == 1 - }finally { - conn.close() - } - } - - fun unbindMenuToPerm(menuId: Int, permId: Int): Boolean { - val prep = DBUtil.getConnection().prepareStatement("update `menu` set permId=-1 where id=?") - prep.setInt(1,menuId) - return prep.execute() - } - - fun pagiUser(page: Int, size: Int): Page { - return Db.paginate(page, size, "select *", "from `user`") - } - - fun pagiGroup(page: Int, size: Int): Page { - return Db.paginate(page, size, "select *", "from `group`") - } - - fun pagiMenu(page: Int, size: Int): Page { - return Db.paginate(page, size, "select *", "from `menu`") - } - - fun pagiPerm(page: Int, size: Int): Page { - return Db.paginate(page, size, "select *", "from `perm`") - } - - fun pagiRole(page: Int, size: Int): Page { - return Db.paginate(page, size, "select *", "from `role`") + enum class Status { + SUCCESS, FAILED_WITH_UNKNOWN_REASON, DUPLICATED } } \ No newline at end of file diff --git a/src/main/java/util/Util.kt b/src/main/java/util/Util.kt index 6aff9d3..9979300 100644 --- a/src/main/java/util/Util.kt +++ b/src/main/java/util/Util.kt @@ -5,6 +5,8 @@ import config.Const import model.* import ro.pippo.core.ParameterValue import ro.pippo.core.Request +import java.security.MessageDigest +import java.security.NoSuchAlgorithmException import java.sql.ResultSet import java.sql.Timestamp import java.text.SimpleDateFormat @@ -18,24 +20,31 @@ fun responseNotFoundById(): JSONResponse { fun responseOperationFailed(): JSONResponse { return JSONResponse(Const.codeServiceOperationFailed, Const.msgOperationFailed, false) } -fun responseUpdateUserFailed() : JSONResponse { - return JSONResponse(Const.codeServiceOperationFailed,Const.msgUpdateUserFailed,null) + +fun responseUpdateUserFailed(): JSONResponse { + return JSONResponse(Const.codeServiceOperationFailed, Const.msgUpdateUserFailed, null) } -fun responseUpdateRoleFailed() : JSONResponse { - return JSONResponse(Const.codeServiceOperationFailed,Const.msgUpdateRoleFailed,null) + +fun responseUpdateRoleFailed(): JSONResponse { + return JSONResponse(Const.codeServiceOperationFailed, Const.msgUpdateRoleFailed, null) } -fun responseUpdateGroupFailed() : JSONResponse { - return JSONResponse(Const.codeServiceOperationFailed,Const.msgUpdateGroupFailed,null) + +fun responseUpdateGroupFailed(): JSONResponse { + return JSONResponse(Const.codeServiceOperationFailed, Const.msgUpdateGroupFailed, null) } -fun responseUpdateMenuFailed() : JSONResponse { - return JSONResponse(Const.codeServiceOperationFailed,Const.msgUpdateMenuFailed,null) + +fun responseUpdateMenuFailed(): JSONResponse { + return JSONResponse(Const.codeServiceOperationFailed, Const.msgUpdateMenuFailed, null) } -fun responseUpdatePermFailed() : JSONResponse { - return JSONResponse(Const.codeServiceOperationFailed,Const.msgUpdatepermFailed,null) + +fun responseUpdatePermFailed(): JSONResponse { + return JSONResponse(Const.codeServiceOperationFailed, Const.msgUpdatepermFailed, null) } + fun responseCheckNameFailed(): JSONResponse { return JSONResponse(Const.codeSuccess, "", false) } + fun responseInvalidParams(): JSONResponse { return JSONResponse(Const.codeInvalidParams, Const.msgInvalidParams, null) } @@ -126,13 +135,35 @@ fun menuToInsertSQL(menu: ModelMenu): String { values('${menu.description}','${menu.description}','${menu.permId}','${Timestamp.from(Instant.now())}') """ } -fun updateUtil(record:Record , request:Request) :Record { - val params : Map = request.parameters - params.forEach{ - if ( null != it.value){ - record.set(it.key, it.value.toString()) +fun updateUtil(record: Record, request: Request): Record { + + val params: Map = request.parameters + params.forEach { + if (null != it.value) { + record.set(it.key, it.value.toString()) } } return record +} + +fun md5(str: String): String { + try { + val instance: MessageDigest = MessageDigest.getInstance("MD5")//获取md5加密对象 + val digest: ByteArray = instance.digest(str.toByteArray())//对字符串加密,返回字节数组 + val sb = StringBuffer() + for (b in digest) { + var i: Int = b.toInt() and 0xff//获取低八位有效值 + var hexString = Integer.toHexString(i)//将整数转化为16进制 + if (hexString.length < 2) { + hexString = "0" + hexString//如果是一位的话,补0 + } + sb.append(hexString) + } + return sb.toString() + + } catch (e: NoSuchAlgorithmException) { + e.printStackTrace() + throw e + } } \ No newline at end of file