token相关
Some checks are pending
Java CI with Maven / build (11) (push) Waiting to run
Java CI with Maven / build (17) (push) Waiting to run
Java CI with Maven / build (8) (push) Waiting to run
yudao-ui-admin CI / build (14.x) (push) Waiting to run
yudao-ui-admin CI / build (16.x) (push) Waiting to run

This commit is contained in:
旺仔 2024-09-23 14:03:35 +08:00
parent fbd881ed14
commit 59afc49a23
12 changed files with 292 additions and 4 deletions

View File

@ -120,6 +120,14 @@
<groupId>com.xingyuv</groupId>
<artifactId>spring-boot-starter-captcha-plus</artifactId> <!-- 验证码,一般用于登录使用 -->
</dependency>
<!--JWT解析库-->
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>4.4.0</version>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,16 @@
package cn.iocoder.yudao.module.system.controller.admin.outapi;
import cn.iocoder.yudao.framework.apilog.config.*;
import cn.iocoder.yudao.framework.web.config.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.web.servlet.config.annotation.*;
@AutoConfiguration(after = YudaoWebAutoConfiguration.class, before = YudaoApiLogAutoConfiguration.class)
public class JwtTokenAutoConfiguration implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new JwtTokenInterceptor())
.addPathPatterns("/admin-api/ultrasoniccom/ultrasonic/InsImageInfo",
"/admin-api/tblist/patientexamlist/addPatientExamInfo");
}
}

View File

@ -0,0 +1,28 @@
package cn.iocoder.yudao.module.system.controller.admin.outapi;
import cn.iocoder.yudao.framework.common.pojo.*;
import cn.iocoder.yudao.module.system.service.outapi.*;
import io.swagger.v3.oas.annotations.*;
import io.swagger.v3.oas.annotations.tags.*;
import org.springframework.validation.annotation.*;
import org.springframework.web.bind.annotation.*;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@Tag(name = "管理后台 - jwtToken")
@RestController
@RequestMapping("/system/jwtToken")
@Validated
public class JwtTokenController {
@GetMapping("/getToken")
@Operation(summary = "获取Token")
public CommonResult<String> getToken(@RequestParam("key_public") String key_public) {
String _out = "";
if (key_public != null && !"".equals(key_public.trim()) &&
JwtTokenService.isKeyPublic(key_public.trim(), JwtTokenService.KEY_PUBLIC_1))
_out = JwtTokenService.createToken();
else
_out = "key_public_error";
return success(_out);
}
}

View File

@ -0,0 +1,56 @@
package cn.iocoder.yudao.module.system.controller.admin.outapi;
import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
import cn.iocoder.yudao.module.system.service.outapi.*;
import org.springframework.web.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
public class JwtTokenInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
boolean _out = false;
Map<String, Object> params = new HashMap<>();
String token = request.getHeader("AuthToken");
if (token != null && !"".equals(token.trim())) {
if (JwtTokenService.verifyToken(token.trim()))
_out = true;
else {
params.put("code", "TokenError");
params.put("msg", "TokenError");
responseReturn(response, params);
_out = false;
}
} else {
params.put("code", "TokenEmpty");
params.put("msg", "TokenEmpty");
responseReturn(response, params);
_out = false;
}
return _out;
}
private void responseReturn(HttpServletResponse response, Map<String, Object> params) {
if (response != null) {
String result = "";
if (params == null || params.size() <= 0)
params = new HashMap<>();
result = JsonUtils.toJsonString(params);
PrintWriter writer = null;
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
try {
writer = response.getWriter();
writer.write(result);
} catch (IOException ex) {
} finally {
if (writer != null) {
writer.close();
}
}
}
}
}

View File

@ -0,0 +1,75 @@
package cn.iocoder.yudao.module.system.service.outapi;
import com.auth0.jwt.*;
import com.auth0.jwt.algorithms.*;
import com.auth0.jwt.interfaces.DecodedJWT;
import org.springframework.stereotype.*;
import java.security.MessageDigest;
import java.util.*;
@Service
public class JwtTokenService {
//属性
private static final long EXPIRE_DATE = 30 * 60 * 1000;
private static final String TOKEN_SECRET = "LLCfasfhua12afvQedaWSkqqklshQDB456FQAwu20flyWE";
public static final String KEY_PUBLIC_1 = "FLY_kyqqklsh_18152QFDW";
//方法
public static String createToken() {
String token = null;
try {
//参数
Date date = new Date(System.currentTimeMillis() + EXPIRE_DATE);
Algorithm algorithm = Algorithm.HMAC256(TOKEN_SECRET);
Map<String, Object> header = new HashMap<>();
header.put("typ", "JWT");
header.put("alg", "HS256");
//携带信息,生成签名
token = JWT.create()
.withHeader(header)
.withClaim("tokenid", UUID.randomUUID().toString().replace("-", ""))
.withExpiresAt(date)
.sign(algorithm);
} catch (Exception ex) {
token = null;
}
return token;
}
public static boolean verifyToken(String token) {
boolean _out = false;
if (token != null && !"".equals(token.trim())) {
try {
Algorithm algorithm = Algorithm.HMAC256(TOKEN_SECRET);
JWTVerifier verifier = JWT.require(algorithm).build();
DecodedJWT jwt = verifier.verify(token.trim());
_out = true;
} catch (Exception ex) {
_out = false;
}
}
return _out;
}
public static boolean isKeyPublic(String input, String KEY_PUBLIC) {
String _temp = "";
if (KEY_PUBLIC != null && !"".equals(KEY_PUBLIC.trim())) {
try {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] digest = md.digest(KEY_PUBLIC.trim().getBytes());
StringBuilder sb = new StringBuilder();
for (byte b : digest) {
sb.append(String.format("%02x", b));
}
_temp = sb.toString().trim();
} catch (Exception ex) {
_temp = "";
}
}
if (_temp != "" && input != null && input.trim().equals(_temp))
return true;
else
return false;
}
}

