This commit is contained in:
2024-12-05 18:15:20 +09:00
parent cd1072430e
commit a1faf405c8
10 changed files with 132 additions and 60 deletions
@@ -61,15 +61,18 @@ class BumsInterceptor : HandlerInterceptor {
response.addCookie(cookieUpdate(refresh))
response.addCookie(cookieUpdate(access))
modelAndView?.modelMap?.put(WRITE_PERMISSION_KEY,"OK")
modelAndView?.modelMap?.put("user_id", jwtService.getUserIdFromToken(access?.value ?: ""))
} else {
println("Response correctUserCheck ===> ${correctUserCheck}")
response.addCookie(Cookie("access","").apply { maxAge = -1 })
response.addCookie(Cookie("refresh","").apply { maxAge = -1 })
modelAndView?.modelMap?.put(WRITE_PERMISSION_KEY,"NO")
modelAndView?.modelMap?.put("user_id", "")
}
println("Response modelMap ===> ${Gson().toJson(modelAndView?.modelMap)}")
} else if (request.requestURI.contains("logout")) {
modelAndView?.modelMap?.put(WRITE_PERMISSION_KEY,"NO")
modelAndView?.modelMap?.put("user_id", "")
}
println("==================== END ======================")
@@ -30,6 +30,7 @@ class JwtGenerator {
return Jwts.builder()
.setHeader(createHeader())
.setClaims(createClaims(user))
.setSubject(user.getIdentifier())
.setExpiration(Date(now + REFRESH_EXPIRATION))
.signWith(REFRESH_SECRET, SignatureAlgorithm.HS256)
@@ -73,54 +73,67 @@ class UserController {
@ResponseBody
@PostMapping("login.ajax")
fun login(httpServletRequest: HttpServletRequest, @RequestBody jsonString: String) : ResponseEntity<LoginResult> {
logService.log(httpServletRequest.requestURI)
logService.log(jsonString)
var lResultCode = 0
var lResultMsg = "Suscces"
var u : UserDetails? = null
var user : User? = null
var tokenData : TokenData? = null
jsonString.extractModelData { exception, originDataString ->
if (exception == null) {
logService.log(originDataString)
val target = Gson().fromJson(originDataString, User::class.java) ?: User()
user = userManager.findById(target.user_id!!)?.block()
if (user == null && ((target.user_id?.length ?: 0) > 3 == true)) {
user = userManager.findByEmail(target.user_id!!)?.block()
}
if (user != null) {
if(userManager.isCorrectUser(user!!,target.user_pw!!)){
tokenData = jwtService.generate(user!!)
} else {
lResultMsg = "is wrong infomation id or passord"
lResultCode = 7100
}
} else {
lResultMsg = "not founding user[can't find same id,email.. ]"
lResultCode = 7100
}
} else {
exception.printStackTrace()
lResultMsg = exception.message ?: "unknown exception"
lResultCode = 7999
}
}
val responce = ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).headers {
try {
logService.log(httpServletRequest.requestURI)
logService.log(jsonString)
var lResultCode = 0
var lResultMsg = "Suscces"
var u : UserDetails? = null
var user : User? = null
var tokenData : TokenData? = null
jsonString.extractModelData { exception, originDataString ->
if (exception == null) {
logService.log(originDataString)
val target = Gson().fromJson(originDataString, User::class.java) ?: User()
user = userManager.findById(target.user_id?.trim() ?: "")?.block()
if (user == null && ((target.user_id?.trim()?.length ?: 0) > 3 == true)) {
user = userManager.findByEmail(target.user_id?.trim() ?: "")?.block()
}
if (user != null) {
if(userManager.isCorrectUser(user!!,target.user_pw!!)){
tokenData = jwtService.generate(user!!)
} else {
lResultMsg = "is wrong infomation id or passord"
lResultCode = 7100
}
} else {
lResultMsg = "not founding user[can't find same id,email.. ]"
lResultCode = 7100
}
} else {
exception.printStackTrace()
lResultMsg = exception.message ?: "unknown exception"
lResultCode = 7999
}
}
val responce = ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).headers {
}.body(LoginResult().apply {
this.isOk = lResultCode == 0
this.resultCode = lResultCode
this.resultMsg = lResultMsg
this.token = setTokenToCookie(JwtRule.ACCESS_PREFIX.value, tokenData?.tokenKey ?: "", globalEvv.ACCESS_EXPIRATION / 1000).toString().replace("access=","")
this.refresh = setTokenToCookie(JwtRule.REFRESH_PREFIX.value, tokenData?.refreshToken ?: "", globalEvv.REFRESH_EXPIRATION / 1000).toString().replace("refresh=","")
}).apply {
}
return responce
}catch (e: Exception){
return ResponseEntity.internalServerError().contentType(MediaType.APPLICATION_JSON).headers {
}.body(LoginResult().apply {
this.isOk = false
this.resultCode = -999
this.resultMsg = e.message ?: "unknown exception"
this.token = ""
this.refresh = ""
}).apply {
}.body(LoginResult().apply {
this.resultCode = lResultCode
this.resultMsg = lResultMsg
this.token = setTokenToCookie(JwtRule.ACCESS_PREFIX.value, tokenData?.tokenKey ?: "", globalEvv.ACCESS_EXPIRATION / 1000).toString().replace("access=","")
this.refresh = setTokenToCookie(JwtRule.REFRESH_PREFIX.value, tokenData?.refreshToken ?: "", globalEvv.REFRESH_EXPIRATION / 1000).toString().replace("refresh=","")
}).apply {
}
return responce
}
}
}
@@ -86,7 +86,7 @@ class User {
}
fun getIdentifier(): String? {
return userId
return user_id
}
fun getRole(): UserRole {
@@ -1,5 +1,7 @@
package kr.lunaticbum.back.lun.service
import io.jsonwebtoken.Claims
import io.jsonwebtoken.Jws
import io.jsonwebtoken.Jwts
import jakarta.servlet.http.HttpServletRequest
import jakarta.servlet.http.HttpServletResponse
@@ -129,4 +131,12 @@ class JwtService {
response.addCookie(accessCookie)
response.addCookie(refreshCookie)
}
fun getUserIdFromToken(token: String?): String? {
try {
return jwtUtil.extractToken(token,jwtUtil.getSigningKey(globalEvv.ACCESS_SECRET_KEY))?.body?.get("Identifier")
.toString()
} catch (e: Exception) {
return null
}
}
}
@@ -1,8 +1,6 @@
package kr.lunaticbum.back.lun.utils
import io.jsonwebtoken.ExpiredJwtException
import io.jsonwebtoken.JwtException
import io.jsonwebtoken.Jwts
import io.jsonwebtoken.*
import io.jsonwebtoken.security.Keys
import jakarta.servlet.http.Cookie
import kr.lunaticbum.back.lun.configs.JwtRule
@@ -23,7 +21,6 @@ import java.util.*
@RequiredArgsConstructor
class JwtUtil {
fun getTokenStatus(token: String?, secretKey: Key?): TokenStatus {
try {
var cls = Jwts.parserBuilder()
@@ -68,6 +65,17 @@ class JwtUtil {
cookie.setPath("/")
return cookie
}
fun extractToken(token: String?, secretKey: Key?): Jws<Claims>? {
try {
return Jwts.parserBuilder()
.setSigningKey(secretKey)
.build()
.parseClaimsJws(token)
} catch (e: JwtException) {
throw BusinessException(ErrorCode.INVALID_JWT)
}
}
}
class BusinessException(error : ErrorCode) : Exception(error.name)