登录修改

master
杜函宇 1 month ago
parent d9c5c8b63b
commit 960f1e3382

@ -16,6 +16,11 @@
</description>
<dependencies>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15to18</artifactId>
<version>1.72</version>
</dependency>
<!-- iText 7 Core 最新版本 -->
<dependency>
<groupId>com.itextpdf</groupId>

@ -2,11 +2,8 @@ package com.ruoyi.gysl.controller;
import cn.hutool.crypto.SmUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
@ -14,6 +11,7 @@ import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.gysl.entity.Cybq;
import com.ruoyi.gysl.entity.request.CybqRequest;
import com.ruoyi.gysl.login.util.SM2Demo;
import com.ruoyi.gysl.login.util.SM4Demo;
import com.ruoyi.gysl.service.CybqService;
import io.swagger.annotations.Api;
@ -25,15 +23,17 @@ import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.io.Serializable;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Base64;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* (GyslCybq)
@ -62,31 +62,21 @@ public class CybqController extends BaseController {
@ApiOperation("企业经济标签信息(统一社会信用代码)")
@GetMapping("/getCybq")
public AjaxResult getCybq() throws Exception {
if(true){
if (isZs) {
String contacts = "http://172.21.10.46/api/invoke/323018/qyjjbqxx";
String uscc = Base64.getEncoder().encodeToString((byte[])
SM4Demo.exec("91320594067622605M".getBytes(),
"ECB", "PKCS5Padding", "random", "ef5323158e0d43e69442718cd4932116".getBytes(),null));
"ECB", "PKCS5Padding", "random", "ef5323158e0d43e69442718cd4932116".getBytes(), null));
String pageIndex = Base64.getEncoder().encodeToString((byte[])
SM4Demo.exec("1".getBytes(),
"ECB", "PKCS5Padding", "random", "ef5323158e0d43e69442718cd4932116".getBytes(),null));
String pageSize = Base64.getEncoder().encodeToString((byte[])
SM4Demo.exec("10".getBytes(),
"ECB", "PKCS5Padding", "random", "ef5323158e0d43e69442718cd4932116".getBytes(),null));
"ECB", "PKCS5Padding", "random", "ef5323158e0d43e69442718cd4932116".getBytes(), null));
//生成sm3签名
String input = "pageIndex=1&pageSize=10&uscc=91320594067622605M";
// contacts+= "?signature="+ SmUtil.sm3(input);
System.out.println(contacts);
System.out.println(uscc);
System.out.println(pageIndex);
System.out.println(pageSize);
String input = "pageIndex=1&uscc=91320594067622605M";
try {
// 1. 构建 URL含签名参数处理特殊符号
String encodedSignature = URLEncoder.encode(SmUtil.sm3(input), "UTF-8")
.replace("+", "%20"); // 确保 + 不被编码为空格
String fullUrl = contacts + "?signature=" + encodedSignature;
System.out.println(fullUrl);
// 2. 创建连接
URL url = new URL(fullUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
@ -100,12 +90,9 @@ public class CybqController extends BaseController {
writeFormField(out, "uscc", uscc);
// 参数 pageIndex
writeFormField(out, "pageIndex", pageIndex);
// 参数 pageSize
writeFormField(out, "pageSize", pageSize);
// 结束标记
out.writeBytes("--" + BOUNDARY + "--\r\n");
}
// 4. 处理响应
int statusCode = conn.getResponseCode();
StringBuilder response = new StringBuilder();
@ -117,26 +104,34 @@ public class CybqController extends BaseController {
response.append(line);
}
}
System.out.println("状态码: " + statusCode);
System.out.println("响应内容:\n" + response.toString());
} catch (Exception e) {
e.printStackTrace();
if (statusCode == 200) {
JSONObject jsonObj = JSONObject.parseObject(String.valueOf(response));
if ("200".equals(jsonObj.getString("code"))) { // 使用 getString 避免类型问题
// 直接获取 data 字段为 JSONObject无需转换 String
JSONObject reqData = jsonObj.getJSONObject("data");
String responseParams = reqData.getString("responseParams"); // 直接获取字符串值
String s = new String((byte[]) SM2Demo.dexec(Base64.getDecoder().decode(responseParams), "C1C2C3", Base64.getDecoder().decode("MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgefIcY79Be48T8ryF9tMOKDFZ4XmeB9JzBSmEZHGmvhKhRANCAAQmjPisOvJfv2r7mpj06FszOkAlJiyVL6OoefMmXmqSANNqyT8ZxnFpnToYgtqjQqX44IG8fXk49eLjKXQSfJ2J")), StandardCharsets.UTF_8);
// 解析解密后的 JSON
JSONObject getAllData = JSONObject.parseObject(s);
// 提取 data 字段为 JSONArray
JSONArray js1 = getAllData.getJSONArray("data");
// 转换为 Java 对象列表
List<Cybq> returnData = new ArrayList<>();
for (int i = 0; i < js1.size(); i++) {
JSONObject item = js1.getJSONObject(i);
Cybq res = item.toJavaObject(Cybq.class);
returnData.add(res);
}
return AjaxResult.success(returnData);
}
}
} catch (Exception y) {
y.printStackTrace();
}
// if (response.getStatus() == 200) {
// System.out.println(response.body());
// JSONObject jsonObj = JSONUtil.parseObj(response.body());
// if ("200".equals(jsonObj.get("code"))) {
// JSONObject reqData = JSONUtil.parseObj(jsonObj.get("data"));
// JSONArray arr = reqData.getJSONArray("data"); // 直接获取数组,无需再次解析
// int total = reqData.getInt("total"); // 只需解析一次total并转换为整数
// }
// }
}
return success();
}
private static void writeFormField(DataOutputStream out, String name, String value) throws Exception {
out.writeBytes("--" + BOUNDARY + "\r\n");
out.writeBytes("Content-Disposition: form-data; name=\"" + name + "\"\r\n");
@ -164,7 +159,7 @@ public class CybqController extends BaseController {
* @return
*/
@GetMapping("/{id}")
@ApiOperation(value = "通过主键查询单条数据",response = Cybq.class)
@ApiOperation(value = "通过主键查询单条数据", response = Cybq.class)
public AjaxResult selectOne(@PathVariable Serializable id) {
return success(cybqService.getById(id));
}
@ -230,7 +225,7 @@ public class CybqController extends BaseController {
*/
@ApiOperation(value = "根据条件导出所有产业标签")
@PostMapping(value = "/export")
public void exportMl(HttpServletResponse response, CybqRequest req){
public void exportMl(HttpServletResponse response, CybqRequest req) {
List<Cybq> filteredList = cybqService.page(req);
ExcelUtil<Cybq> util = new ExcelUtil<>(Cybq.class);
util.exportExcel(response, filteredList, "产业标签");

@ -26,87 +26,67 @@ public class Cybq {
private Long id;
@ApiModelProperty(value ="单位编码" )
private String dwbm;
private String epguid;
@ApiModelProperty(value ="标签标记场景代码" )
private String cjdm;
@ApiModelProperty(value ="企业名称" )
private String epname;
@ApiModelProperty(value ="标签代码" )
private String bqdm;
@ApiModelProperty(value ="统一社会信用代码" )
private String uscc;
@ApiModelProperty(value ="标签值编码" )
private String bqzbm;
@ApiModelProperty(value ="组织机构代码" )
private String organcode;
@ApiModelProperty(value ="引用代码集编码" )
private String yydmjbm;
@ApiModelProperty(value ="标签值" )
private String codevalue;
@ApiModelProperty(value ="引用代码集版本" )
private String yydmjbb;
@ApiModelProperty(value ="标签名称" )
private String labelname;
@ApiModelProperty(value ="有效状态" )
private String state;
@ApiModelProperty(value ="标签代码" )
private String catalogueid;
@ApiModelProperty(value ="标签注释" )
private String bqzs;
@ApiModelProperty(value ="标签值编码" )
private String codekey;
@ApiModelProperty(value ="用户类型" )
private String yhlx;
@ApiModelProperty(value ="引用代码集编码" )
private String cscode;
@ApiModelProperty(value ="标签标记用户" )
private String bqbjyh;
@ApiModelProperty(value ="引用代码集版本" )
private String csversion;
@ApiModelProperty(value ="标签标记单位" )
private String bqbjdw;
@ApiModelProperty(value ="标签注释" )
private String lablenotes;
@ApiModelProperty(value ="标签状态" )
private String bqzt;
private String status;
@ApiModelProperty(value ="数据来源编码" )
private String sjlybm;
@ApiModelProperty(value ="更新时间" )
private String regtime;
@ApiModelProperty(value ="数据来源名称" )
private String sjlymc;
@ApiModelProperty(value ="数据溯源码" )
private String sjsym;
@ApiModelProperty(value ="记录状态" )
private String jlzt;
private String dw_timestamp;
@ApiModelProperty(value ="数据记录备注" )
private String sjjzbz;
@ApiModelProperty(value ="数据创建用户" )
private String sjcjyh;
@ApiModelProperty(value ="数据创建时间" )
private String sjcjsj;
@ApiModelProperty(value ="标签标记场景代码" )
private String sceneid;
@ApiModelProperty(value ="数据修改用户" )
private String sjxgyh;
@ApiModelProperty(value ="标签状态" )
private String labelmark;
@ApiModelProperty(value ="数据修改时间" )
private String sjxgsj;
}

@ -12,12 +12,9 @@ import lombok.Data;
public class CybqRequest {
@ApiModelProperty(value ="标签代码" )
private String bqdm;
private String catalogueid;
@ApiModelProperty(value ="标签状态" )
private String bqzt;
@ApiModelProperty(value ="用户类型" )
private String yhlx;
private String status;
}

@ -93,7 +93,7 @@ public class ChiefController {
ChiefResponse bean = JSONUtil.toBean(dataJson, ChiefResponse.class);
//判断几个政务端用户,等待商量结果
bean.setToken(loginTokenService.singleLogin(bean.getAccountName(),
bean.getName(), null,
bean.getName(),
"01", bean.getMobile(),bean.getEmail()));
return AjaxResult.success(bean);
} else {

@ -15,6 +15,7 @@ import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.gysl.login.dto.response.UserMainResponse;
import com.ruoyi.gysl.login.dto.response.UserResponse;
import com.ruoyi.gysl.login.service.LoginTokenService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
@ -59,6 +60,8 @@ public class SingleLoginController {
@Resource
private RedisCache redisCache;
@Resource
private LoginTokenService loginTokenService;
@Value("${enterpriseAppId}")
private String enterpriseAppId;
@ -106,30 +109,18 @@ public class SingleLoginController {
JSONObject jsonObj = JSONUtil.parseObj(responseBody);
JSONObject dataObj = jsonObj.getJSONObject("data");
// 设置过期时间(可选)
int expirationSeconds = 24 * 60;
// int expirationSeconds = 24 * 60;
// 将用户信息存储到Redis中
String key = "user:" + clientToken;
// String key = "user:" + clientToken;
//判断是法人用户
if ("ep".equals(dataObj.get("usertype"))) {
JSONObject mainobj = dataObj.getJSONObject("mainbody");
UserResponse res = JSONUtil.toBean(dataObj, UserResponse.class);
UserMainResponse req = JSONUtil.toBean(mainobj, UserMainResponse.class);
//如果在企业库里面找不到该企业就返回错误
// BmsEnterpriseBasicInfo bmsEnterpriseBasicInfo =
// bmsEnterpriseBasicInfoMapper.findByQytyxydm(req.getUscc());
Long id;
// if (bmsEnterpriseBasicInfo == null) {
// throw new ServiceException("该企业不在库!请稍后再试!");
// } else {
// id = bmsEnterpriseBasicInfo.getId();
// }
// 设置过期时间为8小时
// String token = singleLoginService.singleLogin(req.getUscc(), req.getEpname(), id, "01", null,null);
// res.setToken(token);
// res.setMain(req);
// redisCache.setCacheObject(key, res, expirationSeconds, TimeUnit.MINUTES);
String token = loginTokenService.singleLogin(req.getUscc(), req.getEpname(),
"02", null, null);
res.setToken(token);
res.setMain(req);
return AjaxResult.success(res);
} else {
log.error(response.body());

@ -11,5 +11,5 @@ public interface LoginTokenService {
/**
* token
*/
String singleLogin(String accountName, String name, String a, String b, String mobile,String email);
String singleLogin(String accountName, String name, String b, String mobile,String email);
}

@ -42,7 +42,6 @@ public class LoginTokenServiceImpl implements LoginTokenService {
@Override
public String singleLogin(String accountName,
String name,
String a,
String type,
String mobile,
String email) {

@ -86,18 +86,18 @@ public class SM4Demo {
return cipher.doFinal(message);
}
public static void main(String[] args) throws Exception {
//待加密字符串
String content = "91320594067622605M";
SM4Demo computeFactor = new SM4Demo();
Object result = computeFactor
.exec(content.getBytes(), "ECB", "PKCS5Padding", "random", "ef5323158e0d43e69442718cd4932116".getBytes(),
null);
System.out.println(Base64.getEncoder().encodeToString((byte[]) result));
//待解密的字符串
String encodeSM2String="t/lpTpuW6JeN+JhACXkWqWeHr55Bwj5BTBgMmG5a9+w=";
Object result2 = computeFactor.dexec(Base64.getDecoder().decode(encodeSM2String), "ECB", "PKCS5Padding", "random", "ef5323158e0d43e69442718cd4932116".getBytes(),null);
System.out.println(new String((byte[]) result2, Charset.forName("utf-8")));
}
// public static void main(String[] args) throws Exception {
// //待加密字符串
// String content = "91320594067622605M";
// SM4Demo computeFactor = new SM4Demo();
// Object result = computeFactor
// .exec(content.getBytes(), "ECB", "PKCS5Padding", "random", "ef5323158e0d43e69442718cd4932116".getBytes(),
// null);
// System.out.println(Base64.getEncoder().encodeToString((byte[]) result));
// //待解密的字符串
// String encodeSM2String="t/lpTpuW6JeN+JhACXkWqWeHr55Bwj5BTBgMmG5a9+w=";
// Object result2 = computeFactor.dexec(Base64.getDecoder().decode(encodeSM2String), "ECB", "PKCS5Padding", "random", "ef5323158e0d43e69442718cd4932116".getBytes(),null);
// System.out.println(new String((byte[]) result2, Charset.forName("utf-8")));
//
// }
}

@ -108,4 +108,8 @@ public class NoticeTiming {
throw new IllegalArgumentException("无效的日期格式: " + dateStr, e);
}
}
/**
*
*/
}

@ -2,6 +2,8 @@ package com.ruoyi.web.controller.monitor;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.ruoyi.common.utils.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.DeleteMapping;
@ -35,6 +37,21 @@ public class SysLogininforController extends BaseController
@Autowired
private SysPasswordService passwordService;
/**
* 访
*/
@PreAuthorize("@ss.hasAnyRoles('admin,common,gov,company')")
@GetMapping("/getNewSysLogininfor")
public AjaxResult getNewSysLogininfor() {
String str = null;
try {
str = SecurityUtils.getUsername();
} catch (Exception ignored) {
}
return success(logininforService.getNewSysLogininfor(str));
}
@PreAuthorize("@ss.hasPermi('monitor:logininfor:list')")
@GetMapping("/list")
public TableDataInfo list(SysLogininfor logininfor)

@ -62,8 +62,9 @@ spring:
# 是否是正式环境
isZs: false
#企业端正式环境应用系统编号
enterpriseAppId: 03f70874-39e9-11ef-bbd6-fa163e2b2e10
enterpriseAppId: 193d64ab-316e-11f0-b7ab-9c5c8e847e61
# 应用私钥
enterpriseAppsecret: 03f70874-39e9-11ef-bbd6-fa163e2b2e10
enterpriseAppsecret: 7C21B5B9316E11F0B7AB9C5C8E847E61
#自己客户端地址
returnUrl: https://idp.sipac.gov.cn/bms
returnUrl: http://192.168.0.119:80
#returnUrl: http://39.101.188.84:9999/demo/Gyyq-Upstairs/

@ -117,8 +117,8 @@ swagger:
# 是否是正式环境
isZs: true
#企业端正式环境应用系统编号
enterpriseAppId: 03f70874-39e9-11ef-bbd6-fa163e2b2e10
enterpriseAppId: 193d64ab-316e-11f0-b7ab-9c5c8e847e61
# 应用私钥
enterpriseAppsecret: 03f70874-39e9-11ef-bbd6-fa163e2b2e10
enterpriseAppsecret: 7C21B5B9316E11F0B7AB9C5C8E847E61
#自己客户端地址
returnUrl: https://idp.sipac.gov.cn/bms
returnUrl: https://gysl.sipac.gov.cn

@ -52,7 +52,7 @@ spring:
# 国际化资源文件路径
basename: i18n/messages
profiles:
active: internet
active: druid
# 文件上传
servlet:
multipart:
@ -142,11 +142,13 @@ getAllInfo: http://172.21.10.14/open/api/identity/data/FindUserById
#企业端单点登陆url
url: https://qytt.sipac.gov.cn/api/usercenter/User/ssoLogin
#url: http://114.216.202.175:8008/api/usercenter/User/ssoLogin
#url: https://qytt.sipac.gov.cn/api/usercenter/User/ssoLogin
url: http://114.216.202.175:8008/api/usercenter/User/ssoLogin
#企业端用户信息url
infoUrl: https://qytt.sipac.gov.cn/api/usercenter/User/getInfo
#infoUrl: http://114.216.202.175:8008/api/usercenter/User/getInfo
#infoUrl: https://qytt.sipac.gov.cn/api/usercenter/User/getInfo
infoUrl: http://114.216.202.175:8008/api/usercenter/User/getInfo
#企业端退出登录url
logoutUrl: https://qytt.sipac.gov.cn/api/usercenter/User/ssoLogOut
#logoutUrl: https://qytt.sipac.gov.cn/api/usercenter/User/ssoLogOut
logoutUrl: http://114.216.202.175:8008/api/usercenter/User/ssoLogOut

@ -5,14 +5,11 @@
<select id="page" resultType="com.ruoyi.gysl.entity.Cybq">
select * from gysl_cybq
<where>
<if test="req.bqdm != null and req.bqdm != '' ">
AND bqdm = #{req.bqdm}
<if test="req.catalogueid != null and req.catalogueid != '' ">
AND catalogueid = #{req.catalogueid}
</if>
<if test="req.bqzt != null and req.bqzt != ''">
AND bqzt = #{req.bqzt}
</if>
<if test="req.yhlx != null and req.yhlx != ''">
AND yhlx = #{req.yhlx}
<if test="req.status != null and req.status != ''">
AND status = #{req.status}
</if>
</where>
</select>

@ -116,6 +116,9 @@ public class SecurityConfig
.antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
.antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()
.antMatchers("/system/chief/**").permitAll()
.antMatchers("/system/singlelogin/**").permitAll()
// .antMatchers("/gysl/Cybq/getCybq").permitAll()
// 除上面外的所有请求全部需要鉴权认证
.anyRequest().authenticated();
})

@ -73,7 +73,7 @@ public class SysLoginService {
*/
public String login(String username, String password, String code, String uuid, Integer loginRole) {
// 验证码校验
validateCaptcha(username, code, uuid);
// validateCaptcha(username, code, uuid);
// 登录前置校验
String strP;
try {

@ -39,4 +39,9 @@ public interface SysLogininforMapper
* @return
*/
public int cleanLogininfor();
/**
* 访
*/
SysLogininfor getNewSysLogininfor(String str);
}

@ -37,4 +37,9 @@ public interface ISysLogininforService
*
*/
public void cleanLogininfor();
/**
* 访
*/
SysLogininfor getNewSysLogininfor(String str);
}

@ -1,5 +1,8 @@
package com.ruoyi.system.service.impl;
import java.time.LocalDateTime;
import java.time.Period;
import java.time.ZoneId;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -62,4 +65,26 @@ public class SysLogininforServiceImpl implements ISysLogininforService
{
logininforMapper.cleanLogininfor();
}
/**
* 访
*/
@Override
public SysLogininfor getNewSysLogininfor(String str) {
SysLogininfor ns = logininforMapper.getNewSysLogininfor(str);
if(ns!=null){
LocalDateTime ld = ns.getLoginTime().toInstant()
.atZone(ZoneId.systemDefault())
.toLocalDateTime();
Period period = Period.between(ld.toLocalDate(), LocalDateTime.now().toLocalDate());
int days = period.getDays() + (period.getMonths() * 30) + (period.getYears() * 365);
if(days>=90){
return ns;
}else {
return null;
}
}else {
return null;
}
}
}

@ -42,6 +42,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</where>
order by info_id desc
</select>
<select id="getNewSysLogininfor" resultType="com.ruoyi.system.domain.SysLogininfor">
select info_id, user_name, ipaddr, status, msg, login_time from sys_logininfor
<where>
status = '0' and msg = '登录成功'
<if test="userName != null and userName != ''">
AND user_name = #{userName}
</if>
</where>
order by info_id desc
LIMIT 1 OFFSET 1
</select>
<delete id="deleteLogininforByIds" parameterType="Long">
delete from sys_logininfor where info_id in

Loading…
Cancel
Save