liuyiliang 11 months ago
parent 2e73a0f30b
commit 0b7e3ed96d
  1. 17
      src/main/java/org/energy/modules/auth/controller/AuthController.java
  2. 78
      src/main/java/org/energy/modules/auth/granter/ScadaTokenGranter.java
  3. 1
      src/main/java/org/energy/modules/auth/granter/TokenGranterBuilder.java
  4. 25
      src/main/java/org/energy/modules/auth/properties/ScadaAuthProperties.java
  5. 38
      src/main/java/org/energy/modules/auth/response/ShareAuthResponse.java
  6. 31
      src/main/java/org/energy/modules/auth/utils/AesUtil.java
  7. 6
      src/main/java/org/energy/modules/smart/entity/WorkOrder.java
  8. 2
      src/main/java/org/energy/modules/system/service/IUserService.java
  9. 18
      src/main/java/org/energy/modules/system/service/impl/UserServiceImpl.java

@ -90,4 +90,21 @@ public class AuthController {
return R.data(Kv.init().set("key", key).set("image", specCaptcha.toBase64()));
}
@PostMapping("scada-token")
@ApiOperation(value = "获取认证scada-token", notes = "传入")
public R<AuthInfo> token2(@ApiParam(value = "租户ID", required = true) @RequestParam(defaultValue = "000000", required = false) String tenantId,
@ApiParam(value = "token") @RequestParam(required = false) String token) {
String grantType = "scada";
TokenParameter tokenParameter = new TokenParameter();
tokenParameter.getArgs().set("tenantId", tenantId).set("grantType", grantType).set("token", token);
ITokenGranter granter = TokenGranterBuilder.getGranter(grantType);
UserInfo userInfo = granter.grant(tokenParameter);
if (userInfo == null || userInfo.getUser() == null) {
return R.fail(TokenUtil.USER_NOT_FOUND);
}
// success
return R.data(TokenUtil.createAuthInfo(userInfo));
}
}

@ -0,0 +1,78 @@
/**
* Copyright (c) 2018-2028, Chill Zhuang 庄骞 (smallchill@163.com).
* <p>
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.energy.modules.auth.granter;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.json.JSONUtil;
import com.dayu.daf.core.launch.constant.TokenConstant;
import com.dayu.daf.core.log.exception.ServiceException;
import com.dayu.daf.core.tool.utils.Func;
import lombok.AllArgsConstructor;
import org.energy.modules.auth.properties.ScadaAuthProperties;
import org.energy.modules.auth.response.ShareAuthResponse;
import org.energy.modules.auth.utils.AesUtil;
import org.energy.modules.auth.utils.TokenUtil;
import org.energy.modules.system.entity.UserInfo;
import org.energy.modules.system.service.IUserService;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.Date;
/**
* ScadaTokenGranter
*
* @author Chill
*/
@Component
@AllArgsConstructor
public class ScadaTokenGranter implements ITokenGranter {
public static final String GRANT_TYPE = "scada";
private IUserService userService;
@Resource
private ScadaAuthProperties properties;
@Override
public UserInfo grant(TokenParameter tokenParameter) {
String token = tokenParameter.getArgs().getStr("token");
String tenantId = tokenParameter.getArgs().getStr("tenantId");
UserInfo userInfo = null;
if (Func.isNoneBlank(token)) {
byte[] tokenByte = Base64.decode(token);
String decrypt = AesUtil.decrypt(tokenByte, properties.getScadaKey(), properties.getScadaIv());
if (StrUtil.isBlank(decrypt)) {
throw new ServiceException("授权错误");
}
ShareAuthResponse response = BeanUtil.toBean(JSONUtil.parse(decrypt), ShareAuthResponse.class);
if (DateUtil.compare(new Date(), DateUtil.parseDate(response.getExpires())) > 0) {
throw new ServiceException("token过期,请重新登录。");
}
String account = response.getUserName();
userInfo = userService.userInfo(tenantId, account);
} else {
throw new ServiceException("token错误");
}
return userInfo;
}
}

