From aadf880052ed3d11d922705427b794683efc4ee6 Mon Sep 17 00:00:00 2001 From: alex Date: Thu, 1 Dec 2022 11:17:35 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4app=E5=8C=85=E7=BB=93?= =?UTF-8?q?=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/autoconfig/AppAutoConfiguration.kt | 8 +++ .../gaea/app/{component => }/bus/EventBus.kt | 2 +- .../bus/EventBusSubscriberProcessor.kt | 2 +- .../gaea/app/{component => }/cache/Cache.kt | 2 +- .../synebula/gaea/app/component/poi/Excel.kt | 14 +++-- .../gaea/app/component/poi/ExcelData.kt | 7 +++ .../gaea/app/{ => controller}/Application.kt | 6 +- .../gaea/app/{ => controller}/IApplication.kt | 4 +- .../app/{ => controller}/SimpleApplication.kt | 8 +-- .../app/{ => controller}/cmd/CommandApp.kt | 2 +- .../app/{ => controller}/cmd/ICommandApp.kt | 4 +- .../{ => controller}/cmd/ISimpleCommandApp.kt | 4 +- .../{ => controller}/cmd/SimpleCommandApp.kt | 2 +- .../app/{ => controller}/query/IQueryApp.kt | 4 +- .../app/{ => controller}/query/QueryApp.kt | 2 +- .../{component => }/security/TokenManager.kt | 57 +++++++++++-------- .../security/WebAuthorization.kt | 8 ++- .../{component => }/security/WebSecurity.kt | 4 +- .../gaea/app/security/session/User.kt | 16 ++++++ .../security/session/UserSession.kt | 4 +- .../security/session/UserSessionManager.kt | 4 +- .../com/synebula/gaea/app/struct/ExcelData.kt | 5 -- .../exception/TokenCloseExpireException.kt | 5 -- ...ot.autoconfigure.AutoConfiguration.imports | 1 + .../gaea/data/permission/AuthorityType.kt | 10 ++++ .../gaea/data/permission/PermissionType.kt | 28 +++++++++ 26 files changed, 145 insertions(+), 68 deletions(-) create mode 100644 src/gaea.app/src/main/kotlin/com/synebula/gaea/app/autoconfig/AppAutoConfiguration.kt rename src/gaea.app/src/main/kotlin/com/synebula/gaea/app/{component => }/bus/EventBus.kt (73%) rename src/gaea.app/src/main/kotlin/com/synebula/gaea/app/{component => }/bus/EventBusSubscriberProcessor.kt (97%) rename src/gaea.app/src/main/kotlin/com/synebula/gaea/app/{component => }/cache/Cache.kt (98%) create mode 100644 src/gaea.app/src/main/kotlin/com/synebula/gaea/app/component/poi/ExcelData.kt rename src/gaea.app/src/main/kotlin/com/synebula/gaea/app/{ => controller}/Application.kt (84%) rename src/gaea.app/src/main/kotlin/com/synebula/gaea/app/{ => controller}/IApplication.kt (95%) rename src/gaea.app/src/main/kotlin/com/synebula/gaea/app/{ => controller}/SimpleApplication.kt (84%) rename src/gaea.app/src/main/kotlin/com/synebula/gaea/app/{ => controller}/cmd/CommandApp.kt (93%) rename src/gaea.app/src/main/kotlin/com/synebula/gaea/app/{ => controller}/cmd/ICommandApp.kt (92%) rename src/gaea.app/src/main/kotlin/com/synebula/gaea/app/{ => controller}/cmd/ISimpleCommandApp.kt (93%) rename src/gaea.app/src/main/kotlin/com/synebula/gaea/app/{ => controller}/cmd/SimpleCommandApp.kt (94%) rename src/gaea.app/src/main/kotlin/com/synebula/gaea/app/{ => controller}/query/IQueryApp.kt (93%) rename src/gaea.app/src/main/kotlin/com/synebula/gaea/app/{ => controller}/query/QueryApp.kt (92%) rename src/gaea.app/src/main/kotlin/com/synebula/gaea/app/{component => }/security/TokenManager.kt (74%) rename src/gaea.app/src/main/kotlin/com/synebula/gaea/app/{component => }/security/WebAuthorization.kt (89%) rename src/gaea.app/src/main/kotlin/com/synebula/gaea/app/{component => }/security/WebSecurity.kt (96%) create mode 100644 src/gaea.app/src/main/kotlin/com/synebula/gaea/app/security/session/User.kt rename src/gaea.app/src/main/kotlin/com/synebula/gaea/app/{component => }/security/session/UserSession.kt (83%) rename src/gaea.app/src/main/kotlin/com/synebula/gaea/app/{component => }/security/session/UserSessionManager.kt (92%) delete mode 100644 src/gaea.app/src/main/kotlin/com/synebula/gaea/app/struct/ExcelData.kt delete mode 100644 src/gaea.app/src/main/kotlin/com/synebula/gaea/app/struct/exception/TokenCloseExpireException.kt create mode 100644 src/gaea.app/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports create mode 100644 src/gaea/src/main/kotlin/com/synebula/gaea/data/permission/AuthorityType.kt create mode 100644 src/gaea/src/main/kotlin/com/synebula/gaea/data/permission/PermissionType.kt diff --git a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/autoconfig/AppAutoConfiguration.kt b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/autoconfig/AppAutoConfiguration.kt new file mode 100644 index 0000000..67c9f2a --- /dev/null +++ b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/autoconfig/AppAutoConfiguration.kt @@ -0,0 +1,8 @@ +package com.synebula.gaea.app.autoconfig + +import org.springframework.context.annotation.ComponentScan +import org.springframework.context.annotation.Configuration + +@Configuration +@ComponentScan(basePackages = ["com.synebula.gaea.app.bus", "com.synebula.gaea.app.component", "com.synebula.gaea.app.security"]) +class AppAutoConfiguration \ No newline at end of file diff --git a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/component/bus/EventBus.kt b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/bus/EventBus.kt similarity index 73% rename from src/gaea.app/src/main/kotlin/com/synebula/gaea/app/component/bus/EventBus.kt rename to src/gaea.app/src/main/kotlin/com/synebula/gaea/app/bus/EventBus.kt index 87f6c0c..1eca9a0 100644 --- a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/component/bus/EventBus.kt +++ b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/bus/EventBus.kt @@ -1,4 +1,4 @@ -package com.synebula.gaea.app.component.bus +package com.synebula.gaea.app.bus import com.synebula.gaea.bus.Bus import org.springframework.stereotype.Component diff --git a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/component/bus/EventBusSubscriberProcessor.kt b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/bus/EventBusSubscriberProcessor.kt similarity index 97% rename from src/gaea.app/src/main/kotlin/com/synebula/gaea/app/component/bus/EventBusSubscriberProcessor.kt rename to src/gaea.app/src/main/kotlin/com/synebula/gaea/app/bus/EventBusSubscriberProcessor.kt index a448727..c13ce49 100644 --- a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/component/bus/EventBusSubscriberProcessor.kt +++ b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/bus/EventBusSubscriberProcessor.kt @@ -1,4 +1,4 @@ -package com.synebula.gaea.app.component.bus +package com.synebula.gaea.app.bus import com.synebula.gaea.bus.DomainSubscribe import com.synebula.gaea.bus.IBus diff --git a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/component/cache/Cache.kt b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/cache/Cache.kt similarity index 98% rename from src/gaea.app/src/main/kotlin/com/synebula/gaea/app/component/cache/Cache.kt rename to src/gaea.app/src/main/kotlin/com/synebula/gaea/app/cache/Cache.kt index 3c9db7b..8766fc2 100644 --- a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/component/cache/Cache.kt +++ b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/cache/Cache.kt @@ -1,4 +1,4 @@ -package com.synebula.gaea.app.component.cache +package com.synebula.gaea.app.cache import com.google.common.cache.Cache import com.google.common.cache.CacheBuilder diff --git a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/component/poi/Excel.kt b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/component/poi/Excel.kt index 923dbd0..056204f 100644 --- a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/component/poi/Excel.kt +++ b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/component/poi/Excel.kt @@ -1,6 +1,5 @@ package com.synebula.gaea.app.component.poi -import com.synebula.gaea.app.struct.ExcelData import com.synebula.gaea.data.date.DateTime import com.synebula.gaea.exception.NoticeUserException import org.apache.poi.hpsf.Decimal @@ -40,7 +39,7 @@ object Excel { val titleFont = wb.createFont() titleFont.bold = true titleStyle.setFont(titleFont) - setBorderStyle(titleStyle, BorderStyle.THIN) + setBorderStyle(titleStyle) //声明列对象 // 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制 @@ -62,7 +61,7 @@ object Excel { val contentStyle = wb.createCellStyle() contentStyle.alignment = HorizontalAlignment.LEFT// 创建一个修改居左格式 contentStyle.verticalAlignment = VerticalAlignment.CENTER - setBorderStyle(contentStyle, BorderStyle.THIN) + setBorderStyle(contentStyle) //创建内容 var col = 0 @@ -146,6 +145,7 @@ object Excel { this.getCellValue(cell, evaluator).toString().toIntOrNull() } } + Double::class.java.name -> { if (cell.cellType == CellType.NUMERIC) { cell.numericCellValue @@ -153,6 +153,7 @@ object Excel { this.getCellValue(cell, evaluator).toString().toDoubleOrNull() } } + Float::class.java.name -> { if (cell.cellType == CellType.NUMERIC) { cell.numericCellValue.toFloat() @@ -160,6 +161,7 @@ object Excel { this.getCellValue(cell, evaluator).toString().toFloatOrNull() } } + Decimal::class.java.name -> { if (cell.cellType == CellType.NUMERIC) { cell.numericCellValue.toBigDecimal() @@ -167,6 +169,7 @@ object Excel { this.getCellValue(cell, evaluator).toString().toBigDecimalOrNull() } } + Boolean::class.java.name -> { if (cell.cellType == CellType.BOOLEAN) { cell.booleanCellValue @@ -174,11 +177,13 @@ object Excel { this.getCellValue(cell, evaluator).toString().toBoolean() } } + Date::class.java.name -> try { cell.dateCellValue } catch (ignored: Exception) { DateTime(cell.stringCellValue).date } + else -> cell.stringCellValue } rowData[columns[c].first] = value @@ -278,7 +283,7 @@ object Excel { /** * 设置cell style的边框 */ - private fun setBorderStyle(style: HSSFCellStyle, borderStyle: BorderStyle) { + private fun setBorderStyle(style: HSSFCellStyle, borderStyle: BorderStyle = BorderStyle.THIN) { style.borderTop = borderStyle style.borderRight = borderStyle style.borderBottom = borderStyle @@ -297,6 +302,7 @@ object Excel { numericCellValue } } + CellType.STRING -> cell.richStringCellValue.string CellType.BLANK -> "" CellType.FORMULA -> evaluator.evaluate(cell).toString() diff --git a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/component/poi/ExcelData.kt b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/component/poi/ExcelData.kt new file mode 100644 index 0000000..efa5b56 --- /dev/null +++ b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/component/poi/ExcelData.kt @@ -0,0 +1,7 @@ +package com.synebula.gaea.app.component.poi + +class ExcelData( + var title: String = "", + var columnNames: List = listOf(), + var data: List> = listOf() +) \ No newline at end of file diff --git a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/Application.kt b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/Application.kt similarity index 84% rename from src/gaea.app/src/main/kotlin/com/synebula/gaea/app/Application.kt rename to src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/Application.kt index 6ce4a47..9dabd27 100644 --- a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/Application.kt +++ b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/Application.kt @@ -1,7 +1,7 @@ -package com.synebula.gaea.app +package com.synebula.gaea.app.controller -import com.synebula.gaea.app.cmd.ICommandApp -import com.synebula.gaea.app.query.IQueryApp +import com.synebula.gaea.app.controller.cmd.ICommandApp +import com.synebula.gaea.app.controller.query.IQueryApp import com.synebula.gaea.data.message.HttpMessageFactory import com.synebula.gaea.domain.service.ICommand import com.synebula.gaea.domain.service.IService diff --git a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/IApplication.kt b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/IApplication.kt similarity index 95% rename from src/gaea.app/src/main/kotlin/com/synebula/gaea/app/IApplication.kt rename to src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/IApplication.kt index d444c5b..1cfb5d5 100644 --- a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/IApplication.kt +++ b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/IApplication.kt @@ -1,6 +1,6 @@ -package com.synebula.gaea.app +package com.synebula.gaea.app.controller -import com.synebula.gaea.app.component.security.session.UserSession +import com.synebula.gaea.app.security.session.UserSession import com.synebula.gaea.data.message.HttpMessage import com.synebula.gaea.data.message.HttpMessageFactory import com.synebula.gaea.data.message.Status diff --git a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/SimpleApplication.kt b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/SimpleApplication.kt similarity index 84% rename from src/gaea.app/src/main/kotlin/com/synebula/gaea/app/SimpleApplication.kt rename to src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/SimpleApplication.kt index 73a38b2..ebc64ee 100644 --- a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/SimpleApplication.kt +++ b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/SimpleApplication.kt @@ -1,7 +1,7 @@ -package com.synebula.gaea.app +package com.synebula.gaea.app.controller -import com.synebula.gaea.app.cmd.ISimpleCommandApp -import com.synebula.gaea.app.query.IQueryApp +import com.synebula.gaea.app.controller.cmd.ISimpleCommandApp +import com.synebula.gaea.app.controller.query.IQueryApp import com.synebula.gaea.data.message.HttpMessageFactory import com.synebula.gaea.domain.model.IAggregateRoot import com.synebula.gaea.domain.service.ISimpleService @@ -27,4 +27,4 @@ open class SimpleApplication, ID>( @Autowired override lateinit var httpMessageFactory: HttpMessageFactory -} +} \ No newline at end of file diff --git a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/cmd/CommandApp.kt b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/cmd/CommandApp.kt similarity index 93% rename from src/gaea.app/src/main/kotlin/com/synebula/gaea/app/cmd/CommandApp.kt rename to src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/cmd/CommandApp.kt index 1479655..c033219 100644 --- a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/cmd/CommandApp.kt +++ b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/cmd/CommandApp.kt @@ -1,4 +1,4 @@ -package com.synebula.gaea.app.cmd +package com.synebula.gaea.app.controller.cmd import com.synebula.gaea.data.message.HttpMessageFactory import com.synebula.gaea.domain.service.ICommand diff --git a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/cmd/ICommandApp.kt b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/cmd/ICommandApp.kt similarity index 92% rename from src/gaea.app/src/main/kotlin/com/synebula/gaea/app/cmd/ICommandApp.kt rename to src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/cmd/ICommandApp.kt index c6e1f2e..e83b428 100644 --- a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/cmd/ICommandApp.kt +++ b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/cmd/ICommandApp.kt @@ -1,6 +1,6 @@ -package com.synebula.gaea.app.cmd +package com.synebula.gaea.app.controller.cmd -import com.synebula.gaea.app.IApplication +import com.synebula.gaea.app.controller.IApplication import com.synebula.gaea.data.message.HttpMessage import com.synebula.gaea.data.message.Status import com.synebula.gaea.domain.service.ICommand diff --git a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/cmd/ISimpleCommandApp.kt b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/cmd/ISimpleCommandApp.kt similarity index 93% rename from src/gaea.app/src/main/kotlin/com/synebula/gaea/app/cmd/ISimpleCommandApp.kt rename to src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/cmd/ISimpleCommandApp.kt index 69d50eb..e1ac1ba 100644 --- a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/cmd/ISimpleCommandApp.kt +++ b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/cmd/ISimpleCommandApp.kt @@ -1,6 +1,6 @@ -package com.synebula.gaea.app.cmd +package com.synebula.gaea.app.controller.cmd -import com.synebula.gaea.app.IApplication +import com.synebula.gaea.app.controller.IApplication import com.synebula.gaea.data.message.HttpMessage import com.synebula.gaea.data.message.Status import com.synebula.gaea.domain.model.IAggregateRoot diff --git a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/cmd/SimpleCommandApp.kt b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/cmd/SimpleCommandApp.kt similarity index 94% rename from src/gaea.app/src/main/kotlin/com/synebula/gaea/app/cmd/SimpleCommandApp.kt rename to src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/cmd/SimpleCommandApp.kt index 9eccb5d..91c8121 100644 --- a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/cmd/SimpleCommandApp.kt +++ b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/cmd/SimpleCommandApp.kt @@ -1,4 +1,4 @@ -package com.synebula.gaea.app.cmd +package com.synebula.gaea.app.controller.cmd import com.synebula.gaea.data.message.HttpMessageFactory import com.synebula.gaea.domain.model.IAggregateRoot diff --git a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/query/IQueryApp.kt b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/query/IQueryApp.kt similarity index 93% rename from src/gaea.app/src/main/kotlin/com/synebula/gaea/app/query/IQueryApp.kt rename to src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/query/IQueryApp.kt index 92f590a..d0f4cea 100644 --- a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/query/IQueryApp.kt +++ b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/query/IQueryApp.kt @@ -1,6 +1,6 @@ -package com.synebula.gaea.app.query +package com.synebula.gaea.app.controller.query -import com.synebula.gaea.app.IApplication +import com.synebula.gaea.app.controller.IApplication import com.synebula.gaea.data.message.HttpMessage import com.synebula.gaea.query.IQuery import com.synebula.gaea.query.Params diff --git a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/query/QueryApp.kt b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/query/QueryApp.kt similarity index 92% rename from src/gaea.app/src/main/kotlin/com/synebula/gaea/app/query/QueryApp.kt rename to src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/query/QueryApp.kt index 64a9569..a0f6a88 100644 --- a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/query/QueryApp.kt +++ b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/controller/query/QueryApp.kt @@ -1,4 +1,4 @@ -package com.synebula.gaea.app.query +package com.synebula.gaea.app.controller.query import com.synebula.gaea.data.message.HttpMessageFactory import com.synebula.gaea.log.ILogger diff --git a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/component/security/TokenManager.kt b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/security/TokenManager.kt similarity index 74% rename from src/gaea.app/src/main/kotlin/com/synebula/gaea/app/component/security/TokenManager.kt rename to src/gaea.app/src/main/kotlin/com/synebula/gaea/app/security/TokenManager.kt index a9a4c7d..58690bc 100644 --- a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/component/security/TokenManager.kt +++ b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/security/TokenManager.kt @@ -1,9 +1,9 @@ -package com.synebula.gaea.app.component.security +package com.synebula.gaea.app.security import com.auth0.jwt.JWT import com.auth0.jwt.algorithms.Algorithm +import com.auth0.jwt.exceptions.TokenExpiredException import com.google.gson.Gson -import com.synebula.gaea.app.struct.exception.TokenCloseExpireException import com.synebula.gaea.log.ILogger import org.springframework.beans.factory.annotation.Autowired import org.springframework.beans.factory.annotation.Value @@ -71,6 +71,25 @@ class TokenManager { .sign(algorithm) } + /** + * 校验token是否正确 + * + * @param token 密钥 + * @param func 自定义验证方法 + */ + fun verifyTime(token: String, func: (total: Long, remain: Long) -> Unit) { + try { + val now = Date() + val jwt = JWT.decode(token) + val total = jwt.expiresAt.time - jwt.issuedAt.time //总时间 + val remain = jwt.expiresAt.time - now.time //剩余的时间 + func(total, remain) + } catch (ex: Exception) { + this.logger.error(this, ex, "解析token出错") + throw ex + } + } + /** * 校验token是否正确 * @@ -78,21 +97,16 @@ class TokenManager { * @return 是否正确 */ fun verify(token: String, clazz: Class): T? { - try { - val now = Date() + return try { val algorithm = Algorithm.HMAC256(secret) - val jwt = JWT.decode(token) - val remain = jwt.expiresAt.time - now.time //剩余的时间 - val total = jwt.expiresAt.time - jwt.issuedAt.time //总时间 - if (remain > 0 && 1.0 * remain / total <= 0.3) //存活时间少于总时间的1/3重新下发 - throw TokenCloseExpireException("", JWT.decode(token).getClaim("user").asString()) - val result = JWT.require(algorithm).build().verify(token) val json = result.getClaim(this.payload).asString() - return gson.fromJson(json, clazz) + gson.fromJson(json, clazz) + } catch (ex: TokenExpiredException) { + null } catch (ex: Exception) { - this.logger.debug(this, ex, "解析token出错") - throw ex + this.logger.error(this, ex, "解析token出错") + throw ex } } @@ -103,20 +117,15 @@ class TokenManager { * @return 是否正确 */ fun verify(token: String): String { - try { - val now = Date() + return try { val algorithm = Algorithm.HMAC256(secret) - val jwt = JWT.decode(token) - val remain = jwt.expiresAt.time - now.time //剩余的时间 - val total = jwt.expiresAt.time - jwt.issuedAt.time //总时间 - if (remain > 0 && 1.0 * remain / total <= 0.3) //存活时间少于总时间的1/3重新下发 - throw TokenCloseExpireException("", JWT.decode(token).getClaim("user").asString()) - val result = JWT.require(algorithm).build().verify(token) - return result.getClaim(payload).asString() + result.getClaim(this.payload).asString() + } catch (ex: TokenExpiredException) { + "" } catch (ex: Exception) { - this.logger.debug(this, ex, "解析token出错") - throw ex + this.logger.error(this, ex, "解析token出错") + throw ex } } diff --git a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/component/security/WebAuthorization.kt b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/security/WebAuthorization.kt similarity index 89% rename from src/gaea.app/src/main/kotlin/com/synebula/gaea/app/component/security/WebAuthorization.kt rename to src/gaea.app/src/main/kotlin/com/synebula/gaea/app/security/WebAuthorization.kt index 5f0bf76..72102bc 100644 --- a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/component/security/WebAuthorization.kt +++ b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/security/WebAuthorization.kt @@ -1,6 +1,6 @@ -package com.synebula.gaea.app.component.security +package com.synebula.gaea.app.security -import com.synebula.gaea.app.component.security.session.UserSessionManager +import com.synebula.gaea.app.security.session.UserSessionManager import com.synebula.gaea.data.message.HttpMessageFactory import com.synebula.gaea.data.message.Status import org.springframework.security.authentication.UsernamePasswordAuthenticationToken @@ -40,7 +40,9 @@ class WebAuthorization( val identity = if (this.storage == "cookie") { request.cookies.find { it.name == tokenKey }?.value ?: "" } else { - request.getHeader(tokenKey) ?: "" + var token = request.getHeader(tokenKey) ?: "" + if (token.isEmpty()) token = request.getParameter(tokenKey) ?: "" + token } val user = this.userSessionManager.userSession(identity) if (user != null) { diff --git a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/component/security/WebSecurity.kt b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/security/WebSecurity.kt similarity index 96% rename from src/gaea.app/src/main/kotlin/com/synebula/gaea/app/component/security/WebSecurity.kt rename to src/gaea.app/src/main/kotlin/com/synebula/gaea/app/security/WebSecurity.kt index bf3b26f..b906b2a 100644 --- a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/component/security/WebSecurity.kt +++ b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/security/WebSecurity.kt @@ -1,6 +1,6 @@ -package com.synebula.gaea.app.component.security +package com.synebula.gaea.app.security -import com.synebula.gaea.app.component.security.session.UserSessionManager +import com.synebula.gaea.app.security.session.UserSessionManager import com.synebula.gaea.data.message.HttpMessageFactory import com.synebula.gaea.data.message.Status import org.springframework.beans.factory.annotation.Autowired diff --git a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/security/session/User.kt b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/security/session/User.kt new file mode 100644 index 0000000..09a6f75 --- /dev/null +++ b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/security/session/User.kt @@ -0,0 +1,16 @@ +package com.synebula.gaea.app.security.session + +import com.synebula.gaea.data.permission.AuthorityType +import com.synebula.gaea.data.permission.PermissionType + +open class User { + /** + * 权限类型, 根据类型来动态应用[permissions]中的权限信息. 通常配置在角色中 + */ + var permissionType = PermissionType.Minimum + + /** + * 用户的权限信息. 通常通过角色配置 + */ + var permissions = mapOf() +} \ No newline at end of file diff --git a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/component/security/session/UserSession.kt b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/security/session/UserSession.kt similarity index 83% rename from src/gaea.app/src/main/kotlin/com/synebula/gaea/app/component/security/session/UserSession.kt rename to src/gaea.app/src/main/kotlin/com/synebula/gaea/app/security/session/UserSession.kt index 3614a61..3ddec0f 100644 --- a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/component/security/session/UserSession.kt +++ b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/security/session/UserSession.kt @@ -1,4 +1,4 @@ -package com.synebula.gaea.app.component.security.session +package com.synebula.gaea.app.security.session /** * 登陆用户会话信息 @@ -27,7 +27,7 @@ class UserSession(var uid: String, var user: Any) { * 获取指定类型的用户信息 */ @Suppress("UNCHECKED_CAST") - fun user(): T { + fun user(): T { return user as T } } \ No newline at end of file diff --git a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/component/security/session/UserSessionManager.kt b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/security/session/UserSessionManager.kt similarity index 92% rename from src/gaea.app/src/main/kotlin/com/synebula/gaea/app/component/security/session/UserSessionManager.kt rename to src/gaea.app/src/main/kotlin/com/synebula/gaea/app/security/session/UserSessionManager.kt index 6129948..c39d87b 100644 --- a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/component/security/session/UserSessionManager.kt +++ b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/security/session/UserSessionManager.kt @@ -1,6 +1,6 @@ -package com.synebula.gaea.app.component.security.session +package com.synebula.gaea.app.security.session -import com.synebula.gaea.app.component.cache.Cache +import com.synebula.gaea.app.cache.Cache import com.synebula.gaea.ext.toMd5 import org.springframework.beans.factory.annotation.Value import org.springframework.stereotype.Component diff --git a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/struct/ExcelData.kt b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/struct/ExcelData.kt deleted file mode 100644 index ba4cf67..0000000 --- a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/struct/ExcelData.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.synebula.gaea.app.struct - -class ExcelData(var title: String = "", - var columnNames: List = listOf(), - var data: List> = listOf()) \ No newline at end of file diff --git a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/struct/exception/TokenCloseExpireException.kt b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/struct/exception/TokenCloseExpireException.kt deleted file mode 100644 index ffe8a26..0000000 --- a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/struct/exception/TokenCloseExpireException.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.synebula.gaea.app.struct.exception - -import com.auth0.jwt.exceptions.TokenExpiredException - -class TokenCloseExpireException(msg: String, var payload: String) : TokenExpiredException(msg) diff --git a/src/gaea.app/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/src/gaea.app/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..dc3976a --- /dev/null +++ b/src/gaea.app/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +com.synebula.gaea.app.autoconfig.AppAutoConfiguration \ No newline at end of file diff --git a/src/gaea/src/main/kotlin/com/synebula/gaea/data/permission/AuthorityType.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/data/permission/AuthorityType.kt new file mode 100644 index 0000000..7185025 --- /dev/null +++ b/src/gaea/src/main/kotlin/com/synebula/gaea/data/permission/AuthorityType.kt @@ -0,0 +1,10 @@ +package com.synebula.gaea.data.permission + +/** + * 元素授权类型 + */ +enum class AuthorityType { + Default, + Deny, + Allow +} \ No newline at end of file diff --git a/src/gaea/src/main/kotlin/com/synebula/gaea/data/permission/PermissionType.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/data/permission/PermissionType.kt new file mode 100644 index 0000000..50eca1a --- /dev/null +++ b/src/gaea/src/main/kotlin/com/synebula/gaea/data/permission/PermissionType.kt @@ -0,0 +1,28 @@ +package com.synebula.gaea.data.permission + +/** + * 角色权限类型 + */ +enum class PermissionType { + /** + * 拥有所有权限 + */ + All, + + /** + * 拥有最大权限 + * 不配置无权则有权限 + */ + Maximum, + + /** + * 最小权限 + * 不配置有权则无权限 + */ + Minimum, + + /** + * 没有任何权限 + */ + None +} \ No newline at end of file