修改登录
diff --git a/src/main/java/com/supwisdom/dlpay/framework/filter/ValidateCodeFilter.java b/src/main/java/com/supwisdom/dlpay/framework/filter/ValidateCodeFilter.java
index bd8e660..77242b9 100755
--- a/src/main/java/com/supwisdom/dlpay/framework/filter/ValidateCodeFilter.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/filter/ValidateCodeFilter.java
@@ -1,11 +1,14 @@
package com.supwisdom.dlpay.framework.filter;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.supwisdom.dlpay.api.bean.JsonResult;
import com.supwisdom.dlpay.exception.ValidateCodeException;
import com.supwisdom.dlpay.framework.security.validate.ImageCodeUtil;
import com.supwisdom.dlpay.framework.security.validate.VerifyCode;
import com.supwisdom.dlpay.framework.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
import org.springframework.security.web.authentication.AuthenticationFailureHandler;
import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
import org.springframework.stereotype.Component;
@@ -32,6 +35,8 @@
*/
@Autowired
private AuthenticationSuccessHandler myAuthenticationSuccessHandler;
+ @Autowired
+ private ObjectMapper objectMapper;
@Override
@@ -43,7 +48,12 @@
try {
validate(request);
} catch (ValidateCodeException e) {
- myAuthenticationFailureHandler.onAuthenticationFailure(request, response, e);
+ response.setStatus(HttpStatus.OK.value());
+ response.setContentType("application/json;charset=UTF-8");
+ response.getWriter().write(objectMapper.writeValueAsString(JsonResult.error(400, e.getMessage())));
+ //response.sendError(HttpStatus.UNAUTHORIZED.value(),e.getMessage());
+ //myAuthenticationFailureHandler.onAuthenticationFailure(request, response, e);
+ return;
}
}
filterChain.doFilter(request, response);
@@ -58,7 +68,7 @@
throw new ValidateCodeException("获取验证码的值失败");
}
if (StringUtil.isEmpty(inputCode)) {
- throw new ValidateCodeException("验证码的值不能为空");
+ throw new ValidateCodeException("验证码不能为空");
}
if (null == imageCode) {
throw new ValidateCodeException("验证码不存在");
diff --git a/src/main/java/com/supwisdom/dlpay/system/controller/OperatorController.java b/src/main/java/com/supwisdom/dlpay/system/controller/OperatorController.java
index 173cc64..dc0ef57 100644
--- a/src/main/java/com/supwisdom/dlpay/system/controller/OperatorController.java
+++ b/src/main/java/com/supwisdom/dlpay/system/controller/OperatorController.java
@@ -1,10 +1,8 @@
package com.supwisdom.dlpay.system.controller;
import com.supwisdom.dlpay.api.bean.JsonResult;
-import com.supwisdom.dlpay.framework.domain.TFunction;
-import com.supwisdom.dlpay.framework.domain.TOperLog;
-import com.supwisdom.dlpay.framework.domain.TOperRole;
-import com.supwisdom.dlpay.framework.domain.TOperator;
+import com.supwisdom.dlpay.framework.domain.*;
+import com.supwisdom.dlpay.framework.security.OperUtil;
import com.supwisdom.dlpay.framework.util.PageResult;
import com.supwisdom.dlpay.framework.util.StringUtil;
import com.supwisdom.dlpay.framework.util.WebConstant;
@@ -18,6 +16,7 @@
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
+import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@@ -42,8 +41,7 @@
public PageResult<TOperator> getDataList(@RequestParam("page") Integer pageNo,
@RequestParam("limit") Integer pageSize,
@RequestParam(value = "searchkey", required = false) String searchKey,
- @RequestParam(value = "searchvalue", required = false) String searchValue,
- Model model) {
+ @RequestParam(value = "searchvalue", required = false) String searchValue) {
try {
if (null == pageNo || pageNo < 1) pageNo = WebConstant.PAGENO_DEFAULT;
@@ -81,12 +79,13 @@
}
return JsonResult.ok("success");
}
+
@PostMapping("/getoperatorrole")
@ResponseBody
- public JsonResult getoperatorrole( @RequestParam(value = "operid") String operid) {
+ public JsonResult getoperatorrole(@RequestParam(value = "operid") String operid) {
List<TOperRole> roles = operatorService.getOperRoleByOperId(operid);
JsonResult ret = JsonResult.ok("success");
- ret.put("roles",roles);
+ ret.put("roles", roles);
return ret;
}
@@ -125,16 +124,18 @@
return JsonResult.error("操作失败");
}
}
+
@PostMapping("/updatestate")
@PreAuthorize("hasPermission('/operator/updatestate','')")
@ResponseBody
- public JsonResult updatestate(@RequestParam("operid") String operid,@RequestParam("state") String state) {
- if (operatorService.updateState(operid,state)) {
+ public JsonResult updatestate(@RequestParam("operid") String operid, @RequestParam("state") String state) {
+ if (operatorService.updateState(operid, state)) {
return JsonResult.ok("操作成功");
} else {
return JsonResult.error("操作失败");
}
}
+
@GetMapping("/logs")
public String logs() {
return "system/operator/logs";
@@ -159,4 +160,62 @@
return new PageResult<>(99, "系统查询错误");
}
}
+
+ @GetMapping("/userinfor")
+ public String userinfor(ModelMap map) {
+ TOperator operator = OperUtil.getCurrentOper();
+ if(operator!=null){
+ operator = operatorService.getOperatorByCode(operator.getOpercode());
+ }
+ map.put("user", operator);
+ return "system/operator/userinfor";
+ }
+
+ @PostMapping("/updateinfor")
+ @ResponseBody
+ public JsonResult updateinfor(@RequestBody TOperator oper) {
+ TOperator operator = OperUtil.getCurrentOper();
+ if (oper != null) {
+ operator.setSex(oper.getSex());
+ operator.setOpername(oper.getOpername());
+ operator.setEmail(oper.getEmail());
+ operator.setMobile(oper.getMobile());
+ operatorService.saveOperator(operator);
+ }
+ return JsonResult.ok("操作成功");
+ }
+
+ @GetMapping("/setpwd")
+ public String setpwd(ModelMap map) {
+ return "system/operator/setpwd";
+ }
+
+ @PostMapping("/dosetpwd")
+ @ResponseBody
+ public JsonResult dosetpwd(@RequestParam String curpwd,
+ @RequestParam String newpwd, @RequestParam String renewpwd) {
+ if (StringUtil.isEmpty(curpwd)
+ || StringUtil.isEmpty(newpwd)
+ || StringUtil.isEmpty(renewpwd)) {
+ return JsonResult.error("参数粗错误");
+ }
+ BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
+ String encpwd = encoder.encode(curpwd);
+ TOperator operator = OperUtil.getCurrentOper();
+ if (operator == null) {
+ return JsonResult.error(401, "登录已过期,请重新登录");
+ }
+ if (!encoder.matches(curpwd,operator.getPassword())) {
+ return JsonResult.error("当前密码错误");
+ }
+ if (!newpwd.equals(renewpwd)) {
+ return JsonResult.error("两次密码不一致");
+ }
+ if(newpwd.length()<6||newpwd.length()>20){
+ return JsonResult.error("密码6~20个字符");
+ }
+ operator.setOperpwd(encoder.encode(newpwd));
+ operatorService.saveOperator(operator);
+ return JsonResult.ok("密码修改成功,请重新登录");
+ }
}
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/OperatorService.java b/src/main/java/com/supwisdom/dlpay/system/service/OperatorService.java
index a975eb2..3954045 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/OperatorService.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/OperatorService.java
@@ -38,4 +38,7 @@
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = true)
PageResult<TOperLog> getOperLogs(LogBean param);
+
+ @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+ boolean saveOperator(TOperator operator);
}
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/impl/OperatorServiceImpl.java b/src/main/java/com/supwisdom/dlpay/system/service/impl/OperatorServiceImpl.java
index 5990930..e58032e 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/impl/OperatorServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/impl/OperatorServiceImpl.java
@@ -160,4 +160,14 @@
}
return new PageResult<>(operLogDao.findAll(pageable));
}
+
+ @Override
+ public boolean saveOperator(TOperator operator) {
+ Optional<TOperator> temp = operatorDao.findById(operator.getOperid());
+ if (!temp.isPresent()) {
+ return false;
+ }
+ operatorDao.save(operator);
+ return true;
+ }
}
diff --git a/src/main/resources/static/custom/module/index.js b/src/main/resources/static/custom/module/index.js
index 1217d02..6b49296 100755
--- a/src/main/resources/static/custom/module/index.js
+++ b/src/main/resources/static/custom/module/index.js
@@ -8,9 +8,10 @@
// 路由注册
initRouter: function () {
// 自动扫描side菜单注册
- $('.layui-layout-admin .layui-side .layui-nav a[lay-href]').each(function () {
+ $('.layui-layout-admin .layui-nav a[lay-href]').each(function () {
var menuName = $(this).text();
var menuPath = $(this).attr('lay-href');
+ console.log(menuPath,menuName);
if ('javascript:;' != menuPath && '' != menuPath) {
var key = menuPath.replace(/[?:=&/]/g, '_');
$(this).attr('href', '#!' + key);
@@ -25,6 +26,7 @@
$(this).attr('href', 'javascript:;');
}
});
+
// 主页
Q.init({
index: 'home_console'
@@ -136,21 +138,6 @@
location.replace('logout');
});
});
-
- // 修改密码点击事件
- $('#setPsw').click(function () {
- admin.popupRight('home/password');
- });
-
- // 个人信息点击事件
- $('#setInfo').click(function () {
-
- });
-
- // 消息点击事件
- $('#btnMessage').click(function () {
- admin.popupRight('home/message');
- });
}
};
diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html
index 7dec8c5..a959451 100755
--- a/src/main/resources/templates/index.html
+++ b/src/main/resources/templates/index.html
@@ -39,21 +39,15 @@
<a ew-event="fullScreen" title="全屏"><i class="layui-icon layui-icon-screen-full"></i></a>
</li>
<li class="layui-nav-item" lay-unselect>
- <a>
+ <a href="javascript:;">
<img th:src="@{/static/custom/images/head.png}" class="layui-nav-img">
<cite>[[${loginOper.opername}]]</cite>
</a>
<dl class="layui-nav-child">
- <dd lay-unselect>
- <a id="setInfo">个人信息</a>
- </dd>
- <dd lay-unselect>
- <a id="setPsw">修改密码</a>
- </dd>
+ <dd ay-unselect><a lay-href="/operator/userinfor">基本资料</a></dd>
+ <dd ay-unselect><a lay-href="/operator/setpwd">修改密码</a></dd>
<hr>
- <dd lay-unselect>
- <a id="btnLogout">退出</a>
- </dd>
+ <dd layadmin-event="logout" style="text-align: center;" ><a href="/logout">退出</a></dd>
</dl>
</li>
<li class="layui-nav-item" lay-unselect>
@@ -153,6 +147,7 @@
index.checkPageTabs(true); // 检查多标签是否开启
index.initRouter(); // 导航栏和tab联动
index.bindEvent(); // 绑定事件
+
});
</script>
</body>
diff --git a/src/main/resources/templates/login.html b/src/main/resources/templates/login.html
index 81e8471..0cef69e 100644
--- a/src/main/resources/templates/login.html
+++ b/src/main/resources/templates/login.html
@@ -97,6 +97,7 @@
data: field,
type: 'POST',
success: function (data) {
+ console.log(data);
if (200 == data.code) {
layer.msg('登录成功', {icon: 1, time: 1500}, function () {
location.replace('./');
@@ -108,10 +109,9 @@
}
},
error: function (xhr) {
- console.log('error');
console.log(xhr);
layer.closeAll('loading');
- layer.msg('登录失败,请按f12查看console错误信息', {icon: 5});
+ layer.msg('登录失败', {icon: 5});
}
});
});
diff --git a/src/main/resources/templates/system/function/index.html b/src/main/resources/templates/system/function/index.html
index 245090c..3696dc7 100755
--- a/src/main/resources/templates/system/function/index.html
+++ b/src/main/resources/templates/system/function/index.html
@@ -2,7 +2,7 @@
<div class="layui-card-header">
<h2 class="header-title">功能维护</h2>
<span class="layui-breadcrumb pull-right">
- <a href="#!_operator_index">系统中心</a>
+ <a href="#">系统中心</a>
<a><cite>功能维护</cite></a>
</span>
</div>
diff --git a/src/main/resources/templates/system/operator/logs.html b/src/main/resources/templates/system/operator/logs.html
index 4213ac0..125ce8d 100644
--- a/src/main/resources/templates/system/operator/logs.html
+++ b/src/main/resources/templates/system/operator/logs.html
@@ -2,7 +2,7 @@
<div class="layui-card-header">
<h2 class="header-title">操作日志</h2>
<span class="layui-breadcrumb pull-right">
- <a href="#!_operator_index">系统中心</a>
+ <a href="#">系统中心</a>
<a><cite>操作日志</cite></a>
</span>
</div>
diff --git a/src/main/resources/templates/system/operator/setpwd.html b/src/main/resources/templates/system/operator/setpwd.html
new file mode 100644
index 0000000..d549946
--- /dev/null
+++ b/src/main/resources/templates/system/operator/setpwd.html
@@ -0,0 +1,81 @@
+<div class="layui-card">
+ <div class="layui-card-header">修改密码</div>
+ <div class="layui-card-body" pad15>
+ <form lay-filter="setpwd-form" class="layui-form model-form">
+ <div class="layui-form" lay-filter="">
+ <div class="layui-form-item">
+ <label class="layui-form-label">当前密码</label>
+ <div class="layui-input-inline">
+ <input type="password" name="curpwd" lay-verify="required" lay-verType="tips" required
+ class="layui-input">
+ </div>
+ </div>
+ <div class="layui-form-item">
+ <label class="layui-form-label">新密码</label>
+ <div class="layui-input-inline">
+ <input type="password" name="newpwd" lay-verify="pass" lay-verType="tips" autocomplete="off" required
+ id="LAY_password" class="layui-input">
+ </div>
+ </div>
+ <div class="layui-form-item">
+ <label class="layui-form-label">确认新密码</label>
+ <div class="layui-input-inline">
+ <input type="password" name="renewpwd" lay-verify="repass" lay-verType="tips" required
+ autocomplete="off" class="layui-input">
+ </div>
+ </div>
+ <div class="layui-form-item">
+ <div class="layui-input-block">
+ <button class="layui-btn" lay-submit lay-filter="setmypass">确认修改</button>
+ <button class="layui-btn layui-btn-primary" type="button" ew-event="closeThisTabs">取消</button>
+ </div>
+ </div>
+ </div>
+ </form>
+ </div>
+</div>
+<script>
+ layui.use(['form', 'table', 'layer', 'admin', 'element'], function () {
+ let form = layui.form;
+ let admin = layui.admin;
+ $('#cancelBtn').click(function () {
+ admin.closeThisTabs()
+ });
+ form.render('select');
+ let url = '/operator/dosetpwd';
+ // 表单提交事件
+ form.on('submit(setmypass)', function (data) {
+ layer.load(2);
+ var token_name = $("meta[name='_csrf_token']").attr("content");
+ var token = $("meta[name='_csrf_token']").attr("value");
+ data.field[token_name] = token;
+ $.ajax({
+ type: "POST",
+ dataType: "json",
+ url: url,
+ data: data.field,
+ success: function (result) {
+ layer.closeAll('loading');
+ if (result.code == 200) {
+ layer.msg(result.msg, {icon: 1, time: 1500}, function () {
+ location.replace('/login');
+ }, 1000);
+ } else if (data.code == 401) {
+ layer.msg(result.msg, {icon: 2, time: 1500}, function () {
+ location.replace('/login');
+ }, 1000);
+ return;
+ } else {
+ console.log('err:' + result.code);
+ layer.msg(result.msg, {icon: 2});
+ }
+ },
+ error: function (data) {
+ layer.closeAll('loading');
+ layer.msg("请求服务器失败!", {icon: 2});
+ }
+ });
+ return false;
+ });
+ });
+</script>
\ No newline at end of file
diff --git a/src/main/resources/templates/system/operator/userinfor.html b/src/main/resources/templates/system/operator/userinfor.html
new file mode 100644
index 0000000..8ca3c10
--- /dev/null
+++ b/src/main/resources/templates/system/operator/userinfor.html
@@ -0,0 +1,97 @@
+<div class="layui-card">
+ <div class="layui-card-header">设置我的资料</div>
+ <div class="layui-card-body" pad15>
+ <form lay-filter="userinfor-form" class="layui-form model-form">
+ <div class="layui-form">
+ <div class="layui-form-item">
+ <label class="layui-form-label">登录名</label>
+ <div class="layui-input-inline">
+ <input type="text" name="opercode" th:value="${user.opercode}" readonly class="layui-input">
+ </div>
+ </div>
+ <div class="layui-form-item">
+ <label class="layui-form-label">名称</label>
+ <div class="layui-input-inline">
+ <input type="text" name="opername" th:value="${user.opername}" lay-verify="nickname"
+ autocomplete="off"
+ placeholder="请输入名称" class="layui-input">
+ </div>
+ </div>
+ <div class="layui-form-item">
+ <label class="layui-form-label">性别</label>
+ <div class="layui-input-block">
+ <input type="radio" name="sex" value="male" title="男" th:checked="${user.sex}=='male'">
+ <input type="radio" name="sex" value="female" title="女" th:checked="${user.sex}=='female'">
+ </div>
+ </div>
+ <div class="layui-form-item">
+ <label class="layui-form-label">手机</label>
+ <div class="layui-input-inline">
+ <input type="text" name="mobile" th:value="${user.mobile}" autocomplete="off"
+ class="layui-input">
+ </div>
+ </div>
+ <div class="layui-form-item">
+ <label class="layui-form-label">邮箱</label>
+ <div class="layui-input-inline">
+ <input type="text" name="email" th:value="${user.mobile}" autocomplete="off"
+ class="layui-input">
+ </div>
+ </div>
+ <div class="layui-form-item">
+ <div class="layui-input-block">
+ <button class="layui-btn" lay-filter="infor-form-submit" lay-submit>确认修改</button>
+ <button class="layui-btn layui-btn-primary" type="button" ew-event="closeThisTabs">取消</button>
+ </div>
+ </div>
+ </div>
+ </form>
+ </div>
+</div>
+<script>
+ layui.use(['form', 'table', 'layer', 'admin', 'element'], function () {
+ let form = layui.form;
+ let admin = layui.admin;
+ $('#cancelBtn').click(function () {
+ admin.closeThisTabs()
+ });
+ form.render('select');
+ let url = '/operator/updateinfor';
+ // 表单提交事件
+ form.on('submit(infor-form-submit)', function (data) {
+ layer.load(2);
+ var token_name = $("meta[name='_csrf_token']").attr("content");
+ var token = $("meta[name='_csrf_token']").attr("value");
+ data.field[token_name] = token;
+ $.ajax({
+ type: "POST",
+ dataType: "json",
+ url: url,
+ headers: {
+ 'Accept': 'application/json',
+ 'Content-Type': 'application/json',
+ 'X-CSRF-TOKEN': token,
+ },
+ data: JSON.stringify(data.field),
+ success: function (result) {
+ layer.closeAll('loading');
+ if (result.code == 200) {
+ layer.msg(result.msg, {icon: 1});
+ } else if (data.code == 401) {
+ layer.msg(result.msg, {icon: 2, time: 1500}, function () {
+ location.replace('/login');
+ }, 1000);
+ return;
+ } else {
+ layer.msg(result.msg, {icon: 2});
+ }
+ },
+ error: function (data) {
+ layer.closeAll('loading');
+ layer.msg("请求服务器失败!", {icon: 2});
+ }
+ });
+ return false;
+ });
+ });
+</script>
\ No newline at end of file
diff --git a/src/main/resources/templates/system/role/index.html b/src/main/resources/templates/system/role/index.html
index 2d3f167..93c755d 100644
--- a/src/main/resources/templates/system/role/index.html
+++ b/src/main/resources/templates/system/role/index.html
@@ -2,7 +2,7 @@
<div class="layui-card-header">
<h2 class="header-title">角色管理</h2>
<span class="layui-breadcrumb pull-right">
- <a href="#!_operator_index">系统中心</a>
+ <a href="#">系统中心</a>
<a><cite>角色管理</cite></a>
</span>
</div>