View File

@ -0,0 +1 @@
cn.iocoder.yudao.module.system.controller.admin.outapi.JwtTokenAutoConfiguration

View File

@ -174,6 +174,12 @@ public class PatientexamlistController {
return success(_out);
}
@PostMapping("/addPatientExamInfo")
@Operation(summary = "患者信息")
public CommonResult<List<String>> addPatientExamInfo(@Valid @RequestBody List<PatientExamInfoAddReqVO> createReqVOs) {
return success(patientexamlistService.addPatientExamInfo(createReqVOs));
}
@GetMapping("/getCheckRecord")
@Operation(summary = "云胶片-getCheckRecord")
public CommonResult<Map<String, Object>> getCheckRecord(@RequestParam("no") String no, @RequestParam("orgId") String orgId) {

View File

@ -0,0 +1,59 @@
package cn.iocoder.yudao.module.tblist.controller.admin.patientexamlist.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.time.*;
@Schema(description = "管理后台 - PatientExamInfoAddReqVO")
@Data
public class PatientExamInfoAddReqVO {
@Schema(description = "主键", example = "23598")
private String id;
@Schema(description = "检查ID体检编号、住院号、门诊号等", example = "26467")
private String examId;
@Schema(description = "患者姓名", example = "赵六")
private String pname;
@Schema(description = "性别")
private String gender;
@Schema(description = "出生日期")
private LocalDateTime birthday;
@Schema(description = "设备类型CT DR MR B超 彩超等", example = "2")
private String deviceType;
@Schema(description = "影像设备名称")
private String deviceName;
@Schema(description = "seri_dicomCount:序列数量/dicom数量")
private String seDc;
@Schema(description = "检查日期:年月日时分秒")
private LocalDateTime examDate;
@Schema(description = "检查项目代码", example = "16416496")
private String examItemCode;
@Schema(description = "检查项目名称", example = "张三")
private String examItemName;
@Schema(description = "报告状态", example = "1")
private String reportstatus;
@Schema(description = "申请日期:年月日时分秒")
private LocalDateTime applicationDate;
@Schema(description = "机构ID", example = "29289")
private String orgId;
@Schema(description = "机构名称", example = "芋艿")
private String orgName;
@Schema(description = "登记单号")
private String regId;
}

View File

@ -78,6 +78,14 @@ public interface PatientexamlistService extends IService<PatientexamlistDO> {
*/
List<String> dicomDataSync();
/**
* 患者信息
*
* @param createReqVOs 创建信息
* @return 编号集合
*/
List<String> addPatientExamInfo(@Valid List<PatientExamInfoAddReqVO> createReqVOs);
/**
* 更新examItemName
*

View File

@ -186,6 +186,36 @@ public class PatientexamlistServiceImpl extends ServiceImpl<PatientexamlistMappe
return _out;
}
@Override
public List<String> addPatientExamInfo(List<PatientExamInfoAddReqVO> createReqVOs) {
List<String> ids = new ArrayList<>();
LocalDateTime dateTime = null;
UUID guid = null;
PatientexamlistDO patientexamlist = null;
if (createReqVOs != null && createReqVOs.size() > 0) {
for (PatientExamInfoAddReqVO createReqVO : createReqVOs) {
if (createReqVO != null) {
patientexamlist = BeanUtils.toBean(createReqVO, PatientexamlistDO.class);
dateTime = LocalDateTime.parse(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
guid = UUID.randomUUID();
patientexamlist.setId(guid.toString());
patientexamlist.setPName(createReqVO.getPname());
patientexamlist.setCreateDate(dateTime);
ids.add(patientexamlist.getId());
patientexamlistMapper.insert(patientexamlist);
}
}
}
if (!(ids != null && ids.size() > 0))
ids = Collections.emptyList();
return ids;
}
@Override
public void updateExamItemNameById(String id, String examItemName) {
validatePatientexamlistExists(id);

View File

@ -41,7 +41,6 @@ import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpHeaders;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@ -493,10 +492,8 @@ public class ultrasonicController {
@PostMapping("/InsImageInfo")
@Operation(summary = "影像信息")
public CommonResult<String> InsImageInfo(@RequestBody List<PatientInfoVO> patientInfoVOS,@RequestHeader HttpHeaders headers) throws ParseException {
public CommonResult<String> InsImageInfo(@RequestBody List<PatientInfoVO> patientInfoVOS) throws ParseException {
try {
// 从headers中获取特定的header参数
// String someHeaderValue = headers.getFirst("Some-Header-Name");
if(!patientInfoVOS.isEmpty())
{
List<dicompatientsDO> dicompatientsDOList=new ArrayList<>();

View File

@ -160,6 +160,8 @@ yudao:
- /admin-api/tblist/patientexamlist/getCheckRecord
- /admin-api/ultrasoniccom/ultrasonic/insimagescreenshot
- /admin-api/ultrasoniccom/ultrasonic/InsImageInfo
- /admin-api/tblist/patientexamlist/addPatientExamInfo
- /admin-api/system/jwtToken/getToken
websocket:
enable: true # websocket的开关
path: /infra/ws # 路径
@ -205,6 +207,8 @@ yudao:
- /admin-api/tblist/patientexamlist/getCheckRecord
- /admin-api/ultrasoniccom/ultrasonic/insimagescreenshot
- /admin-api/ultrasoniccom/ultrasonic/InsImageInfo
- /admin-api/tblist/patientexamlist/addPatientExamInfo
- /admin-api/system/jwtToken/getToken
ignore-tables:
- system_tenant
- system_tenant_package