dd553ae160
- 后端功能: - 实现JWT登录鉴权,token有效期7天,超过1天自动刷新 - 添加用户管理功能,支持创建、删除、修改密码 - 首次创建的用户为默认账户,拥有管理权限 - 实现密码重置功能,支持重置密钥和频率限制(1分钟最多3次) - 所有API接口需要JWT鉴权 - WebSocket连接需要JWT鉴权,绑定用户身份 - 前端功能: - 添加登录页面和密码重置页面 - 添加用户管理页面,默认账户可管理所有用户,普通用户只能查看和修改自己 - 添加退出登录功能,带二次确认 - 未登录时不建立WebSocket连接 - API请求自动携带JWT token,认证失败自动跳转登录页 - 安全特性: - 密码使用BCrypt加密存储 - 重置密码错误信息统一处理,避免信息泄露 - 用户操作严格绑定JWT,防止数据篡改和越权
87 lines
2.6 KiB
Kotlin
87 lines
2.6 KiB
Kotlin
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
|
|
|
|
plugins {
|
|
id("org.springframework.boot") version "3.2.0"
|
|
id("io.spring.dependency-management") version "1.1.4"
|
|
kotlin("jvm") version "1.9.20"
|
|
kotlin("plugin.spring") version "1.9.20"
|
|
kotlin("plugin.jpa") version "1.9.20"
|
|
}
|
|
|
|
group = "com.wrbug"
|
|
version = "1.0.0"
|
|
|
|
java {
|
|
sourceCompatibility = JavaVersion.VERSION_17
|
|
}
|
|
|
|
repositories {
|
|
mavenCentral()
|
|
}
|
|
|
|
dependencies {
|
|
// Spring Boot
|
|
implementation("org.springframework.boot:spring-boot-starter-web")
|
|
implementation("org.springframework.boot:spring-boot-starter-websocket")
|
|
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
|
|
implementation("org.springframework.boot:spring-boot-starter-validation")
|
|
|
|
// Kotlin
|
|
implementation("org.jetbrains.kotlin:kotlin-reflect")
|
|
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
|
|
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core")
|
|
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-reactor")
|
|
|
|
// Retrofit
|
|
implementation("com.squareup.retrofit2:retrofit:2.9.0")
|
|
implementation("com.squareup.retrofit2:converter-gson:2.9.0")
|
|
|
|
// OkHttp
|
|
implementation("com.squareup.okhttp3:okhttp:4.12.0")
|
|
|
|
// WebSocket Client
|
|
implementation("org.java-websocket:Java-WebSocket:1.5.4")
|
|
|
|
// Database
|
|
implementation("com.mysql:mysql-connector-j:8.2.0")
|
|
implementation("org.flywaydb:flyway-core")
|
|
implementation("org.flywaydb:flyway-mysql")
|
|
|
|
// Jackson
|
|
implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
|
|
implementation("com.fasterxml.jackson.core:jackson-databind")
|
|
|
|
// Keccak-256 for Ethereum function selector
|
|
implementation("org.bouncycastle:bcprov-jdk18on:1.78.1")
|
|
|
|
// Web3j for Ethereum wallet and EIP-712 signing
|
|
implementation("org.web3j:core:5.0.0")
|
|
|
|
// JWT
|
|
implementation("io.jsonwebtoken:jjwt-api:0.12.3")
|
|
implementation("io.jsonwebtoken:jjwt-impl:0.12.3")
|
|
implementation("io.jsonwebtoken:jjwt-jackson:0.12.3")
|
|
|
|
// BCrypt for password encryption
|
|
implementation("org.springframework.security:spring-security-crypto:6.2.2")
|
|
|
|
// Logging
|
|
implementation("org.slf4j:slf4j-api")
|
|
|
|
// Test
|
|
testImplementation("org.springframework.boot:spring-boot-starter-test")
|
|
testImplementation("org.jetbrains.kotlinx:kotlinx-coroutines-test")
|
|
}
|
|
|
|
tasks.withType<KotlinCompile> {
|
|
kotlinOptions {
|
|
freeCompilerArgs += "-Xjsr305=strict"
|
|
jvmTarget = "17"
|
|
}
|
|
}
|
|
|
|
tasks.withType<Test> {
|
|
useJUnitPlatform()
|
|
}
|
|
|