mirror of
https://gitee.com/dromara/Jpom.git
synced 2024-11-30 02:48:17 +08:00
修改用户信息,在线用户需要重新登录
This commit is contained in:
parent
1f1bcc8a98
commit
8ca743ee71
@ -15,6 +15,7 @@
|
|||||||
9. 首页进程监听表格显示端口号(感谢@洋芋)
|
9. 首页进程监听表格显示端口号(感谢@洋芋)
|
||||||
10. 保存时检查Oss信息是否正确
|
10. 保存时检查Oss信息是否正确
|
||||||
11. Jpom管理命令新增判断`JAVA_HOME`环境变量
|
11. Jpom管理命令新增判断`JAVA_HOME`环境变量
|
||||||
|
12. 修改用户信息,在线用户需要重新登录
|
||||||
|
|
||||||
### 解决BUG、优化功能
|
### 解决BUG、优化功能
|
||||||
|
|
||||||
|
@ -4,16 +4,23 @@ import cn.hutool.core.date.DateUtil;
|
|||||||
import cn.hutool.core.io.FileUtil;
|
import cn.hutool.core.io.FileUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.hutool.extra.servlet.ServletUtil;
|
import cn.hutool.extra.servlet.ServletUtil;
|
||||||
|
import cn.jiangzeyin.common.JsonMessage;
|
||||||
import cn.jiangzeyin.common.interceptor.BaseInterceptor;
|
import cn.jiangzeyin.common.interceptor.BaseInterceptor;
|
||||||
import cn.jiangzeyin.common.interceptor.InterceptorPattens;
|
import cn.jiangzeyin.common.interceptor.InterceptorPattens;
|
||||||
|
import cn.jiangzeyin.common.spring.SpringUtil;
|
||||||
import cn.keepbx.jpom.common.BaseController;
|
import cn.keepbx.jpom.common.BaseController;
|
||||||
import cn.keepbx.jpom.model.UserModel;
|
import cn.keepbx.jpom.model.UserModel;
|
||||||
|
import cn.keepbx.jpom.service.user.UserService;
|
||||||
|
import org.springframework.http.MediaType;
|
||||||
|
import org.springframework.web.bind.annotation.ResponseBody;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
import org.springframework.web.method.HandlerMethod;
|
import org.springframework.web.method.HandlerMethod;
|
||||||
import org.springframework.web.servlet.ModelAndView;
|
import org.springframework.web.servlet.ModelAndView;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import javax.servlet.http.HttpSession;
|
import javax.servlet.http.HttpSession;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 登录拦截器
|
* 登录拦截器
|
||||||
@ -38,7 +45,20 @@ public class LoginInterceptor extends BaseInterceptor {
|
|||||||
if (notLogin == null) {
|
if (notLogin == null) {
|
||||||
UserModel user = (UserModel) session.getAttribute(SESSION_NAME);
|
UserModel user = (UserModel) session.getAttribute(SESSION_NAME);
|
||||||
if (user == null) {
|
if (user == null) {
|
||||||
response.sendRedirect(getHeaderProxyPath(request) + "/login.html");
|
this.responseLogin(request, response, handlerMethod);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// 用户信息
|
||||||
|
UserService userService = SpringUtil.getBean(UserService.class);
|
||||||
|
UserModel newUser = userService.getItem(user.getId());
|
||||||
|
if (newUser == null) {
|
||||||
|
// 用户被删除
|
||||||
|
this.responseLogin(request, response, handlerMethod);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (user.getModifyTime() != newUser.getModifyTime()) {
|
||||||
|
// 被修改过
|
||||||
|
this.responseLogin(request, response, handlerMethod);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -47,6 +67,26 @@ public class LoginInterceptor extends BaseInterceptor {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 提示登录
|
||||||
|
*
|
||||||
|
* @param request req
|
||||||
|
* @param response res
|
||||||
|
* @param handlerMethod 方法
|
||||||
|
* @throws IOException 异常
|
||||||
|
*/
|
||||||
|
private void responseLogin(HttpServletRequest request, HttpServletResponse response, HandlerMethod handlerMethod) throws IOException {
|
||||||
|
ResponseBody responseBody = handlerMethod.getMethodAnnotation(ResponseBody.class);
|
||||||
|
if (responseBody == null) {
|
||||||
|
RestController restController = handlerMethod.getBeanType().getAnnotation(RestController.class);
|
||||||
|
if (restController == null) {
|
||||||
|
response.sendRedirect(getHeaderProxyPath(request) + "/login.html");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ServletUtil.write(response, JsonMessage.getString(800, "登录信息已失效,重新登录"), MediaType.APPLICATION_JSON_UTF8_VALUE);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
|
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
|
||||||
super.postHandle(request, response, handler, modelAndView);
|
super.postHandle(request, response, handler, modelAndView);
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
|
* controller 控制器
|
||||||
|
* <p>
|
||||||
* The MIT License(MIT)
|
* The MIT License(MIT)
|
||||||
* <p>
|
* <p>
|
||||||
* Copyright(c) 2019 码之科技工作室
|
* Copyright(c) 2019 码之科技工作室
|
||||||
@ -20,7 +22,6 @@
|
|||||||
* IN AN ACTION OF CONTRACT,TORT OR OTHERWISE,ARISING FROM,OUT OF OR IN
|
* IN AN ACTION OF CONTRACT,TORT OR OTHERWISE,ARISING FROM,OUT OF OR IN
|
||||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
* <p>
|
* <p>
|
||||||
* controller 控制器
|
|
||||||
*
|
*
|
||||||
* @author jiangzeyin
|
* @author jiangzeyin
|
||||||
*/
|
*/
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package cn.keepbx.jpom.controller.user;
|
package cn.keepbx.jpom.controller.user;
|
||||||
|
|
||||||
|
import cn.hutool.core.date.DateUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.jiangzeyin.common.DefaultSystemLog;
|
import cn.jiangzeyin.common.DefaultSystemLog;
|
||||||
import cn.jiangzeyin.common.JsonMessage;
|
import cn.jiangzeyin.common.JsonMessage;
|
||||||
@ -248,6 +249,8 @@ public class UserInfoController extends BaseController {
|
|||||||
if (msg != null) {
|
if (msg != null) {
|
||||||
return msg;
|
return msg;
|
||||||
}
|
}
|
||||||
|
// 记录修改时间,如果在线用户线退出
|
||||||
|
userModel.setModifyTime(DateUtil.currentSeconds());
|
||||||
boolean b = userService.updateItem(userModel);
|
boolean b = userService.updateItem(userModel);
|
||||||
if (b) {
|
if (b) {
|
||||||
return JsonMessage.getString(200, "修改成功");
|
return JsonMessage.getString(200, "修改成功");
|
||||||
|
@ -67,6 +67,10 @@ public class UserModel extends BaseModel {
|
|||||||
* 删除文件权限
|
* 删除文件权限
|
||||||
*/
|
*/
|
||||||
private boolean deleteFile;
|
private boolean deleteFile;
|
||||||
|
/**
|
||||||
|
* 记录最后修改时间
|
||||||
|
*/
|
||||||
|
private long modifyTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取是否有上传文件的权限
|
* 获取是否有上传文件的权限
|
||||||
@ -230,6 +234,8 @@ public class UserModel extends BaseModel {
|
|||||||
|
|
||||||
public void setPassword(String password) {
|
public void setPassword(String password) {
|
||||||
this.password = password;
|
this.password = password;
|
||||||
|
// 记录修改时间,如果在线用户线退出
|
||||||
|
this.setModifyTime(DateUtil.current(false));
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getUserMd5Key() {
|
public String getUserMd5Key() {
|
||||||
@ -281,4 +287,11 @@ public class UserModel extends BaseModel {
|
|||||||
return "demo".equals(getId());
|
return "demo".equals(getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public long getModifyTime() {
|
||||||
|
return modifyTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setModifyTime(long modifyTime) {
|
||||||
|
this.modifyTime = modifyTime;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -63,7 +63,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
## 带loading 效果的网络请求
|
## 带loading 效果的网络请求
|
||||||
function loadingAjax(data) {
|
function loadingAjax(data, closeLoading) {
|
||||||
var success = data.success;
|
var success = data.success;
|
||||||
delete data.success;
|
delete data.success;
|
||||||
var error = data.error;
|
var error = data.error;
|
||||||
@ -73,12 +73,22 @@
|
|||||||
type: 'POST',
|
type: 'POST',
|
||||||
dataType: 'json',
|
dataType: 'json',
|
||||||
beforeSend: function () {
|
beforeSend: function () {
|
||||||
index = layer.load(1, {
|
if (closeLoading !== true) {
|
||||||
shade: [0.3, '#fff']
|
index = layer.load(1, {
|
||||||
});
|
shade: [0.3, '#fff']
|
||||||
|
});
|
||||||
|
}
|
||||||
},
|
},
|
||||||
success: function (data) {
|
success: function (data) {
|
||||||
layer.close(index);
|
layer.close(index);
|
||||||
|
if (data.code == 800) {
|
||||||
|
## 用户信息失效
|
||||||
|
layer.msg(data.msg);
|
||||||
|
setTimeout(function () {
|
||||||
|
top.location.reload();
|
||||||
|
}, 1500);
|
||||||
|
return;
|
||||||
|
}
|
||||||
success && success(data);
|
success && success(data);
|
||||||
},
|
},
|
||||||
error: function () {
|
error: function () {
|
||||||
@ -89,4 +99,8 @@
|
|||||||
$.extend(defData, data);
|
$.extend(defData, data);
|
||||||
$.ajax(defData);
|
$.ajax(defData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function silentAjax(data) {
|
||||||
|
loadingAjax(data, true);
|
||||||
|
}
|
||||||
</script>
|
</script>
|
@ -75,11 +75,12 @@
|
|||||||
<dl class="layui-nav-child">
|
<dl class="layui-nav-child">
|
||||||
<dd><a href="javascript:;" op="updatePwd">修改密码</a></dd>
|
<dd><a href="javascript:;" op="updatePwd">修改密码</a></dd>
|
||||||
<dd><a href="javascript:;" op="updateName">修改昵称</a></dd>
|
<dd><a href="javascript:;" op="updateName">修改昵称</a></dd>
|
||||||
|
<dd><a href="javascript:;" op="exit">退出登录</a></dd>
|
||||||
</dl>
|
</dl>
|
||||||
</li>
|
</li>
|
||||||
<li class="layui-nav-item" id="li-exit">
|
## <li class="layui-nav-item" id="li-exit">
|
||||||
<a href="javascript:;">退出</a>
|
##
|
||||||
</li>
|
## </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="layui-side layui-bg-black">
|
<div class="layui-side layui-bg-black">
|
||||||
@ -206,6 +207,13 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
} else if ('exit' == op) {
|
||||||
|
layer.confirm('确定退出系统?', {
|
||||||
|
'title': '系统提示'
|
||||||
|
}, function (index) {
|
||||||
|
window.location.href = "./logout";
|
||||||
|
layer.close(index);
|
||||||
|
})
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -252,16 +260,6 @@
|
|||||||
});
|
});
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
// 退出系统
|
|
||||||
$('#li-exit').click(function () {
|
|
||||||
layer.confirm('确定退出系统?', {
|
|
||||||
'title': '系统提示'
|
|
||||||
}, function (index) {
|
|
||||||
window.location.href = "./logout";
|
|
||||||
layer.close(index);
|
|
||||||
})
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
</html>
|
</html>
|
@ -240,10 +240,8 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function reqLogSize() {
|
function reqLogSize() {
|
||||||
$.ajax({
|
silentAjax({
|
||||||
url: './log/logSize',
|
url: './log/logSize',
|
||||||
type: 'POST',
|
|
||||||
dataType: 'json',
|
|
||||||
data: {
|
data: {
|
||||||
id: "$!projectInfo.id"
|
id: "$!projectInfo.id"
|
||||||
},
|
},
|
||||||
@ -255,11 +253,6 @@
|
|||||||
$("#resetLog").hide();
|
$("#resetLog").hide();
|
||||||
layer.msg(data.msg);
|
layer.msg(data.msg);
|
||||||
}
|
}
|
||||||
},
|
|
||||||
error: function () {
|
|
||||||
loopLog = false;
|
|
||||||
clearInterval(loopLogTime);
|
|
||||||
layer.alert("日志监听失败");
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -243,10 +243,8 @@
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var lib = wVal + $("#projectEnd").text();
|
var lib = wVal + $("#projectEnd").text();
|
||||||
$.ajax({
|
silentAjax({
|
||||||
url: './judge_lib.json',
|
url: './judge_lib.json',
|
||||||
type: 'POST',
|
|
||||||
dataType: 'json',
|
|
||||||
data: {
|
data: {
|
||||||
id: "#if($item)$!item.id#else#end",
|
id: "#if($item)$!item.id#else#end",
|
||||||
newLib: lib
|
newLib: lib
|
||||||
@ -257,9 +255,6 @@
|
|||||||
} else {
|
} else {
|
||||||
$("#tipMsg").text(data.msg).parent().show();
|
$("#tipMsg").text(data.msg).parent().show();
|
||||||
}
|
}
|
||||||
},
|
|
||||||
error: function (err) {
|
|
||||||
layer.msg('检查路径失败,请稍后再试');
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -150,10 +150,8 @@
|
|||||||
if (ids.length <= 0) {
|
if (ids.length <= 0) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
$.ajax({
|
silentAjax({
|
||||||
url: './getProjectPort',
|
url: './getProjectPort',
|
||||||
type: 'POST',
|
|
||||||
dataType: 'json',
|
|
||||||
data: {
|
data: {
|
||||||
ids: JSON.stringify(ids)
|
ids: JSON.stringify(ids)
|
||||||
},
|
},
|
||||||
@ -164,9 +162,6 @@
|
|||||||
$("span[p-Id='" + key + "']").text(data.data[key].port).attr("title", "端口:" + data.data[key].port + " 进程id:" + data.data[key].pid);
|
$("span[p-Id='" + key + "']").text(data.data[key].port).attr("title", "端口:" + data.data[key].port + " 进程id:" + data.data[key].pid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
|
||||||
error: function (err) {
|
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -126,10 +126,8 @@
|
|||||||
table.render(config);
|
table.render(config);
|
||||||
|
|
||||||
function loadFirstEcharts() {
|
function loadFirstEcharts() {
|
||||||
$.ajax({
|
silentAjax({
|
||||||
url: './getTop',
|
url: './getTop',
|
||||||
type: 'POST',
|
|
||||||
dataType: 'json',
|
|
||||||
success: function (data) {
|
success: function (data) {
|
||||||
if (200 == data.code) {
|
if (200 == data.code) {
|
||||||
if (data.data) {
|
if (data.data) {
|
||||||
@ -139,19 +137,13 @@
|
|||||||
} else {
|
} else {
|
||||||
layer.alert(data.msg);
|
layer.alert(data.msg);
|
||||||
}
|
}
|
||||||
},
|
|
||||||
error: function (err) {
|
|
||||||
layer.alert("监控信息异常!");
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadProcessList() {
|
function loadProcessList() {
|
||||||
$.ajax({
|
silentAjax({
|
||||||
url: './processList',
|
url: './processList',
|
||||||
type: 'POST',
|
|
||||||
dataType: 'json',
|
|
||||||
async: true,
|
|
||||||
success: function (data) {
|
success: function (data) {
|
||||||
if (200 == data.code) {
|
if (200 == data.code) {
|
||||||
if (data.data) {
|
if (data.data) {
|
||||||
@ -161,9 +153,6 @@
|
|||||||
} else {
|
} else {
|
||||||
layer.alert(data.msg);
|
layer.alert(data.msg);
|
||||||
}
|
}
|
||||||
},
|
|
||||||
error: function (err) {
|
|
||||||
layer.alert("监控信息异常!");
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
import cn.hutool.core.io.FileUtil;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
@ -6,13 +8,18 @@ import java.io.IOException;
|
|||||||
*/
|
*/
|
||||||
public class TestFile {
|
public class TestFile {
|
||||||
public static void main(String[] args) throws IOException {
|
public static void main(String[] args) throws IOException {
|
||||||
File file = new File("C:/WINDOWS/system32/s/s");
|
// File file = new File("C:/WINDOWS/system32/s/s");
|
||||||
System.out.println(file.toPath().startsWith(new File("C:/Windows/System32/s/S").toPath()));
|
// System.out.println(file.toPath().startsWith(new File("C:/Windows/System32/s/S").toPath()));
|
||||||
// System.out.println(file());
|
//// System.out.println(file());
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// File file1 = new File("D:/keystore.p12");
|
||||||
|
// System.out.println(file1.exists() && file1.isFile());
|
||||||
|
|
||||||
|
System.out.println(FileUtil.loopFiles("D:\\sss"));
|
||||||
File file1 = new File("D:/keystore.p12");
|
FileUtil.cleanEmpty(new File("D:\\sss"));
|
||||||
System.out.println(file1.exists() && file1.isFile());
|
System.out.println("----------------------------------------");
|
||||||
|
System.out.println(FileUtil.loopFiles("D:\\sss"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user