diff --git a/src/main/java/Tools/TestUnit/RsaTest.java b/src/main/java/Tools/TestUnit/RsaTest.java index a50f178d..b34b5684 100644 --- a/src/main/java/Tools/TestUnit/RsaTest.java +++ b/src/main/java/Tools/TestUnit/RsaTest.java @@ -3,7 +3,10 @@ package Tools.TestUnit; import com.dsideal.QingLong.Util.RsaUtils; public class RsaTest { - public static void main(String[] args) { + + + + public static void main(String[] args) throws Exception { String source="092163"; String pwd = RsaUtils.encryptedDataOnJava(source, RsaUtils.PUBLICKEY); System.out.println(pwd); diff --git a/src/main/java/com/dsideal/QingLong/DataShare/Controller/DataShareController.java b/src/main/java/com/dsideal/QingLong/DataShare/Controller/DataShareController.java index f2a2b04d..29a4fe79 100644 --- a/src/main/java/com/dsideal/QingLong/DataShare/Controller/DataShareController.java +++ b/src/main/java/com/dsideal/QingLong/DataShare/Controller/DataShareController.java @@ -67,7 +67,7 @@ public class DataShareController extends Controller { renderJson(kv); return; } - dm.addSystem(system_name, user_name,redirect_url); + dm.addSystem(system_name, user_name, redirect_url); Kv kv = Kv.by("success", true); kv.set("message", "保存成功!"); renderJson(kv); @@ -251,8 +251,8 @@ public class DataShareController extends Controller { @IsSysAdminInterface({"1"}) @IsNumericInterface({"system_id"}) @EmptyInterface({"system_name"}) - public void updateSystem(int system_id, String system_name,String redirect_url) { - dm.updateSystem(system_id, system_name,redirect_url); + public void updateSystem(int system_id, String system_name, String redirect_url) { + dm.updateSystem(system_id, system_name, redirect_url); Kv kv = Kv.by("success", true); kv.set("message", "保存成功!"); renderJson(kv); @@ -335,4 +335,25 @@ public class DataShareController extends Controller { List list = dm.getShareTable(system_id); renderJson(list); } + + + /** + * 第三方接入系统获取执行票据Token + * + * @param user_name 分配给第三方的用户名 + * @param pwd 分配给第三方的密码 + */ + @Before({POST.class}) + public void getToken(String user_name, String pwd) { + //获取 token + String token = dm.getToken(user_name, pwd); + if (token != null) { + Kv kv = Kv.by("token", token); + kv.set("success", true); + kv.set("message", "获取成功!"); + renderJson(kv); + return; + } + renderJson(Kv.by("success", false).set("message", "用户名与密码不正确!")); + } } diff --git a/src/main/java/com/dsideal/QingLong/DataShare/Model/DataShareModel.java b/src/main/java/com/dsideal/QingLong/DataShare/Model/DataShareModel.java index 3b24a302..afe030d4 100644 --- a/src/main/java/com/dsideal/QingLong/DataShare/Model/DataShareModel.java +++ b/src/main/java/com/dsideal/QingLong/DataShare/Model/DataShareModel.java @@ -2,6 +2,7 @@ package com.dsideal.QingLong.DataShare.Model; import com.dsideal.QingLong.Util.CommonUtil; import com.dsideal.QingLong.Util.PgUtil; +import com.dsideal.QingLong.Util.RsaUtils; import com.jfinal.kit.Kv; import com.jfinal.kit.StrKit; import com.jfinal.plugin.activerecord.Db; @@ -338,6 +339,51 @@ public class DataShareModel { String sql = "select * from t_datashare_system where redirect_url=?"; return Db.findFirst(sql, redirect_url) != null; } + + /** + * 第三方系统,根据用户名密码获取token + * + * @param user_name 分配的用户名 + * @param pwd 分配的密码 + * @return 获取到的token, 如果用户名与密码无效,则返回null + */ + public String getToken(String user_name, String pwd) { + String sql = "select * from t_datashare_system where user_name=? and pwd=?"; + Record record = Db.findFirst(sql, user_name, pwd); + if (record == null) return null; + return RsaUtils.encryptedDataOnJava(user_name + " " + System.currentTimeMillis(), RsaUtils.PUBLICKEY); + } + + + /** + * 验证token是否正确 + * + * @param token 要验证的token + * @return + */ + public Record checkToken(String token) { + Record record = new Record(); + try { + String decryptedData = RsaUtils.decryptDataOnJava(token, RsaUtils.PRIVATEKEY); + String[] x = decryptedData.split(" "); + String time = x[1]; + //判断时间戳是否超时,与当前时间相差60*8分钟 + if (System.currentTimeMillis() - Long.parseLong(time) > 1000 * 60 * 8) { + record.set("message", "票据超时!"); + record.set("success", false); + } else { + //计算两个时间戳之间的差值,单位为秒 + long diff = (System.currentTimeMillis() - Long.parseLong(time)) / 1000; + System.out.println("票据有效,时间差为:" + diff + "秒"); + record.set("message", "票据有效,时间差为:" + diff + "秒"); + record.set("success", true); + } + } catch (Exception e) { + record.set("success", false); + record.set("message", "票据无效!"); + } + return record; + } } diff --git a/src/main/java/com/dsideal/QingLong/Index/Controller/IndexController.java b/src/main/java/com/dsideal/QingLong/Index/Controller/IndexController.java index 12f7e563..82e2157b 100644 --- a/src/main/java/com/dsideal/QingLong/Index/Controller/IndexController.java +++ b/src/main/java/com/dsideal/QingLong/Index/Controller/IndexController.java @@ -5,12 +5,9 @@ import com.jfinal.core.Controller; import com.jfinal.ext.interceptor.GET; import com.jfinal.kit.PropKit; - public class IndexController extends Controller { @Before({GET.class}) public void index() { redirect(PropKit.get("first_page")); } - - } \ No newline at end of file diff --git a/src/main/java/com/dsideal/QingLong/Util/PostgresqlInit.java b/src/main/java/com/dsideal/QingLong/Util/PostgreSqlInit.java similarity index 92% rename from src/main/java/com/dsideal/QingLong/Util/PostgresqlInit.java rename to src/main/java/com/dsideal/QingLong/Util/PostgreSqlInit.java index 3310b064..86a2d463 100644 --- a/src/main/java/com/dsideal/QingLong/Util/PostgresqlInit.java +++ b/src/main/java/com/dsideal/QingLong/Util/PostgreSqlInit.java @@ -9,7 +9,7 @@ import com.jfinal.plugin.redis.RedisPlugin; import java.io.File; -public class PostgresqlInit { +public class PostgreSqlInit { public static void Init() { //告之配置文件位置 PropKit.use("application.properties"); @@ -25,7 +25,7 @@ public class PostgresqlInit { arp.setDialect(new PostgreSqlDialect()); //遍历sql目录下所有的sql文件 File sqlDir; - String basePath = PostgresqlInit.class.getClassLoader().getResource(".").getPath(); + String basePath = PostgreSqlInit.class.getClassLoader().getResource(".").getPath(); sqlDir = new File(basePath + "/Sql"); File[] sqlFiles = sqlDir.listFiles(); for (File sqlFile : sqlFiles != null ? sqlFiles : new File[0]) { diff --git a/src/main/java/com/dsideal/QingLong/Util/RsaUtils.java b/src/main/java/com/dsideal/QingLong/Util/RsaUtils.java index 922e617a..0722cb9a 100644 --- a/src/main/java/com/dsideal/QingLong/Util/RsaUtils.java +++ b/src/main/java/com/dsideal/QingLong/Util/RsaUtils.java @@ -1,6 +1,7 @@ package com.dsideal.QingLong.Util; import cn.hutool.core.codec.Base64; +import cn.hutool.core.date.DateTime; import javax.crypto.Cipher; import java.io.ByteArrayOutputStream; @@ -319,19 +320,34 @@ public class RsaUtils { /** * java端私钥解密 */ - public static String decryptDataOnJava(String data, String PRIVATEKEY) { + public static String decryptDataOnJava(String data, String PRIVATEKEY) throws Exception { String temp = ""; - try { - byte[] rs = Base64.decode(data); - temp = new String(RsaUtils.decryptByPrivateKey(rs, PRIVATEKEY), "UTF-8"); - } catch (Exception e) { - e.printStackTrace(); - } + byte[] rs = Base64.decode(data); + temp = new String(RsaUtils.decryptByPrivateKey(rs, PRIVATEKEY), "UTF-8"); return temp; } public static void main(String[] args) { - String data = "BoYlkQ/dgr7MksqU+NKN0zfWlJu+6kzieWzgdQHFAYCN6x0/N/o1LXue+RcDwAoazdwwF/WSngabh/pDyvmVGkRZVXrioJnIC8uM2KSZILGrfZdYxVw+MPHLLp+QwF1W3U8FDJgiL03xe521JiIhdW9oD80/od8FOVI+xYcEJ74="; - System.out.println("解密数据:" + RsaUtils.decryptDataOnJava(data, PRIVATEKEY)); + String sourceData = "12345678"; + String encryptedData = RsaUtils.encryptedDataOnJava(sourceData + " " + System.currentTimeMillis(), PUBLICKEY); + System.out.println("加密数据:" + encryptedData); + + try { + String decryptedData = RsaUtils.decryptDataOnJava(encryptedData, PRIVATEKEY); + String[] x = decryptedData.split(" "); + String time = x[1]; + //判断时间戳是否超时,与当前时间相差60*8分钟 + if (System.currentTimeMillis() - Long.parseLong(time) > 1000 * 60 * 8) { + System.out.println("票据超时!"); + return; + } else { + //计算两个时间戳之间的差值,单位为秒 + long diff = (System.currentTimeMillis() - Long.parseLong(time)) / 1000; + System.out.println("票据有效,时间差为:" + diff + "秒"); + } + System.out.println("解密数据:" + decryptedData); + } catch (Exception e) { + System.out.println("无法解密,传入的票据无效!"); + } } }