Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
C
custom-server
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lizhonghong
custom-server
Commits
fd58d2d0
Commit
fd58d2d0
authored
Jul 14, 2026
by
Lizh
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: P0 Step 1.5+1.6 — SysMenuEntity添加delFlag + 新建 5 个 VO
parent
ad0b1390
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
204 additions
and
1 deletions
+204
-1
custom-server-app/src/main/java/com/jomalls/custom/app/vo/LoginUserInfoVO.java
+19
-0
custom-server-app/src/main/java/com/jomalls/custom/app/vo/MetaVO.java
+18
-0
custom-server-app/src/main/java/com/jomalls/custom/app/vo/RouterVO.java
+24
-0
custom-server-app/src/main/java/com/jomalls/custom/app/vo/SysDeptVO.java
+19
-0
custom-server-app/src/main/java/com/jomalls/custom/app/vo/SysUserVO.java
+44
-0
custom-server-core/src/main/java/com/jomalls/custom/security/TokenHandle.java
+45
-0
custom-server-domain/src/main/java/com/jomalls/custom/dal/entity/SysMenuEntity.java
+7
-1
custom-server-starter/pom.xml
+5
-0
custom-server-starter/src/main/java/com/jomalls/custom/config/SecurityConfig.java
+23
-0
No files found.
custom-server-app/src/main/java/com/jomalls/custom/app/vo/LoginUserInfoVO.java
0 → 100644
View file @
fd58d2d0
package
com
.
jomalls
.
custom
.
app
.
vo
;
import
com.fasterxml.jackson.annotation.JsonInclude
;
import
lombok.Data
;
import
java.util.Set
;
/**
* 登录用户信息 VO
*
* @author Lizh
*/
@Data
@JsonInclude
(
JsonInclude
.
Include
.
NON_NULL
)
public
class
LoginUserInfoVO
{
private
SysUserVO
user
;
private
Set
<
String
>
roles
;
private
Set
<
String
>
permissions
;
}
custom-server-app/src/main/java/com/jomalls/custom/app/vo/MetaVO.java
0 → 100644
View file @
fd58d2d0
package
com
.
jomalls
.
custom
.
app
.
vo
;
import
com.fasterxml.jackson.annotation.JsonInclude
;
import
lombok.Data
;
/**
* 路由元数据 VO
*
* @author Lizh
*/
@Data
@JsonInclude
(
JsonInclude
.
Include
.
NON_NULL
)
public
class
MetaVO
{
private
String
title
;
private
String
icon
;
private
Boolean
isCache
;
private
Boolean
isFrame
;
}
custom-server-app/src/main/java/com/jomalls/custom/app/vo/RouterVO.java
0 → 100644
View file @
fd58d2d0
package
com
.
jomalls
.
custom
.
app
.
vo
;
import
com.fasterxml.jackson.annotation.JsonInclude
;
import
lombok.Data
;
import
java.util.List
;
/**
* 前端路由 VO
*
* @author Lizh
*/
@Data
@JsonInclude
(
JsonInclude
.
Include
.
NON_NULL
)
public
class
RouterVO
{
private
String
name
;
private
String
path
;
private
Boolean
hidden
;
private
String
redirect
;
private
String
component
;
private
Boolean
alwaysShow
;
private
MetaVO
meta
;
private
List
<
RouterVO
>
children
;
}
custom-server-app/src/main/java/com/jomalls/custom/app/vo/SysDeptVO.java
0 → 100644
View file @
fd58d2d0
package
com
.
jomalls
.
custom
.
app
.
vo
;
import
com.fasterxml.jackson.annotation.JsonInclude
;
import
com.fasterxml.jackson.annotation.JsonProperty
;
import
lombok.Data
;
/**
* 部门 VO
*
* @author Lizh
*/
@Data
@JsonInclude
(
JsonInclude
.
Include
.
NON_NULL
)
public
class
SysDeptVO
{
@JsonProperty
(
"deptId"
)
private
Long
deptId
;
@JsonProperty
(
"deptName"
)
private
String
deptName
;
}
custom-server-app/src/main/java/com/jomalls/custom/app/vo/SysUserVO.java
0 → 100644
View file @
fd58d2d0
package
com
.
jomalls
.
custom
.
app
.
vo
;
import
com.fasterxml.jackson.annotation.JsonInclude
;
import
com.fasterxml.jackson.annotation.JsonProperty
;
import
lombok.Data
;
/**
* 系统用户 VO
*
* @author Lizh
*/
@Data
@JsonInclude
(
JsonInclude
.
Include
.
NON_NULL
)
public
class
SysUserVO
{
@JsonProperty
(
"userId"
)
private
Long
userId
;
@JsonProperty
(
"deptId"
)
private
Long
deptId
;
@JsonProperty
(
"userName"
)
private
String
userName
;
@JsonProperty
(
"nickName"
)
private
String
nickName
;
@JsonProperty
(
"email"
)
private
String
email
;
@JsonProperty
(
"phonenumber"
)
private
String
phonenumber
;
@JsonProperty
(
"sex"
)
private
String
sex
;
@JsonProperty
(
"avatar"
)
private
String
avatar
;
@JsonProperty
(
"status"
)
private
String
status
;
@JsonProperty
(
"loginIp"
)
private
String
loginIp
;
@JsonProperty
(
"loginDate"
)
private
String
loginDate
;
@JsonProperty
(
"pwdUpdateDate"
)
private
String
pwdUpdateDate
;
@JsonProperty
(
"createTime"
)
private
String
createTime
;
@JsonProperty
(
"remark"
)
private
String
remark
;
private
SysDeptVO
dept
;
}
custom-server-core/src/main/java/com/jomalls/custom/security/TokenHandle.java
View file @
fd58d2d0
...
...
@@ -4,6 +4,8 @@ import com.alibaba.fastjson2.JSON;
import
com.alibaba.fastjson2.JSONObject
;
import
io.jsonwebtoken.Claims
;
import
io.jsonwebtoken.JwtException
;
import
io.jsonwebtoken.Jwts
;
import
io.jsonwebtoken.security.Keys
;
import
jakarta.servlet.http.HttpServletRequest
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
@@ -12,6 +14,7 @@ import org.springframework.data.redis.core.StringRedisTemplate;
import
org.springframework.stereotype.Component
;
import
org.springframework.util.StringUtils
;
import
javax.crypto.SecretKey
;
import
java.util.Date
;
import
java.util.HashSet
;
import
java.util.List
;
...
...
@@ -52,6 +55,9 @@ public class TokenHandle {
@Value
(
"${token.secret:custom}"
)
private
String
secret
;
@Value
(
"${token.expireTime:720}"
)
private
int
expireTime
;
// 分钟
private
static
final
String
SPACE
=
"\\s+"
;
/**
...
...
@@ -222,6 +228,45 @@ public class TokenHandle {
}
/**
* 创建令牌(JJWT 0.12.x 标准格式)
*
* @param loginUser 登录用户信息
* @return JWT token 字符串
*/
public
String
createToken
(
LoginUser
loginUser
)
{
String
token
=
java
.
util
.
UUID
.
randomUUID
().
toString
();
loginUser
.
setToken
(
token
);
loginUser
.
setLoginTime
(
System
.
currentTimeMillis
());
loginUser
.
setExpireTime
(
System
.
currentTimeMillis
()
+
expireTime
*
60
*
1000L
);
// 存入 Redis(custom-back 兼容路径)
if
(
stringRedisTemplate
!=
null
)
{
String
redisKey
=
REDIS_TOKEN_PREFIX
+
token
;
stringRedisTemplate
.
opsForValue
().
set
(
redisKey
,
JSON
.
toJSONString
(
loginUser
),
expireTime
*
60
,
java
.
util
.
concurrent
.
TimeUnit
.
SECONDS
);
}
// 生成 JWT
byte
[]
keyBytes
=
secret
.
getBytes
(
java
.
nio
.
charset
.
StandardCharsets
.
UTF_8
);
Keys
.
hmacShaKeyFor
(
keyBytes
);
SecretKey
signingKey
=
Keys
.
hmacShaKeyFor
(
keyBytes
);
return
Jwts
.
builder
()
.
claim
(
"login_user_key"
,
token
)
.
claim
(
"id"
,
loginUser
.
getUserId
())
.
claim
(
"account"
,
loginUser
.
getUsername
())
.
claim
(
"deptId"
,
loginUser
.
getDeptId
())
.
claim
(
"permissions"
,
loginUser
.
getPermissions
())
.
expiration
(
new
java
.
util
.
Date
(
loginUser
.
getExpireTime
()))
.
signWith
(
signingKey
)
.
compact
();
}
/**
* 从请求头获取令牌
*/
public
String
getToken
(
HttpServletRequest
request
)
{
...
...
custom-server-domain/src/main/java/com/jomalls/custom/dal/entity/SysMenuEntity.java
View file @
fd58d2d0
...
...
@@ -140,5 +140,11 @@ public class SysMenuEntity implements Serializable {
*/
@TableField
(
"remark"
)
private
String
remark
;
/**
* 删除标记(0正常 1删除)
*/
@TableField
(
"del_flag"
)
private
String
delFlag
;
}
custom-server-starter/pom.xml
View file @
fd58d2d0
...
...
@@ -74,6 +74,11 @@
<artifactId>
lombok
</artifactId>
<scope>
provided
</scope>
</dependency>
<!-- Spring Security Crypto:BCrypt 密码编码器 -->
<dependency>
<groupId>
org.springframework.security
</groupId>
<artifactId>
spring-security-crypto
</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
...
...
custom-server-starter/src/main/java/com/jomalls/custom/config/SecurityConfig.java
0 → 100644
View file @
fd58d2d0
package
com
.
jomalls
.
custom
.
config
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder
;
import
org.springframework.security.crypto.password.PasswordEncoder
;
/**
* 安全配置
*
* @author Lizh
*/
@Configuration
public
class
SecurityConfig
{
/**
* BCrypt 密码编码器
*/
@Bean
public
PasswordEncoder
passwordEncoder
()
{
return
new
BCryptPasswordEncoder
();
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment