Browse Source

登陆登出获取用户信息等

NorthLan 7 years ago
parent
commit
ece2e0324f

+ 4 - 0
zen-api/src/main/kotlin/com/gxzc/zen/api/sys/model/SysRole.kt

@@ -17,6 +17,10 @@ data class SysRole(
          * 角色名称
          */
         var name: String? = null,
+        /**
+         * 角色代码
+         */
+        var code: String? = null,
         /**
          * 权限列表
          */

+ 3 - 0
zen-api/src/main/kotlin/com/gxzc/zen/api/sys/service/impl/SysUserRoleServiceImpl.kt

@@ -7,7 +7,9 @@ import com.gxzc.zen.api.sys.model.SysRole
 import com.gxzc.zen.api.sys.model.SysUserRole
 import com.gxzc.zen.api.sys.service.ISysRoleService
 import com.gxzc.zen.api.sys.service.ISysUserRoleService
+import com.gxzc.zen.common.contants.CACHEKEYS
 import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.cache.annotation.Cacheable
 import org.springframework.stereotype.Service
 
 /**
@@ -23,6 +25,7 @@ class SysUserRoleServiceImpl : ServiceImpl<SysUserRoleMapper, SysUserRole>(), IS
     @Autowired
     private lateinit var sysRoleService: ISysRoleService
 
+    @Cacheable(CACHEKEYS.USER_ROLE, key = "'uid_'+ #id")
     override fun getUserRoleListByUserId(id: Long): MutableList<SysRole> {
         return baseMapper.selectUserRoleListByUserId(id)
     }

+ 10 - 9
zen-api/src/main/resources/mapping/sys/SysRoleMapper.xml

@@ -4,15 +4,16 @@
 
     <!-- 通用查询映射结果 -->
     <resultMap id="BaseResultMap" type="com.gxzc.zen.api.sys.model.SysRole">
-    <result column="id" property="id" />
-    <result column="enable" property="enable" />
-    <result column="remark" property="remark" />
-    <result column="create_time" property="createTime" />
-    <result column="create_by" property="createBy" />
-    <result column="update_time" property="updateTime" />
-    <result column="update_by" property="updateBy" />
-        <result column="name" property="name" />
-        <result column="perms" property="perms" />
+        <result column="id" property="id"/>
+        <result column="enable" property="enable"/>
+        <result column="remark" property="remark"/>
+        <result column="create_time" property="createTime"/>
+        <result column="create_by" property="createBy"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="update_by" property="updateBy"/>
+        <result column="name" property="name"/>
+        <result column="code" property="code"/>
+        <result column="perms" property="perms"/>
     </resultMap>
 
 </mapper>

+ 4 - 6
zen-core/src/main/kotlin/com/gxzc/zen/common/dto/ResultDto.kt → zen-core/src/main/kotlin/com/gxzc/zen/common/dto/ResponseDto.kt

@@ -11,11 +11,9 @@ import java.util.*
  * @date 2018/2/1
  * @url https://noahlan.com
  */
-data class ResultDto(
-        val code: Int,
-        val msg: String?,
-        val data: Any?
-) {
+class ResponseDto {
+    var data: MutableMap<String, Any> = mutableMapOf()
+
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    val time: Date = Dates.today
+    var time: Date = Dates.today
 }

+ 1 - 0
zen-core/src/main/kotlin/com/gxzc/zen/common/exception/ZenExceptionEnum.kt

@@ -12,6 +12,7 @@ enum class ZenExceptionEnum(val code: Int, val msg: String) {
      */
     AUTH_ACCOUNT_NOT_EXISTS(400, "账号不存在"),
     AUTH_PASSWORD_ERROR(400, "密码错误"),
+    AUTH_NO_LOGIN(403, "未登录"),
 
     /**
      * 文件上传

+ 8 - 3
zen-web/src/main/kotlin/com/gxzc/zen/web/sys/controller/AuthController.kt

@@ -1,5 +1,6 @@
 package com.gxzc.zen.web.sys.controller
 
+import com.baomidou.kisso.SSOConfig
 import com.baomidou.kisso.SSOHelper
 import com.baomidou.kisso.annotation.Action
 import com.baomidou.kisso.annotation.Login
@@ -8,7 +9,7 @@ import com.baomidou.kisso.security.token.SSOToken
 import com.gxzc.zen.api.sys.service.ISysUserService
 import com.gxzc.zen.common.base.BaseController
 import com.gxzc.zen.common.dto.RequestDto
-import com.gxzc.zen.common.dto.ResultDto
+import com.gxzc.zen.common.dto.ResponseDto
 import com.gxzc.zen.common.exception.ZenException
 import com.gxzc.zen.common.exception.ZenExceptionEnum
 import io.swagger.annotations.ApiOperation
@@ -40,6 +41,7 @@ class AuthController : BaseController() {
         // 验证输入合法性
         val account = data.data["account"]?.toString()?.trim()
         val password = data.data["password"]?.toString()
+        val rememberMe = data.data["rememberMe"] as Boolean
 
         if (account.isNullOrEmpty() || password.isNullOrEmpty()) {
             throw ZenException(ZenExceptionEnum.REQUEST_NULL)
@@ -53,16 +55,19 @@ class AuthController : BaseController() {
         }
 
         // 生成登陆 token->cookie
+        if (rememberMe) {
+            SSOConfig.getInstance().cookieMaxage = 604800
+        }
         SSOHelper.setCookie(getRequest(), getResponse(), SSOToken.create().setId(user.id), true)
 
         // redirectURL
-        return ResponseEntity.ok(ResultDto(200, "success", data.data["redirectURL"]))
+        return ResponseEntity.ok(null)
     }
 
     @ApiOperation(value = "登出")
     @DeleteMapping("/logout")
     fun logout(): ResponseEntity<*> {
-        SSOHelper.logout(getRequest(), getResponse())
+        SSOHelper.clearLogin(getRequest(), getResponse())
         return ResponseEntity.ok(null)
     }
 }

+ 12 - 0
zen-web/src/main/kotlin/com/gxzc/zen/web/sys/controller/ExampleController.kt

@@ -4,12 +4,18 @@ import com.baomidou.kisso.SSOHelper
 import com.baomidou.kisso.annotation.Action
 import com.baomidou.kisso.annotation.Login
 import com.baomidou.kisso.annotation.Permission
+import com.baomidou.kisso.security.token.SSOToken
 import com.gxzc.zen.api.sys.service.ISysPermissionService
+import com.gxzc.zen.api.sys.service.ISysUserRoleService
 import com.gxzc.zen.api.sys.service.ISysUserService
 import com.gxzc.zen.common.base.BaseController
+import com.gxzc.zen.common.dto.ResponseDto
+import com.gxzc.zen.common.exception.ZenException
+import com.gxzc.zen.common.exception.ZenExceptionEnum
 import org.slf4j.LoggerFactory
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.cache.CacheManager
+import org.springframework.http.ResponseEntity
 import org.springframework.web.bind.annotation.GetMapping
 import org.springframework.web.bind.annotation.RestController
 
@@ -29,6 +35,12 @@ class ExampleController : BaseController() {
     @Autowired
     private lateinit var sysPermissionService: ISysPermissionService
 
+    @Autowired
+    private lateinit var userRoleService: ISysUserRoleService
+
+    @Autowired
+    private lateinit var userService: ISysUserService
+
     @GetMapping("testTransaction")
     fun testTransaction() {
 //        mgrFondsService.testTransaction()

+ 53 - 0
zen-web/src/main/kotlin/com/gxzc/zen/web/sys/controller/UserController.kt

@@ -0,0 +1,53 @@
+package com.gxzc.zen.web.sys.controller
+
+import com.baomidou.kisso.SSOHelper
+import com.baomidou.kisso.security.token.SSOToken
+import com.gxzc.zen.api.sys.service.ISysUserRoleService
+import com.gxzc.zen.api.sys.service.ISysUserService
+import com.gxzc.zen.common.base.BaseController
+import com.gxzc.zen.common.dto.ResponseDto
+import com.gxzc.zen.common.exception.ZenException
+import com.gxzc.zen.common.exception.ZenExceptionEnum
+import org.slf4j.LoggerFactory
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.http.ResponseEntity
+import org.springframework.web.bind.annotation.GetMapping
+import org.springframework.web.bind.annotation.RequestMapping
+import org.springframework.web.bind.annotation.RestController
+
+/**
+ * 用户相关控制器
+ * @author NorthLan
+ * @date 2018/3/2
+ * @url https://noahlan.com
+ */
+@RestController
+@RequestMapping("user")
+class UserController : BaseController() {
+    companion object {
+        private val logger = LoggerFactory.getLogger(UserController::class.java)
+    }
+
+    @Autowired
+    private lateinit var userRoleService: ISysUserRoleService
+
+    @Autowired
+    private lateinit var userService: ISysUserService
+
+
+    @GetMapping("/userInfo")
+    fun userInfo(): ResponseEntity<*> {
+        val token: SSOToken = SSOHelper.getSSOToken(getRequest())
+                ?: throw ZenException(ZenExceptionEnum.AUTH_NO_LOGIN) // 未登录直接跳出
+        val userRoleList = userRoleService.getUserRoleListByUserId(token.id.toLong())
+        val userInfo = userService.getUserByIdCacheable(token.id.toLong())
+
+        return ResponseEntity.ok(ResponseDto().also {
+            it.data["info"] = mutableMapOf(
+                    Pair("account", userInfo.account),
+                    Pair("username", userInfo.username),
+                    Pair("id", userInfo.id))
+            it.data["roles"] = userRoleList
+        })
+    }
+}

+ 5 - 2
zen-web/src/main/resources/application-cache.yml

@@ -23,7 +23,10 @@ cache:
   cache-specs: # see also {CaffeineSpec}
     user: # cache name
       initialCapacity: -1 # 初始化容量 默认-1
-      maximumSize: 50 # 最大容量
+      maximumSize: 100 # 最大容量
     user_perm: # cache name
       initialCapacity: -1 # 初始化容量 默认-1
-      maximumSize: 50 # 最大容量
+      maximumSize: 100 # 最大容量
+    user_role: # cache name
+      initialCapacity: -1 # 初始化容量 默认-1
+      maximumSize: 100 # 最大容量

+ 1 - 1
zen-web/src/main/resources/application-umps.yml

@@ -4,5 +4,5 @@ kisso:
     cookieName: ks # cookie名称
     cookieDomain: zen.com
     cookiePath: /
-    cookieMaxage: 604800
+    # cookieMaxage: 604800 cookie最长保存时间,目前由login模块控制
     cookieHttponly: false