feat:ueky拔出退出登录

new-rd20250506
wangxy 1 month ago
parent 055bc7d942
commit 576ace34db

@ -2,8 +2,11 @@ package com.ruoyi.web.controller.system.system;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Objects;
import javax.servlet.http.Cookie; import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import com.ruoyi.system.service.ISysUserService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap; import org.springframework.ui.ModelMap;
@ -43,6 +46,10 @@ public class SysIndexController extends BaseController
@Autowired @Autowired
private SysPasswordService passwordService; private SysPasswordService passwordService;
@Autowired
private ISysUserService userService;
// 系统首页 // 系统首页
@GetMapping("/index") @GetMapping("/index")
public String index(ModelMap mmap) public String index(ModelMap mmap)
@ -65,7 +72,12 @@ public class SysIndexController extends BaseController
mmap.put("isDefaultModifyPwd", initPasswordIsModify(user.getPwdUpdateDate())); mmap.put("isDefaultModifyPwd", initPasswordIsModify(user.getPwdUpdateDate()));
mmap.put("isPasswordExpired", passwordIsExpiration(user.getPwdUpdateDate())); mmap.put("isPasswordExpired", passwordIsExpiration(user.getPwdUpdateDate()));
mmap.put("isMobile", ServletUtils.checkAgentIsMobile(ServletUtils.getRequest().getHeader("User-Agent"))); mmap.put("isMobile", ServletUtils.checkAgentIsMobile(ServletUtils.getRequest().getHeader("User-Agent")));
//获取系统登录的方式
SysUser sysUser = userService.lambdaQuery().select(SysUser::getIsWay)
.eq(SysUser::getUserId, user.getUserId()).one();
if(Objects.nonNull(sysUser)){
mmap.put("isWay", sysUser.getIsWay());
}
// 菜单导航显示风格 // 菜单导航显示风格
String menuStyle = configService.selectConfigByKey("sys.index.menuStyle"); String menuStyle = configService.selectConfigByKey("sys.index.menuStyle");
// 移动端,默认使左侧导航菜单,否则取默认配置 // 移动端,默认使左侧导航菜单,否则取默认配置

@ -0,0 +1,50 @@
function customFireEvent(objId, eventName) {
var obj = document.getElementById(objId);
if (obj == undefined) {
return;
}
if (obj.fireEvent) {
obj.fireEvent("on" + eventName);
} else if (obj.dispatchEvent) {
var e = document.createEvent('HTMLEvents');
e.initEvent(eventName, false, false);
obj.dispatchEvent(e);
}
}
function FillDeviceList() {
GetAllDeviceSN(function (retObj) {
var obj = document.getElementById("id_device_list");
if (obj == undefined) {
return;
}
var i, n = obj.length;
for (i = 0; i < n; i++) {
obj.remove(0);
}
var strDeviceList = retObj.retVal;
while (true) {
var pos = strDeviceList.indexOf(";");
if (pos <= 0) {
break;
}
var strOneDevice = strDeviceList.substring(0, pos);
var objItem = new Option(strOneDevice, strOneDevice);
obj.options.add(objItem);
var len = strDeviceList.length;
strDeviceList = strDeviceList.substring(pos + 1, len);
}
customFireEvent('id_cert_list', 'change');
customFireEvent('id_device_list', 'change');
});
}
function select_cert(value) {
$("#id_selected_cert_id").val(value);
}
function select_device(value) {
$("#id_selected_device_sn").val(value);
}
SetUserCertList("id_cert_list");
FillDeviceList();
SetOnUsbKeyChangeCallBack(FillDeviceList);

