Merge branch 'master' of gitee.com:youlaiorg/youlai-boot
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img alt="有来技术" src="https://img.shields.io/badge/Java -17-brightgreen.svg"/>
|
<img alt="有来技术" src="https://img.shields.io/badge/Java -17-brightgreen.svg"/>
|
||||||
<img alt="有来技术" src="https://img.shields.io/badge/SpringBoot-3.2.1-green.svg"/>
|
<img alt="有来技术" src="https://img.shields.io/badge/SpringBoot-3.2.3-green.svg"/>
|
||||||
<a href="https://gitee.com/youlaitech/youlai-boot" target="_blank">
|
<a href="https://gitee.com/youlaitech/youlai-boot" target="_blank">
|
||||||
<img alt="有来技术" src="https://gitee.com/youlaiorg/youlai-boot/badge/star.svg"/>
|
<img alt="有来技术" src="https://gitee.com/youlaiorg/youlai-boot/badge/star.svg"/>
|
||||||
</a>
|
</a>
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.youlai.system.config;
|
package com.youlai.system.config;
|
||||||
|
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import cn.hutool.jwt.JWTPayload;
|
||||||
import com.youlai.system.security.util.JwtUtils;
|
import com.youlai.system.security.util.JwtUtils;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
@@ -79,7 +80,10 @@ public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
|
|||||||
if (StrUtil.isNotBlank(bearerToken) && bearerToken.startsWith("Bearer ")) {
|
if (StrUtil.isNotBlank(bearerToken) && bearerToken.startsWith("Bearer ")) {
|
||||||
try {
|
try {
|
||||||
// 移除 "Bearer " 前缀,从令牌中提取用户信息(username), 并设置到认证信息中
|
// 移除 "Bearer " 前缀,从令牌中提取用户信息(username), 并设置到认证信息中
|
||||||
String username = JwtUtils.parseToken(bearerToken).get("name").toString();
|
|
||||||
|
// 这里不应该用"name"
|
||||||
|
// String username = JwtUtils.parseToken(bearerToken).get("name").toString();
|
||||||
|
String username = JwtUtils.parseToken(bearerToken).get(JWTPayload.SUBJECT).toString();
|
||||||
|
|
||||||
if (StrUtil.isNotBlank(username)) {
|
if (StrUtil.isNotBlank(username)) {
|
||||||
accessor.setUser(() -> username);
|
accessor.setUser(() -> username);
|
||||||
|
|||||||
@@ -52,9 +52,7 @@ public class JwtUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建Token
|
* 生成 JWT Token
|
||||||
* <p>
|
|
||||||
* 认证成功后的用户信息会被封装到 Authentication 对象中,然后通过 JwtTokenProvider#createToken(Authentication) 方法创建 Token 字符串
|
|
||||||
*
|
*
|
||||||
* @param authentication 用户认证信息
|
* @param authentication 用户认证信息
|
||||||
* @return Token 字符串
|
* @return Token 字符串
|
||||||
@@ -85,11 +83,35 @@ public class JwtUtils {
|
|||||||
return JWTUtil.createToken(payload, JwtUtils.key);
|
return JWTUtil.createToken(payload, JwtUtils.key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 从 Token 中解析数据
|
* 从 JWT Token 中解析 Authentication 用户认证信息
|
||||||
|
*
|
||||||
|
* @param payload JWT 载体
|
||||||
|
* @return 用户认证信息
|
||||||
|
*/
|
||||||
|
public static UsernamePasswordAuthenticationToken getAuthentication(Map<String, Object> payload) {
|
||||||
|
SysUserDetails userDetails = new SysUserDetails();
|
||||||
|
userDetails.setUserId(Convert.toLong(payload.get(JwtClaimConstants.USER_ID))); // 用户ID
|
||||||
|
userDetails.setDeptId(Convert.toLong(payload.get(JwtClaimConstants.DEPT_ID))); // 部门ID
|
||||||
|
userDetails.setDataScope(Convert.toInt(payload.get(JwtClaimConstants.DATA_SCOPE))); // 数据权限范围
|
||||||
|
|
||||||
|
userDetails.setUsername(Convert.toStr(payload.get(JWTPayload.SUBJECT))); // 用户名
|
||||||
|
// 角色集合
|
||||||
|
Set<SimpleGrantedAuthority> authorities = ((JSONArray) payload.get(JwtClaimConstants.AUTHORITIES))
|
||||||
|
.stream()
|
||||||
|
.map(authority -> new SimpleGrantedAuthority(Convert.toStr(authority)))
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
|
||||||
|
return new UsernamePasswordAuthenticationToken(userDetails, "", authorities);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 解析 JWT Token 获取载体信息
|
||||||
*
|
*
|
||||||
* @param token JWT Token
|
* @param token JWT Token
|
||||||
* @return 解析数据
|
* @return 载体信息
|
||||||
*/
|
*/
|
||||||
public static Map<String, Object> parseToken(String token) {
|
public static Map<String, Object> parseToken(String token) {
|
||||||
try {
|
try {
|
||||||
@@ -110,25 +132,5 @@ public class JwtUtils {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 从 Token 中获取 Authentication
|
|
||||||
*
|
|
||||||
* @param payload
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public static UsernamePasswordAuthenticationToken getAuthentication(Map<String, Object> payload) {
|
|
||||||
SysUserDetails userDetails = new SysUserDetails();
|
|
||||||
userDetails.setUserId(Convert.toLong(payload.get(JwtClaimConstants.USER_ID))); // 用户ID
|
|
||||||
userDetails.setDeptId(Convert.toLong(payload.get(JwtClaimConstants.DEPT_ID))); // 部门ID
|
|
||||||
userDetails.setDataScope(Convert.toInt(payload.get(JwtClaimConstants.DATA_SCOPE))); // 数据权限范围
|
|
||||||
|
|
||||||
userDetails.setUsername(Convert.toStr(payload.get(JWTPayload.SUBJECT))); // 用户名
|
|
||||||
// 角色集合
|
|
||||||
Set<SimpleGrantedAuthority> authorities = ((JSONArray) payload.get(JwtClaimConstants.AUTHORITIES))
|
|
||||||
.stream()
|
|
||||||
.map(authority -> new SimpleGrantedAuthority(Convert.toStr(authority)))
|
|
||||||
.collect(Collectors.toSet());
|
|
||||||
|
|
||||||
return new UsernamePasswordAuthenticationToken(userDetails, "", authorities);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user