@ -41,6 +41,7 @@ public class TokenGranterBuilder {
GRANTER_POOL.put(CaptchaTokenGranter.GRANT_TYPE, SpringUtil.getBean(CaptchaTokenGranter.class));
GRANTER_POOL.put(RefreshTokenGranter.GRANT_TYPE, SpringUtil.getBean(RefreshTokenGranter.class));
GRANTER_POOL.put(SocialTokenGranter.GRANT_TYPE, SpringUtil.getBean(SocialTokenGranter.class));
GRANTER_POOL.put(ScadaTokenGranter.GRANT_TYPE, SpringUtil.getBean(ScadaTokenGranter.class));
}
/**

@ -0,0 +1,25 @@
package org.energy.modules.auth.properties;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
/**
* 配置类
*
* @author dayu
*/
@Component
@Data
public class ScadaAuthProperties {
@Value("${sso.scada.key}")
private String scadaKey;
@Value("${sso.scada.iv}")
private String scadaIv;
}

@ -0,0 +1,38 @@
package org.energy.modules.auth.response;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
/**
* 分享链接鉴权返回值
*
* @author dayu
* @since 2024/7/2 16:54
*/
@Getter
@Setter
@ToString
public class ShareAuthResponse {
/**
* 用户唯一凭证
*/
private String uid;
/**
* 用户名称
*/
private String userName;
/**
* 角色名称
*/
private String roleName;
/**
* 有效期
*/
private String expires;
}

@ -0,0 +1,31 @@
package org.energy.modules.auth.utils;
import cn.hutool.crypto.Mode;
import cn.hutool.crypto.Padding;
import cn.hutool.crypto.symmetric.AES;
import lombok.extern.slf4j.Slf4j;
/**
* Aes 加解密工具类
*
* @author dayu
**/
@Slf4j
public class AesUtil {
/**
* 解密
*/
public static String decrypt(byte[] content, String key, String iv) {
AES aes = new AES(Mode.CBC, Padding.PKCS5Padding, key.getBytes());
aes.setIv(iv.getBytes());
try {
byte[] decryptedBytes = aes.decrypt(content);
return new String(decryptedBytes);
} catch (Exception e) {
log.warn("解密失败", e);
return null;
}
}
}

@ -75,9 +75,8 @@ public class WorkOrder extends BaseEntity {
/**
* 维护作业类型
*/
@JsonSerialize(nullsUsing = NullSerializer.class)
@ApiModelProperty(value = "维护作业类型")
private Integer maintenanceTaskType;
private String maintenanceTaskType;
/**
* 用户状态
*/
@ -117,9 +116,8 @@ public class WorkOrder extends BaseEntity {
/**
* 处理结果
*/
@JsonSerialize(nullsUsing = NullSerializer.class)
@ApiModelProperty(value = "处理结果")
private Integer handlingResult;
private String handlingResult;
/**
* 审核状态
*/

@ -147,4 +147,6 @@ public interface IUserService extends BaseService<User> {
User selectByIdAndDel(Long createUser);
User selectByAccountAndDel(String account);
UserInfo userInfo(String tenantId, String account);
}

@ -17,10 +17,12 @@ package org.energy.modules.system.service.impl;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.dayu.daf.core.log.exception.ServiceException;
import com.dayu.daf.core.mp.base.BaseServiceImpl;
import com.dayu.daf.core.tool.constant.DafConstant;
import com.dayu.daf.core.tool.utils.*;
import lombok.AllArgsConstructor;
import org.energy.common.constant.CommonConstant;
@ -216,4 +218,20 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implement
public User selectByAccountAndDel(String account) {
return baseMapper.selectByAccountAndDel(account);
}
@Override
public UserInfo userInfo(String tenantId, String account) {
UserInfo userInfo = new UserInfo();
QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();
userQueryWrapper.lambda().eq(User::getTenantId, tenantId);
userQueryWrapper.lambda().eq(User::getAccount, account);
userQueryWrapper.lambda().eq(User::getIsDeleted, DafConstant.DB_NOT_DELETED);
User user = super.getOne(userQueryWrapper);
userInfo.setUser(user);
if (Func.isNotEmpty(user)) {
List<String> roleAlias = baseMapper.getRoleAlias(Func.toLongList(user.getRoleId()));
userInfo.setRoles(roleAlias);
}
return userInfo;
}
}

Loading…
Cancel
Save