@ -257,6 +257,38 @@
<div th:if="${footer}" class="footer"> <div th:if="${footer}" class="footer">
<div class="pull-right">© [[${copyrightYear}]] ZHKY Copyright </div> <div class="pull-right">© [[${copyrightYear}]] ZHKY Copyright </div>
</div> </div>
<div style="display: none;">
<tr>
<td class="right"> 请选择证书:</td>
<td class="left">
<select class="StandardWidth" id="id_cert_list" onchange="select_cert(this.value)">
</select>
</td>
</tr>
<tr>
<td class="right"> 选择设备序列号:</td>
<td class="left">
<select class="StandardWidth" id="id_device_list" onchange="select_device(this.value)">
</select>
</td>
</tr>
<tr>
<td class="right"> 设备序列号:</td>
<td class="left">
<input type="text" class="StandardWidth" id="id_selected_device_sn" >
</td>
</tr>
<tr>
<td class="right"> 选择的证书ID:</td>
<td class="left">
<input type="text" class="StandardWidth layui-input" id="id_selected_cert_id" >
</td>
</tr>
</div>
</div> </div>
<!--右侧部分结束--> <!--右侧部分结束-->
</div> </div>
@ -272,6 +304,9 @@
<script th:src="@{/ruoyi/js/common.js?v=4.7.7}"></script> <script th:src="@{/ruoyi/js/common.js?v=4.7.7}"></script>
<script th:src="@{/ruoyi/index.js?v=20201208}"></script> <script th:src="@{/ruoyi/index.js?v=20201208}"></script>
<script th:src="@{/ajax/libs/fullscreen/jquery.fullscreen.js}"></script> <script th:src="@{/ajax/libs/fullscreen/jquery.fullscreen.js}"></script>
<script src="../static/ruoyi/xtxasyn.js" th:src="@{/ruoyi/xtxasyn.js}"></script>
<!-- ukey.js -->
<script src="../static/ruoyi/ukey.js" th:src="@{/ruoyi/ukey.js}"></script>
<script th:inline="javascript"> <script th:inline="javascript">
window.history.forward(1); window.history.forward(1);
var ctx = [[@{/}]]; var ctx = [[@{/}]];
@ -385,7 +420,36 @@
}); });
} }
$("[data-toggle='tooltip']").tooltip(); $("[data-toggle='tooltip']").tooltip();
}); });
var isWay=[[${isWay}]];
if(isWay==1) {
// 检查UKey状态的定时器
var ukeyCheckInterval = setInterval(function () {
var ukey_id = $("#id_selected_cert_id").val();
if (!ukey_id) {
// 清除定时器
clearInterval(ukeyCheckInterval);
// 显示警告通知
//$.modal.alertWarning("UKey设备未插入", function () {
// 跳转到登出页面
location.href = ctx + 'logout';
//});
}
}, 10000); // 每10秒检查一次
}
// 页面卸载时清除定时器
$(window).on('beforeunload', function() {
clearInterval(ukeyCheckInterval);
});
</script> </script>
</body> </body>
</html> </html>

@ -89,7 +89,7 @@
function submitHandler() { function submitHandler() {
if ($.validate.form()) { if ($.validate.form()) {
$.operate.save(ctx + "system/user/resetUekySave", $('#form-user-ukey').serialize()); $.operate.saveTab(ctx + "system/user/resetUekySave", $('#form-user-ukey').serialize());
} }
} }
</script> </script>

@ -244,6 +244,9 @@ public class SysUser extends BaseEntity
/** UKey唯一标识 */ /** UKey唯一标识 */
private String ukeyId; private String ukeyId;
/** 登录方式0普通登录 1ueky登录*/
private Integer isWay;
public String getHavePassport() { public String getHavePassport() {
return havePassport; return havePassport;
} }

@ -129,7 +129,7 @@ public class SysLoginService {
} }
AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"))); AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
setRolePermission(user); setRolePermission(user);
recordLoginInfo(user.getUserId()); recordLoginInfo(user.getUserId(),rememberMe);
return user; return user;
} }
@ -174,11 +174,16 @@ public class SysLoginService {
* *
* @param userId ID * @param userId ID
*/ */
public void recordLoginInfo(Long userId) { public void recordLoginInfo(Long userId,boolean rememberMe) {
SysUser user = new SysUser(); int isWay = 0;
user.setUserId(userId); if(rememberMe){
user.setLoginIp(ShiroUtils.getIp()); isWay = 1;
user.setLoginDate(DateUtils.getNowDate()); }
userService.updateUserInfo(user); userService.lambdaUpdate()
.eq(SysUser::getUserId, userId)
.set(SysUser::getLoginIp, ShiroUtils.getIp())
.set(SysUser::getLoginDate, DateUtils.getNowDate())
.set(SysUser::getIsWay, isWay)
.update();
} }
} }

@ -40,6 +40,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="examinedate" column="examinedate" /> <result property="examinedate" column="examinedate" />
<result property="examineuser" column="examineuser" /> <result property="examineuser" column="examineuser" />
<result property="ukeyId" column="ukey_id" /> <result property="ukeyId" column="ukey_id" />
<result property="isWay" column="is_way" />
<result property="havePassport" column="have_passport" /> <result property="havePassport" column="have_passport" />
<result property="confAgreement" column="conf_agreement" /> <result property="confAgreement" column="conf_agreement" />
<result property="entryexitFiling" column="entryexit_filing" /> <result property="entryexitFiling" column="entryexit_filing" />

Loading…
Cancel
Save