diff --git a/src/main/kotlin/top/fatweb/api/config/InitConfig.kt b/src/main/kotlin/top/fatweb/api/config/InitConfig.kt
index abb56fc..d902e38 100644
--- a/src/main/kotlin/top/fatweb/api/config/InitConfig.kt
+++ b/src/main/kotlin/top/fatweb/api/config/InitConfig.kt
@@ -4,31 +4,50 @@ import com.baomidou.mybatisplus.extension.kotlin.KtQueryWrapper
import jakarta.annotation.PostConstruct
import org.slf4j.Logger
import org.slf4j.LoggerFactory
+import org.springframework.context.annotation.DependsOn
import org.springframework.security.crypto.password.PasswordEncoder
import org.springframework.stereotype.Component
import top.fatweb.api.entity.permission.User
+import top.fatweb.api.entity.permission.UserInfo
+import top.fatweb.api.properties.AdminProperties
+import top.fatweb.api.service.permission.IUserInfoService
import top.fatweb.api.service.permission.IUserService
import kotlin.random.Random
+@DependsOn("adminProperties")
@Component
class InitConfig(
- private val userService: IUserService, private val passwordEncoder: PasswordEncoder
+ private val userService: IUserService,
+ private val userInfoService: IUserInfoService,
+ private val passwordEncoder: PasswordEncoder
) {
private val logger: Logger = LoggerFactory.getLogger(this::class.java)
@PostConstruct
fun init() {
if (!userService.exists(KtQueryWrapper(User()).eq(User::id, 0))) {
- val rawPassword = getRandPassword(10)
+ userInfoService.remove(KtQueryWrapper(UserInfo()).eq(UserInfo::userId, 0))
+
+ val rawPassword = AdminProperties.password ?: let {
+ logger.warn("No default administrator password is set, a randomly generated password will be used")
+ getRandPassword(10)
+ }
val encodedPassword = passwordEncoder.encode(rawPassword)
+
val user = User().apply {
id = 0
- username = "admin"
+ username = AdminProperties.username
password = encodedPassword
locking = 0
enable = 1
}
- if (userService.save(user)) {
+ val userInfo = UserInfo().apply {
+ userId = 0
+ nickName = AdminProperties.nickName
+ email = AdminProperties.email
+ }
+
+ if (userService.save(user) && userInfoService.save(userInfo)) {
logger.warn("First startup, create administrator - username: admin, password: $rawPassword")
logger.warn("This information will only be shown once. Please change your password promptly after logging in.")
}
diff --git a/src/main/kotlin/top/fatweb/api/config/SwaggerConfig.kt b/src/main/kotlin/top/fatweb/api/config/SwaggerConfig.kt
index fde4588..0525655 100644
--- a/src/main/kotlin/top/fatweb/api/config/SwaggerConfig.kt
+++ b/src/main/kotlin/top/fatweb/api/config/SwaggerConfig.kt
@@ -5,7 +5,7 @@ import io.swagger.v3.oas.models.info.Contact
import io.swagger.v3.oas.models.info.Info
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
-import top.fatweb.api.constant.ServerConstants
+import top.fatweb.api.properties.ServerProperties
@Configuration
class SwaggerConfig {
@@ -16,7 +16,7 @@ class SwaggerConfig {
return OpenAPI().info(
Info().title("FatWeb API 文档").description("FatWeb 后端 API 文档,包含各个 Controller 调用信息")
.contact(contact).version(
- ServerConstants.version
+ ServerProperties.version
)
)
}
diff --git a/src/main/kotlin/top/fatweb/api/controller/permission/AuthenticationController.kt b/src/main/kotlin/top/fatweb/api/controller/permission/AuthenticationController.kt
index 0c75325..3c0ded1 100644
--- a/src/main/kotlin/top/fatweb/api/controller/permission/AuthenticationController.kt
+++ b/src/main/kotlin/top/fatweb/api/controller/permission/AuthenticationController.kt
@@ -8,7 +8,7 @@ import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.PostMapping
import org.springframework.web.bind.annotation.RequestBody
import org.springframework.web.bind.annotation.RestController
-import top.fatweb.api.converter.UserConverter
+import top.fatweb.api.converter.permission.UserConverter
import top.fatweb.api.entity.common.ResponseCode
import top.fatweb.api.entity.common.ResponseResult
import top.fatweb.api.param.authentication.LoginParam
diff --git a/src/main/kotlin/top/fatweb/api/controller/permission/UserController.kt b/src/main/kotlin/top/fatweb/api/controller/permission/UserController.kt
index 54f7a1c..eff2ae6 100644
--- a/src/main/kotlin/top/fatweb/api/controller/permission/UserController.kt
+++ b/src/main/kotlin/top/fatweb/api/controller/permission/UserController.kt
@@ -3,10 +3,10 @@ package top.fatweb.api.controller.permission
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController
-import top.fatweb.api.converter.UserConverter
+import top.fatweb.api.converter.permission.UserConverter
import top.fatweb.api.entity.common.ResponseResult
import top.fatweb.api.service.permission.IUserService
-import top.fatweb.api.vo.authentication.UserWithInfoVo
+import top.fatweb.api.vo.permission.UserWithInfoVo
/**
*
diff --git a/src/main/kotlin/top/fatweb/api/controller/system/SysLogController.kt b/src/main/kotlin/top/fatweb/api/controller/system/SysLogController.kt
index 1e8b0db..1d2be0b 100644
--- a/src/main/kotlin/top/fatweb/api/controller/system/SysLogController.kt
+++ b/src/main/kotlin/top/fatweb/api/controller/system/SysLogController.kt
@@ -7,7 +7,7 @@ import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RequestBody
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController
-import top.fatweb.api.converter.SysLogConverter
+import top.fatweb.api.converter.system.SysLogConverter
import top.fatweb.api.entity.common.ResponseCode
import top.fatweb.api.entity.common.ResponseResult
import top.fatweb.api.param.system.SysLogGetParam
diff --git a/src/main/kotlin/top/fatweb/api/converter/UserConverter.kt b/src/main/kotlin/top/fatweb/api/converter/permission/UserConverter.kt
similarity index 83%
rename from src/main/kotlin/top/fatweb/api/converter/UserConverter.kt
rename to src/main/kotlin/top/fatweb/api/converter/permission/UserConverter.kt
index aa6aac3..d2a3c23 100644
--- a/src/main/kotlin/top/fatweb/api/converter/UserConverter.kt
+++ b/src/main/kotlin/top/fatweb/api/converter/permission/UserConverter.kt
@@ -1,8 +1,8 @@
-package top.fatweb.api.converter
+package top.fatweb.api.converter.permission
import top.fatweb.api.entity.permission.User
import top.fatweb.api.param.authentication.LoginParam
-import top.fatweb.api.vo.authentication.*
+import top.fatweb.api.vo.permission.*
object UserConverter {
fun loginParamToUser(loginParam: LoginParam): User {
@@ -27,6 +27,15 @@ object UserConverter {
lastLoginIp = user.lastLoginIp,
createTime = user.createTime,
updateTime = user.updateTime,
+ userInfo = user.userInfo?.let { UserInfoVo(
+ id = it.id,
+ userId = it.userId,
+ nickName = it.nickName,
+ avatar = it.avatar,
+ email = it.email,
+ createTime = it.createTime,
+ updateTime = it.updateTime
+ ) },
modules = user.modules?.map {
ModuleVo(
id = it.id,
diff --git a/src/main/kotlin/top/fatweb/api/converter/SysLogConverter.kt b/src/main/kotlin/top/fatweb/api/converter/system/SysLogConverter.kt
similarity index 95%
rename from src/main/kotlin/top/fatweb/api/converter/SysLogConverter.kt
rename to src/main/kotlin/top/fatweb/api/converter/system/SysLogConverter.kt
index 8d87b67..d7ddad5 100644
--- a/src/main/kotlin/top/fatweb/api/converter/SysLogConverter.kt
+++ b/src/main/kotlin/top/fatweb/api/converter/system/SysLogConverter.kt
@@ -1,4 +1,4 @@
-package top.fatweb.api.converter
+package top.fatweb.api.converter.system
import com.baomidou.mybatisplus.core.metadata.IPage
import top.fatweb.api.entity.system.SysLog
diff --git a/src/main/kotlin/top/fatweb/api/entity/permission/User.kt b/src/main/kotlin/top/fatweb/api/entity/permission/User.kt
index a3d1fdc..7286e41 100644
--- a/src/main/kotlin/top/fatweb/api/entity/permission/User.kt
+++ b/src/main/kotlin/top/fatweb/api/entity/permission/User.kt
@@ -104,6 +104,9 @@ class User() : Serializable {
@Version
var version: Int? = null
+ @TableField(exist = false)
+ var userInfo: UserInfo? = null
+
@TableField(exist = false)
var roles: List? = null
@@ -123,6 +126,6 @@ class User() : Serializable {
var operations: List? = null
override fun toString(): String {
- return "User(id=$id, username=$username, password=$password, locking=$locking, expiration=$expiration, credentialsExpiration=$credentialsExpiration, enable=$enable, currentLoginTime=$currentLoginTime, currentLoginIp=$currentLoginIp, lastLoginTime=$lastLoginTime, lastLoginIp=$lastLoginIp, createTime=$createTime, updateTime=$updateTime, deleted=$deleted, version=$version, roles=$roles, groups=$groups, menus=$menus, elements=$elements, operations=$operations)"
+ return "User(id=$id, username=$username, password=$password, locking=$locking, expiration=$expiration, credentialsExpiration=$credentialsExpiration, enable=$enable, currentLoginTime=$currentLoginTime, currentLoginIp=$currentLoginIp, lastLoginTime=$lastLoginTime, lastLoginIp=$lastLoginIp, createTime=$createTime, updateTime=$updateTime, deleted=$deleted, version=$version, userInfo=$userInfo, roles=$roles, groups=$groups, modules=$modules, menus=$menus, elements=$elements, operations=$operations)"
}
}
diff --git a/src/main/kotlin/top/fatweb/api/entity/permission/UserInfo.kt b/src/main/kotlin/top/fatweb/api/entity/permission/UserInfo.kt
index e726aab..6030c50 100644
--- a/src/main/kotlin/top/fatweb/api/entity/permission/UserInfo.kt
+++ b/src/main/kotlin/top/fatweb/api/entity/permission/UserInfo.kt
@@ -6,7 +6,7 @@ import java.time.LocalDateTime
/**
*
- * 用户信息表
+ * 用户资料表
*
*
* @author FatttSnake
diff --git a/src/main/kotlin/top/fatweb/api/filter/JwtAuthenticationTokenFilter.kt b/src/main/kotlin/top/fatweb/api/filter/JwtAuthenticationTokenFilter.kt
index fbdf03b..3078509 100644
--- a/src/main/kotlin/top/fatweb/api/filter/JwtAuthenticationTokenFilter.kt
+++ b/src/main/kotlin/top/fatweb/api/filter/JwtAuthenticationTokenFilter.kt
@@ -8,9 +8,9 @@ import org.springframework.security.core.context.SecurityContextHolder
import org.springframework.stereotype.Component
import org.springframework.util.StringUtils
import org.springframework.web.filter.OncePerRequestFilter
-import top.fatweb.api.constant.SecurityConstants
import top.fatweb.api.entity.permission.LoginUser
import top.fatweb.api.exception.TokenHasExpiredException
+import top.fatweb.api.properties.SecurityProperties
import top.fatweb.api.util.JwtUtil
import top.fatweb.api.util.RedisUtil
import top.fatweb.api.util.WebUtil
@@ -20,7 +20,7 @@ class JwtAuthenticationTokenFilter(private val redisUtil: RedisUtil) : OncePerRe
override fun doFilterInternal(
request: HttpServletRequest, response: HttpServletResponse, filterChain: FilterChain
) {
- val tokenWithPrefix = request.getHeader(SecurityConstants.headerString)
+ val tokenWithPrefix = request.getHeader(SecurityProperties.headerString)
if (!StringUtils.hasText(tokenWithPrefix) || "/error/thrown" == request.servletPath) {
filterChain.doFilter(request, response)
@@ -30,11 +30,11 @@ class JwtAuthenticationTokenFilter(private val redisUtil: RedisUtil) : OncePerRe
val token = WebUtil.getToken(tokenWithPrefix)
JwtUtil.parseJwt(token)
- val redisKey = "${SecurityConstants.jwtIssuer}_login:" + token
+ val redisKey = "${SecurityProperties.jwtIssuer}_login:" + token
val loginUser = redisUtil.getObject(redisKey)
loginUser ?: let { throw TokenHasExpiredException() }
- redisUtil.setExpire(redisKey, SecurityConstants.redisTtl, SecurityConstants.redisTtlUnit)
+ redisUtil.setExpire(redisKey, SecurityProperties.redisTtl, SecurityProperties.redisTtlUnit)
val authenticationToken = UsernamePasswordAuthenticationToken(loginUser, null, loginUser.authorities)
SecurityContextHolder.getContext().authentication = authenticationToken
diff --git a/src/main/kotlin/top/fatweb/api/mapper/permission/UserInfoMapper.kt b/src/main/kotlin/top/fatweb/api/mapper/permission/UserInfoMapper.kt
index 3d254f4..630f77c 100644
--- a/src/main/kotlin/top/fatweb/api/mapper/permission/UserInfoMapper.kt
+++ b/src/main/kotlin/top/fatweb/api/mapper/permission/UserInfoMapper.kt
@@ -6,7 +6,7 @@ import top.fatweb.api.entity.permission.UserInfo
/**
*
- * 用户信息表 Mapper 接口
+ * 用户资料表 Mapper 接口
*
*
* @author FatttSnake
diff --git a/src/main/kotlin/top/fatweb/api/properties/AdminProperties.kt b/src/main/kotlin/top/fatweb/api/properties/AdminProperties.kt
new file mode 100644
index 0000000..1ac9989
--- /dev/null
+++ b/src/main/kotlin/top/fatweb/api/properties/AdminProperties.kt
@@ -0,0 +1,13 @@
+package top.fatweb.api.properties
+
+import org.springframework.boot.context.properties.ConfigurationProperties
+import org.springframework.stereotype.Component
+
+@Component
+@ConfigurationProperties("app.admin")
+object AdminProperties {
+ var username = "admin"
+ var password: String? = null
+ var nickName = "Administrator"
+ var email = "admin@fatweb.top"
+}
\ No newline at end of file
diff --git a/src/main/kotlin/top/fatweb/api/constant/SecurityConstants.kt b/src/main/kotlin/top/fatweb/api/properties/SecurityProperties.kt
similarity index 88%
rename from src/main/kotlin/top/fatweb/api/constant/SecurityConstants.kt
rename to src/main/kotlin/top/fatweb/api/properties/SecurityProperties.kt
index c2b1738..b4b475a 100644
--- a/src/main/kotlin/top/fatweb/api/constant/SecurityConstants.kt
+++ b/src/main/kotlin/top/fatweb/api/properties/SecurityProperties.kt
@@ -1,4 +1,4 @@
-package top.fatweb.api.constant
+package top.fatweb.api.properties
import org.springframework.boot.context.properties.ConfigurationProperties
import org.springframework.stereotype.Component
@@ -6,7 +6,7 @@ import java.util.concurrent.TimeUnit
@Component
@ConfigurationProperties("app.security")
-object SecurityConstants {
+object SecurityProperties {
var headerString = "Authorization"
var tokenPrefix = "Bearer "
diff --git a/src/main/kotlin/top/fatweb/api/constant/ServerConstants.kt b/src/main/kotlin/top/fatweb/api/properties/ServerProperties.kt
similarity index 89%
rename from src/main/kotlin/top/fatweb/api/constant/ServerConstants.kt
rename to src/main/kotlin/top/fatweb/api/properties/ServerProperties.kt
index 5f55621..124cb39 100644
--- a/src/main/kotlin/top/fatweb/api/constant/ServerConstants.kt
+++ b/src/main/kotlin/top/fatweb/api/properties/ServerProperties.kt
@@ -1,4 +1,4 @@
-package top.fatweb.api.constant
+package top.fatweb.api.properties
import org.springframework.boot.context.properties.ConfigurationProperties
import org.springframework.stereotype.Component
@@ -8,7 +8,7 @@ import java.time.ZonedDateTime
@Component
@ConfigurationProperties("app")
-object ServerConstants {
+object ServerProperties {
lateinit var version: String
lateinit var buildTime: String
diff --git a/src/main/kotlin/top/fatweb/api/service/permission/IAuthenticationService.kt b/src/main/kotlin/top/fatweb/api/service/permission/IAuthenticationService.kt
index 5fb8e07..9e4f59f 100644
--- a/src/main/kotlin/top/fatweb/api/service/permission/IAuthenticationService.kt
+++ b/src/main/kotlin/top/fatweb/api/service/permission/IAuthenticationService.kt
@@ -2,8 +2,8 @@ package top.fatweb.api.service.permission
import jakarta.servlet.http.HttpServletRequest
import top.fatweb.api.entity.permission.User
-import top.fatweb.api.vo.authentication.LoginVo
-import top.fatweb.api.vo.authentication.TokenVo
+import top.fatweb.api.vo.permission.LoginVo
+import top.fatweb.api.vo.permission.TokenVo
interface IAuthenticationService {
fun login(request: HttpServletRequest, user: User): LoginVo
diff --git a/src/main/kotlin/top/fatweb/api/service/permission/IUserInfoService.kt b/src/main/kotlin/top/fatweb/api/service/permission/IUserInfoService.kt
index 674c0be..19ea471 100644
--- a/src/main/kotlin/top/fatweb/api/service/permission/IUserInfoService.kt
+++ b/src/main/kotlin/top/fatweb/api/service/permission/IUserInfoService.kt
@@ -5,7 +5,7 @@ import top.fatweb.api.entity.permission.UserInfo
/**
*
- * 用户信息表 服务类
+ * 用户资料表 服务类
*
*
* @author FatttSnake
diff --git a/src/main/kotlin/top/fatweb/api/service/permission/impl/AuthenticationServiceImpl.kt b/src/main/kotlin/top/fatweb/api/service/permission/impl/AuthenticationServiceImpl.kt
index 1207262..0dfedd1 100644
--- a/src/main/kotlin/top/fatweb/api/service/permission/impl/AuthenticationServiceImpl.kt
+++ b/src/main/kotlin/top/fatweb/api/service/permission/impl/AuthenticationServiceImpl.kt
@@ -7,17 +7,17 @@ import org.slf4j.LoggerFactory
import org.springframework.security.authentication.AuthenticationManager
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken
import org.springframework.stereotype.Service
-import top.fatweb.api.constant.SecurityConstants
import top.fatweb.api.entity.permission.LoginUser
import top.fatweb.api.entity.permission.User
import top.fatweb.api.exception.TokenHasExpiredException
+import top.fatweb.api.properties.SecurityProperties
import top.fatweb.api.service.permission.IAuthenticationService
import top.fatweb.api.service.permission.IUserService
import top.fatweb.api.util.JwtUtil
import top.fatweb.api.util.RedisUtil
import top.fatweb.api.util.WebUtil
-import top.fatweb.api.vo.authentication.LoginVo
-import top.fatweb.api.vo.authentication.TokenVo
+import top.fatweb.api.vo.permission.LoginVo
+import top.fatweb.api.vo.permission.TokenVo
import java.time.LocalDateTime
import java.time.ZoneOffset
@@ -54,18 +54,18 @@ class AuthenticationServiceImpl(
throw RuntimeException("Login failed")
}
- val redisKey = "${SecurityConstants.jwtIssuer}_login:" + jwt
- redisUtil.setObject(redisKey, loginUser, SecurityConstants.redisTtl, SecurityConstants.redisTtlUnit)
+ val redisKey = "${SecurityProperties.jwtIssuer}_login:" + jwt
+ redisUtil.setObject(redisKey, loginUser, SecurityProperties.redisTtl, SecurityProperties.redisTtlUnit)
return LoginVo(jwt, loginUser.user.currentLoginTime, loginUser.user.currentLoginIp)
}
- override fun logout(token: String): Boolean = redisUtil.delObject("${SecurityConstants.jwtIssuer}_login:" + token)
+ override fun logout(token: String): Boolean = redisUtil.delObject("${SecurityProperties.jwtIssuer}_login:" + token)
override fun renewToken(token: String): TokenVo {
val loginUser = WebUtil.getLoginUser() ?: let { throw TokenHasExpiredException() }
- val oldRedisKey = "${SecurityConstants.jwtIssuer}_login:" + token
+ val oldRedisKey = "${SecurityProperties.jwtIssuer}_login:" + token
redisUtil.delObject(oldRedisKey)
val jwt = JwtUtil.createJwt(WebUtil.getLoginUserId().toString())
@@ -73,9 +73,9 @@ class AuthenticationServiceImpl(
throw RuntimeException("Login failed")
}
- val redisKey = "${SecurityConstants.jwtIssuer}_login:" + jwt
+ val redisKey = "${SecurityProperties.jwtIssuer}_login:" + jwt
redisUtil.setObject(
- redisKey, loginUser, SecurityConstants.redisTtl, SecurityConstants.redisTtlUnit
+ redisKey, loginUser, SecurityProperties.redisTtl, SecurityProperties.redisTtlUnit
)
return TokenVo(jwt)
diff --git a/src/main/kotlin/top/fatweb/api/service/permission/impl/UserInfoServiceImpl.kt b/src/main/kotlin/top/fatweb/api/service/permission/impl/UserInfoServiceImpl.kt
index 7120b5d..73cc191 100644
--- a/src/main/kotlin/top/fatweb/api/service/permission/impl/UserInfoServiceImpl.kt
+++ b/src/main/kotlin/top/fatweb/api/service/permission/impl/UserInfoServiceImpl.kt
@@ -8,7 +8,7 @@ import top.fatweb.api.service.permission.IUserInfoService
/**
*
- * 用户信息表 服务实现类
+ * 用户资料表 服务实现类
*
*
* @author FatttSnake
diff --git a/src/main/kotlin/top/fatweb/api/util/JwtUtil.kt b/src/main/kotlin/top/fatweb/api/util/JwtUtil.kt
index 2e4f0f8..7f73719 100644
--- a/src/main/kotlin/top/fatweb/api/util/JwtUtil.kt
+++ b/src/main/kotlin/top/fatweb/api/util/JwtUtil.kt
@@ -3,7 +3,7 @@ package top.fatweb.api.util
import com.auth0.jwt.JWT
import com.auth0.jwt.algorithms.Algorithm
import com.auth0.jwt.interfaces.DecodedJWT
-import top.fatweb.api.constant.SecurityConstants
+import top.fatweb.api.properties.SecurityProperties
import java.util.*
import java.util.concurrent.TimeUnit
import javax.crypto.spec.SecretKeySpec
@@ -17,7 +17,7 @@ object JwtUtil {
* @return 密钥
*/
private fun generalKey(): SecretKeySpec {
- val encodeKey = Base64.getDecoder().decode(SecurityConstants.jwtKey)
+ val encodeKey = Base64.getDecoder().decode(SecurityProperties.jwtKey)
return SecretKeySpec(encodeKey, 0, encodeKey.size, "AES")
}
@@ -34,8 +34,8 @@ object JwtUtil {
*/
fun createJwt(
subject: String,
- ttl: Long = SecurityConstants.jwtTtl,
- timeUnit: TimeUnit = SecurityConstants.jwtTtlUnit,
+ ttl: Long = SecurityProperties.jwtTtl,
+ timeUnit: TimeUnit = SecurityProperties.jwtTtlUnit,
uuid: String = getUUID()
): String? {
val nowMillis = System.currentTimeMillis()
@@ -52,7 +52,7 @@ object JwtUtil {
val expMillis = nowMillis + unitTtl
val expDate = Date(expMillis)
- return JWT.create().withJWTId(uuid).withSubject(subject).withIssuer(SecurityConstants.jwtIssuer)
+ return JWT.create().withJWTId(uuid).withSubject(subject).withIssuer(SecurityProperties.jwtIssuer)
.withIssuedAt(nowDate).withExpiresAt(expDate).sign(algorithm())
}
diff --git a/src/main/kotlin/top/fatweb/api/util/WebUtil.kt b/src/main/kotlin/top/fatweb/api/util/WebUtil.kt
index 3be731b..97bed49 100644
--- a/src/main/kotlin/top/fatweb/api/util/WebUtil.kt
+++ b/src/main/kotlin/top/fatweb/api/util/WebUtil.kt
@@ -2,8 +2,8 @@ package top.fatweb.api.util
import jakarta.servlet.http.HttpServletRequest
import org.springframework.security.core.context.SecurityContextHolder
-import top.fatweb.api.constant.SecurityConstants
import top.fatweb.api.entity.permission.LoginUser
+import top.fatweb.api.properties.SecurityProperties
object WebUtil {
fun getLoginUser() = if (SecurityContextHolder.getContext().authentication.principal is String) null
@@ -13,7 +13,7 @@ object WebUtil {
fun getLoginUsername() = getLoginUser()?.user?.username
- fun getToken(tokenWithPrefix: String) = tokenWithPrefix.removePrefix(SecurityConstants.tokenPrefix)
+ fun getToken(tokenWithPrefix: String) = tokenWithPrefix.removePrefix(SecurityProperties.tokenPrefix)
- fun getToken(request: HttpServletRequest) = getToken(request.getHeader(SecurityConstants.headerString))
+ fun getToken(request: HttpServletRequest) = getToken(request.getHeader(SecurityProperties.headerString))
}
\ No newline at end of file
diff --git a/src/main/kotlin/top/fatweb/api/vo/authentication/ElementVo.kt b/src/main/kotlin/top/fatweb/api/vo/permission/ElementVo.kt
similarity index 91%
rename from src/main/kotlin/top/fatweb/api/vo/authentication/ElementVo.kt
rename to src/main/kotlin/top/fatweb/api/vo/permission/ElementVo.kt
index ba2396a..fd56286 100644
--- a/src/main/kotlin/top/fatweb/api/vo/authentication/ElementVo.kt
+++ b/src/main/kotlin/top/fatweb/api/vo/permission/ElementVo.kt
@@ -1,4 +1,4 @@
-package top.fatweb.api.vo.authentication
+package top.fatweb.api.vo.permission
import io.swagger.v3.oas.annotations.media.Schema
diff --git a/src/main/kotlin/top/fatweb/api/vo/authentication/LoginVo.kt b/src/main/kotlin/top/fatweb/api/vo/permission/LoginVo.kt
similarity index 94%
rename from src/main/kotlin/top/fatweb/api/vo/authentication/LoginVo.kt
rename to src/main/kotlin/top/fatweb/api/vo/permission/LoginVo.kt
index 8d1d96b..21a7e77 100644
--- a/src/main/kotlin/top/fatweb/api/vo/authentication/LoginVo.kt
+++ b/src/main/kotlin/top/fatweb/api/vo/permission/LoginVo.kt
@@ -1,4 +1,4 @@
-package top.fatweb.api.vo.authentication
+package top.fatweb.api.vo.permission
import io.swagger.v3.oas.annotations.media.Schema
import java.time.LocalDateTime
diff --git a/src/main/kotlin/top/fatweb/api/vo/authentication/MenuVo.kt b/src/main/kotlin/top/fatweb/api/vo/permission/MenuVo.kt
similarity index 91%
rename from src/main/kotlin/top/fatweb/api/vo/authentication/MenuVo.kt
rename to src/main/kotlin/top/fatweb/api/vo/permission/MenuVo.kt
index bfb0604..fad69af 100644
--- a/src/main/kotlin/top/fatweb/api/vo/authentication/MenuVo.kt
+++ b/src/main/kotlin/top/fatweb/api/vo/permission/MenuVo.kt
@@ -1,4 +1,4 @@
-package top.fatweb.api.vo.authentication
+package top.fatweb.api.vo.permission
import io.swagger.v3.oas.annotations.media.Schema
diff --git a/src/main/kotlin/top/fatweb/api/vo/authentication/ModuleVo.kt b/src/main/kotlin/top/fatweb/api/vo/permission/ModuleVo.kt
similarity index 87%
rename from src/main/kotlin/top/fatweb/api/vo/authentication/ModuleVo.kt
rename to src/main/kotlin/top/fatweb/api/vo/permission/ModuleVo.kt
index 2496629..921d807 100644
--- a/src/main/kotlin/top/fatweb/api/vo/authentication/ModuleVo.kt
+++ b/src/main/kotlin/top/fatweb/api/vo/permission/ModuleVo.kt
@@ -1,4 +1,4 @@
-package top.fatweb.api.vo.authentication
+package top.fatweb.api.vo.permission
import io.swagger.v3.oas.annotations.media.Schema
diff --git a/src/main/kotlin/top/fatweb/api/vo/authentication/OperationVo.kt b/src/main/kotlin/top/fatweb/api/vo/permission/OperationVo.kt
similarity index 91%
rename from src/main/kotlin/top/fatweb/api/vo/authentication/OperationVo.kt
rename to src/main/kotlin/top/fatweb/api/vo/permission/OperationVo.kt
index 2a6fbfb..45c07c2 100644
--- a/src/main/kotlin/top/fatweb/api/vo/authentication/OperationVo.kt
+++ b/src/main/kotlin/top/fatweb/api/vo/permission/OperationVo.kt
@@ -1,4 +1,4 @@
-package top.fatweb.api.vo.authentication
+package top.fatweb.api.vo.permission
import io.swagger.v3.oas.annotations.media.Schema
diff --git a/src/main/kotlin/top/fatweb/api/vo/authentication/TokenVo.kt b/src/main/kotlin/top/fatweb/api/vo/permission/TokenVo.kt
similarity index 91%
rename from src/main/kotlin/top/fatweb/api/vo/authentication/TokenVo.kt
rename to src/main/kotlin/top/fatweb/api/vo/permission/TokenVo.kt
index 3dc7af1..94668b9 100644
--- a/src/main/kotlin/top/fatweb/api/vo/authentication/TokenVo.kt
+++ b/src/main/kotlin/top/fatweb/api/vo/permission/TokenVo.kt
@@ -1,4 +1,4 @@
-package top.fatweb.api.vo.authentication
+package top.fatweb.api.vo.permission
import io.swagger.v3.oas.annotations.media.Schema
diff --git a/src/main/kotlin/top/fatweb/api/vo/permission/UserInfoVo.kt b/src/main/kotlin/top/fatweb/api/vo/permission/UserInfoVo.kt
new file mode 100644
index 0000000..b66de9b
--- /dev/null
+++ b/src/main/kotlin/top/fatweb/api/vo/permission/UserInfoVo.kt
@@ -0,0 +1,31 @@
+package top.fatweb.api.vo.permission
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer
+import io.swagger.v3.oas.annotations.media.Schema
+import java.time.LocalDateTime
+
+@Schema(description = "用户资料返回参数")
+data class UserInfoVo(
+ @JsonSerialize(using = ToStringSerializer::class)
+ val id: Long?,
+
+ @Schema(description = "用户ID")
+ @JsonSerialize(using = ToStringSerializer::class)
+ val userId: Long?,
+
+ @Schema(description = "昵称", example = "User")
+ val nickName: String?,
+
+ @Schema(description = "头像")
+ val avatar: String?,
+
+ @Schema(description = "邮箱", example = "user@fatweb.top")
+ val email: String?,
+
+ @Schema(description = "创建时间", example = "1900-01-01T00:00:00.000Z")
+ val createTime: LocalDateTime?,
+
+ @Schema(description = "修改时间", example = "1900-01-01T00:00:00.000Z")
+ val updateTime: LocalDateTime?
+)
diff --git a/src/main/kotlin/top/fatweb/api/vo/authentication/UserWithInfoVo.kt b/src/main/kotlin/top/fatweb/api/vo/permission/UserWithInfoVo.kt
similarity index 94%
rename from src/main/kotlin/top/fatweb/api/vo/authentication/UserWithInfoVo.kt
rename to src/main/kotlin/top/fatweb/api/vo/permission/UserWithInfoVo.kt
index ad6ac2f..170f27b 100644
--- a/src/main/kotlin/top/fatweb/api/vo/authentication/UserWithInfoVo.kt
+++ b/src/main/kotlin/top/fatweb/api/vo/permission/UserWithInfoVo.kt
@@ -1,4 +1,4 @@
-package top.fatweb.api.vo.authentication
+package top.fatweb.api.vo.permission
import com.fasterxml.jackson.databind.annotation.JsonSerialize
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer
@@ -43,6 +43,9 @@ data class UserWithInfoVo(
@Schema(description = "修改时间", example = "1900-01-01T00:00:00.000Z")
val updateTime: LocalDateTime?,
+ @Schema(description = "用户资料")
+ val userInfo: UserInfoVo?,
+
@Schema(description = "模块列表")
val modules: List?,
diff --git a/src/main/resources/application-config-template.yml b/src/main/resources/application-config-template.yml
index 33cb33b..d589902 100644
--- a/src/main/resources/application-config-template.yml
+++ b/src/main/resources/application-config-template.yml
@@ -1,4 +1,9 @@
app:
+ admin:
+# username: admin # Username of administrator
+# password: admin # Default password of administrator
+# nick-name: Administrator # Nickname of administrator
+# email: admin@fatweb.top # Email of administrator
security:
# header-string: "Authorization" # The key of head to get token
# token-prefix: "Bearer " # Token prefix
diff --git a/src/main/resources/db/migration/V1_0_0_231104__Add_table_'t_user_info'.sql b/src/main/resources/db/migration/V1_0_0_231104__Add_table_'t_user_info'.sql
index b6e59ed..6a329de 100644
--- a/src/main/resources/db/migration/V1_0_0_231104__Add_table_'t_user_info'.sql
+++ b/src/main/resources/db/migration/V1_0_0_231104__Add_table_'t_user_info'.sql
@@ -10,5 +10,6 @@ create table if not exists t_user_info
create_time datetime not null default (utc_timestamp()) comment '创建时间',
update_time datetime not null default (utc_timestamp()) comment '修改时间',
deleted bigint not null default 0,
- version int not null default 0
-) comment '用户信息表';
\ No newline at end of file
+ version int not null default 0,
+ constraint t_user_info_unique unique (user_id, deleted)
+) comment '用户资料表';
\ No newline at end of file
diff --git a/src/main/resources/mapper/permission/UserMapper.xml b/src/main/resources/mapper/permission/UserMapper.xml
index b2f7861..11d27ff 100644
--- a/src/main/resources/mapper/permission/UserMapper.xml
+++ b/src/main/resources/mapper/permission/UserMapper.xml
@@ -18,6 +18,7 @@
t_user.deleted as user_deleted,
t_user.version as user_version,
tui.id as user_info_id,
+ tui.user_id as user_info_user_id,
tui.nick_name as user_info_nick_name,
tui.avatar as user_info_avatar,
tui.email as user_info_email,
@@ -61,7 +62,7 @@
and t_user.username = #{username};
-
+
@@ -78,8 +79,21 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/test/kotlin/top/fatweb/api/FatWebApiApplicationTests.kt b/src/test/kotlin/top/fatweb/api/FatWebApiApplicationTests.kt
index 5e4302b..1b203ca 100644
--- a/src/test/kotlin/top/fatweb/api/FatWebApiApplicationTests.kt
+++ b/src/test/kotlin/top/fatweb/api/FatWebApiApplicationTests.kt
@@ -6,7 +6,7 @@ import org.junit.jupiter.api.extension.ExtendWith
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import org.springframework.test.context.junit.jupiter.SpringExtension
-import top.fatweb.api.constant.SecurityConstants
+import top.fatweb.api.properties.SecurityProperties
import top.fatweb.api.util.ByteUtil
import top.fatweb.api.util.JwtUtil
@@ -16,7 +16,7 @@ class FatWebApiApplicationTests {
@Test
fun removePrefixTest() {
- assertEquals("12312", "Bearer 12312".removePrefix(SecurityConstants.tokenPrefix))
+ assertEquals("12312", "Bearer 12312".removePrefix(SecurityProperties.tokenPrefix))
}
@Test