mirror of
http://192.168.1.205:9980/cf_devdept2/cf_imes_server.git
synced 2026-08-12 21:02:08 +08:00
优化获取是否管理员自动的方式,去除登出接口组织id依赖
This commit is contained in:
+4
-4
@@ -94,10 +94,10 @@ public class TokenAuthenticationFilter extends OncePerRequestFilter {
|
|||||||
&& ObjectUtil.notEqual(accessToken.getUserType(), userType)) {
|
&& ObjectUtil.notEqual(accessToken.getUserType(), userType)) {
|
||||||
throw new AccessDeniedException("错误的用户类型");
|
throw new AccessDeniedException("错误的用户类型");
|
||||||
}
|
}
|
||||||
CommonResult<Boolean> superAdmin = permissionApi.hasAnyRoles(accessToken.getUserId(), "super_admin");
|
//CommonResult<Boolean> superAdmin = permissionApi.hasAnyRoles(accessToken.getUserId(), "super_admin");
|
||||||
// 构建登录用户
|
// 构建登录用户
|
||||||
return new LoginUser().setId(accessToken.getUserId()).setUserType(accessToken.getUserType())
|
return new LoginUser().setId(accessToken.getUserId()).setUserType(accessToken.getUserType())
|
||||||
.setOrganId(accessToken.getOrganId()).setScopes(accessToken.getScopes()).setIsSupAdmin(superAdmin.getCheckedData())
|
.setOrganId(accessToken.getOrganId()).setScopes(accessToken.getScopes()).setIsSupAdmin(accessToken.getIsSupAdmin())
|
||||||
.setLarge(accessToken.getLarge()).setDbNo(accessToken.getDbNo()).setTableNo(accessToken.getTableNo());
|
.setLarge(accessToken.getLarge()).setDbNo(accessToken.getDbNo()).setTableNo(accessToken.getTableNo());
|
||||||
} catch (ServiceException serviceException) {
|
} catch (ServiceException serviceException) {
|
||||||
// 校验 Token 不通过时,考虑到一些接口是无需登录的,所以直接返回 null 即可
|
// 校验 Token 不通过时,考虑到一些接口是无需登录的,所以直接返回 null 即可
|
||||||
@@ -133,8 +133,8 @@ public class TokenAuthenticationFilter extends OncePerRequestFilter {
|
|||||||
String loginUserStr = request.getHeader(SecurityFrameworkUtils.LOGIN_USER_HEADER);
|
String loginUserStr = request.getHeader(SecurityFrameworkUtils.LOGIN_USER_HEADER);
|
||||||
if(StrUtil.isNotEmpty(loginUserStr)) {
|
if(StrUtil.isNotEmpty(loginUserStr)) {
|
||||||
LoginUser loginUser = JsonUtils.parseObject(loginUserStr, LoginUser.class);
|
LoginUser loginUser = JsonUtils.parseObject(loginUserStr, LoginUser.class);
|
||||||
CommonResult<Boolean> superAdmin = permissionApi.hasAnyRoles(loginUser.getId(), "super_admin");
|
//CommonResult<Boolean> superAdmin = permissionApi.hasAnyRoles(loginUser.getId(), "super_admin");
|
||||||
loginUser.setIsSupAdmin(superAdmin.getCheckedData());
|
//loginUser.setIsSupAdmin(superAdmin.getCheckedData());
|
||||||
loginUser.setNickname(URLDecoder.decode(loginUser.getNickname(),StandardCharsets.UTF_8));
|
loginUser.setNickname(URLDecoder.decode(loginUser.getNickname(),StandardCharsets.UTF_8));
|
||||||
return loginUser;
|
return loginUser;
|
||||||
}
|
}
|
||||||
|
|||||||
+10
@@ -41,6 +41,16 @@ public interface SecurityFrameworkService {
|
|||||||
*/
|
*/
|
||||||
boolean hasAnyRoles(String... roles);
|
boolean hasAnyRoles(String... roles);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 判断是否有角色,任一一个即可
|
||||||
|
*
|
||||||
|
* @param userId 用户id
|
||||||
|
* @param roles 角色数组
|
||||||
|
* @return 是否
|
||||||
|
*/
|
||||||
|
boolean hasAnyRoles(Long userId, String... roles);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 判断是否有授权
|
* 判断是否有授权
|
||||||
*
|
*
|
||||||
|
|||||||
+6
@@ -76,6 +76,12 @@ public class SecurityFrameworkServiceImpl implements SecurityFrameworkService {
|
|||||||
return hasAnyRolesCache.get(new KeyValue<>(SecurityFrameworkUtils.getLoginUserId(), Arrays.asList(roles)));
|
return hasAnyRolesCache.get(new KeyValue<>(SecurityFrameworkUtils.getLoginUserId(), Arrays.asList(roles)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@SneakyThrows
|
||||||
|
public boolean hasAnyRoles(Long userId, String... roles) {
|
||||||
|
return hasAnyRolesCache.get(new KeyValue<>(userId, Arrays.asList(roles)));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean hasScope(String scope) {
|
public boolean hasScope(String scope) {
|
||||||
return hasAnyScopes(scope);
|
return hasAnyScopes(scope);
|
||||||
|
|||||||
@@ -50,5 +50,9 @@ public class LoginUser {
|
|||||||
* 用户nic
|
* 用户nic
|
||||||
*/
|
*/
|
||||||
private String nickname;
|
private String nickname;
|
||||||
|
/**
|
||||||
|
* 是否超级管理员
|
||||||
|
*/
|
||||||
|
private Boolean isSupAdmin;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-1
@@ -174,7 +174,8 @@ public class TokenAuthenticationFilter implements GlobalFilter, Ordered {
|
|||||||
return new LoginUser().setId(tokenInfo.getUserId()).setUserType(tokenInfo.getUserType())
|
return new LoginUser().setId(tokenInfo.getUserId()).setUserType(tokenInfo.getUserType())
|
||||||
.setOrganId(tokenInfo.getOrganId()).setScopes(tokenInfo.getScopes())
|
.setOrganId(tokenInfo.getOrganId()).setScopes(tokenInfo.getScopes())
|
||||||
.setLarge(tokenInfo.getLarge()).setDbNo(tokenInfo.getDbNo()).setTableNo(tokenInfo.getTableNo())
|
.setLarge(tokenInfo.getLarge()).setDbNo(tokenInfo.getDbNo()).setTableNo(tokenInfo.getTableNo())
|
||||||
.setDataCode(tokenInfo.getDataCode()).setNickname(URLEncoder.encode(tokenInfo.getNickname(), StandardCharsets.UTF_8));
|
.setDataCode(tokenInfo.getDataCode()).setIsSupAdmin(tokenInfo.getIsSupAdmin())
|
||||||
|
.setNickname(URLEncoder.encode(tokenInfo.getNickname(), StandardCharsets.UTF_8));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+3
-1
@@ -112,7 +112,9 @@ public class JmReportTokenServiceImpl implements JmReportTokenServiceI {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
user = new LoginUser().setId(accessToken.getUserId()).setUserType(accessToken.getUserType())
|
user = new LoginUser().setId(accessToken.getUserId()).setUserType(accessToken.getUserType())
|
||||||
.setOrganId(accessToken.getOrganId()).setScopes(accessToken.getScopes());
|
.setOrganId(accessToken.getOrganId()).setScopes(accessToken.getScopes())
|
||||||
|
.setDataCode(accessToken.getDataCode()).setLarge(accessToken.getLarge())
|
||||||
|
.setNickname(accessToken.getNickname());
|
||||||
} catch (ServiceException ignored) {
|
} catch (ServiceException ignored) {
|
||||||
// do nothing:如果报错,说明认证失败,则返回 false 即可
|
// do nothing:如果报错,说明认证失败,则返回 false 即可
|
||||||
}
|
}
|
||||||
|
|||||||
+2
@@ -32,5 +32,7 @@ public class OAuth2AccessTokenCheckRespDTO implements Serializable {
|
|||||||
private String dataCode;
|
private String dataCode;
|
||||||
@Schema(description = "用户昵称")
|
@Schema(description = "用户昵称")
|
||||||
private String nickname;
|
private String nickname;
|
||||||
|
@Schema(description = "是否超级管理员")
|
||||||
|
private Boolean isSupAdmin;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+5
@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
|
|||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
|
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
@@ -90,4 +91,8 @@ public class OAuth2AccessTokenDO extends BaseDO {
|
|||||||
* 用户昵称
|
* 用户昵称
|
||||||
*/
|
*/
|
||||||
private String nickname;
|
private String nickname;
|
||||||
|
/**
|
||||||
|
* 是否超级管理员
|
||||||
|
*/
|
||||||
|
private Boolean isSupAdmin;
|
||||||
}
|
}
|
||||||
|
|||||||
+4
@@ -83,5 +83,9 @@ public class OAuth2RefreshTokenDO extends BaseDO {
|
|||||||
* 用户昵称
|
* 用户昵称
|
||||||
*/
|
*/
|
||||||
private String nickname;
|
private String nickname;
|
||||||
|
/**
|
||||||
|
* 是否超级管理员
|
||||||
|
*/
|
||||||
|
private Boolean isSupAdmin;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+7
-1
@@ -7,6 +7,7 @@ import com.cf.imes.framework.common.exception.enums.GlobalErrorCodeConstants;
|
|||||||
import com.cf.imes.framework.common.pojo.PageResult;
|
import com.cf.imes.framework.common.pojo.PageResult;
|
||||||
import com.cf.imes.framework.common.util.date.DateUtils;
|
import com.cf.imes.framework.common.util.date.DateUtils;
|
||||||
import com.cf.imes.framework.organ.core.context.OrganContextHolder;
|
import com.cf.imes.framework.organ.core.context.OrganContextHolder;
|
||||||
|
import com.cf.imes.framework.security.core.service.SecurityFrameworkService;
|
||||||
import com.cf.imes.module.system.controller.admin.oauth2.vo.token.OAuth2AccessTokenPageReqVO;
|
import com.cf.imes.module.system.controller.admin.oauth2.vo.token.OAuth2AccessTokenPageReqVO;
|
||||||
import com.cf.imes.module.system.dal.dataobject.oauth2.OAuth2AccessTokenDO;
|
import com.cf.imes.module.system.dal.dataobject.oauth2.OAuth2AccessTokenDO;
|
||||||
import com.cf.imes.module.system.dal.dataobject.oauth2.OAuth2ClientDO;
|
import com.cf.imes.module.system.dal.dataobject.oauth2.OAuth2ClientDO;
|
||||||
@@ -43,6 +44,9 @@ public class OAuth2TokenServiceImpl implements OAuth2TokenService {
|
|||||||
@Resource
|
@Resource
|
||||||
private OAuth2ClientService oauth2ClientService;
|
private OAuth2ClientService oauth2ClientService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private SecurityFrameworkService securityFrameworkService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional
|
@Transactional
|
||||||
public OAuth2AccessTokenDO createAccessToken(Long userId, Integer userType, String clientId, List<String> scopes,Boolean large, Integer dbNo, Integer tableNo, String dataCode, Long organId, String nickname) {
|
public OAuth2AccessTokenDO createAccessToken(Long userId, Integer userType, String clientId, List<String> scopes,Boolean large, Integer dbNo, Integer tableNo, String dataCode, Long organId, String nickname) {
|
||||||
@@ -140,7 +144,7 @@ public class OAuth2TokenServiceImpl implements OAuth2TokenService {
|
|||||||
.setExpiresTime(LocalDateTime.now().plusSeconds(clientDO.getAccessTokenValiditySeconds()))
|
.setExpiresTime(LocalDateTime.now().plusSeconds(clientDO.getAccessTokenValiditySeconds()))
|
||||||
.setLarge(refreshTokenDO.getLarge()).setDbNo(refreshTokenDO.getDbNo()).setTableNo(refreshTokenDO.getTableNo())
|
.setLarge(refreshTokenDO.getLarge()).setDbNo(refreshTokenDO.getDbNo()).setTableNo(refreshTokenDO.getTableNo())
|
||||||
.setDataCode(refreshTokenDO.getDataCode()).setOrganId(refreshTokenDO.getOrganId())
|
.setDataCode(refreshTokenDO.getDataCode()).setOrganId(refreshTokenDO.getOrganId())
|
||||||
.setNickname(refreshTokenDO.getNickname())
|
.setNickname(refreshTokenDO.getNickname()).setIsSupAdmin(refreshTokenDO.getIsSupAdmin())
|
||||||
;
|
;
|
||||||
//accessTokenDO.setOrganId(OrganContextHolder.getOrganId()); // 手动设置组织编号,避免缓存到 Redis 的时候,无对应的组织编号
|
//accessTokenDO.setOrganId(OrganContextHolder.getOrganId()); // 手动设置组织编号,避免缓存到 Redis 的时候,无对应的组织编号
|
||||||
oauth2AccessTokenMapper.insert(accessTokenDO);
|
oauth2AccessTokenMapper.insert(accessTokenDO);
|
||||||
@@ -157,6 +161,8 @@ public class OAuth2TokenServiceImpl implements OAuth2TokenService {
|
|||||||
.setLarge(large).setDbNo(dbNo).setTableNo(tableNo).setDataCode(dataCode)
|
.setLarge(large).setDbNo(dbNo).setTableNo(tableNo).setDataCode(dataCode)
|
||||||
.setOrganId(organId).setNickname(nickname)
|
.setOrganId(organId).setNickname(nickname)
|
||||||
;
|
;
|
||||||
|
boolean b = securityFrameworkService.hasAnyRoles(userId,"super_admin");
|
||||||
|
refreshToken.setIsSupAdmin(b);
|
||||||
oauth2RefreshTokenMapper.insert(refreshToken);
|
oauth2RefreshTokenMapper.insert(refreshToken);
|
||||||
return refreshToken;
|
return refreshToken;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -158,6 +158,7 @@ chenfeng:
|
|||||||
- /admin-api/system/machine-template/*
|
- /admin-api/system/machine-template/*
|
||||||
- /admin-api/system/data-source/*
|
- /admin-api/system/data-source/*
|
||||||
- /admin-api/system/auth/login
|
- /admin-api/system/auth/login
|
||||||
|
- /admin-api/system/auth/logout
|
||||||
- /rpc-api/**
|
- /rpc-api/**
|
||||||
#- /admin-api/system/**
|
#- /admin-api/system/**
|
||||||
#- /rpc-api/system/organ/valid # 防止递归。避免调用 /rpc-api/system/organ/valid 接口时,又去触发 /rpc-api/system/organ/valid 去校验
|
#- /rpc-api/system/organ/valid # 防止递归。避免调用 /rpc-api/system/organ/valid 接口时,又去触发 /rpc-api/system/organ/valid 去校验
|
||||||
|
|||||||
Reference in New Issue
Block a user