package com.supwisdom.dlpay.framework.filter;\r
\r
\r
+import com.fasterxml.jackson.databind.ObjectMapper;\r
+import com.supwisdom.dlpay.api.bean.JsonResult;\r
import com.supwisdom.dlpay.exception.ValidateCodeException;\r
import com.supwisdom.dlpay.framework.security.validate.ImageCodeUtil;\r
import com.supwisdom.dlpay.framework.security.validate.VerifyCode;\r
import com.supwisdom.dlpay.framework.util.StringUtil;\r
import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.http.HttpStatus;\r
import org.springframework.security.web.authentication.AuthenticationFailureHandler;\r
import org.springframework.security.web.authentication.AuthenticationSuccessHandler;\r
import org.springframework.stereotype.Component;\r
*/\r
@Autowired\r
private AuthenticationSuccessHandler myAuthenticationSuccessHandler;\r
+ @Autowired\r
+ private ObjectMapper objectMapper;\r
\r
\r
@Override\r
try {\r
validate(request);\r
} catch (ValidateCodeException e) {\r
- myAuthenticationFailureHandler.onAuthenticationFailure(request, response, e);\r
+ response.setStatus(HttpStatus.OK.value());\r
+ response.setContentType("application/json;charset=UTF-8");\r
+ response.getWriter().write(objectMapper.writeValueAsString(JsonResult.error(400, e.getMessage())));\r
+ //response.sendError(HttpStatus.UNAUTHORIZED.value(),e.getMessage());\r
+ //myAuthenticationFailureHandler.onAuthenticationFailure(request, response, e);\r
+ return;\r
}\r
}\r
filterChain.doFilter(request, response);\r
throw new ValidateCodeException("获取验证码的值失败");\r
}\r
if (StringUtil.isEmpty(inputCode)) {\r
- throw new ValidateCodeException("验证码的值不能为空");\r
+ throw new ValidateCodeException("验证码不能为空");\r
}\r
if (null == imageCode) {\r
throw new ValidateCodeException("验证码不存在");\r
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;
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;
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;
}
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;
}
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";
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("密码修改成功,请重新登录");
+ }
}
@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);
}
}
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;
+ }
}
// 路由注册
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);
$(this).attr('href', 'javascript:;');
}
});
+
// 主页
Q.init({
index: 'home_console'
location.replace('logout');
});
});
-
- // 修改密码点击事件
- $('#setPsw').click(function () {
- admin.popupRight('home/password');
- });
-
- // 个人信息点击事件
- $('#setInfo').click(function () {
-
- });
-
- // 消息点击事件
- $('#btnMessage').click(function () {
- admin.popupRight('home/message');
- });
}
};
<a ew-event="fullScreen" title="全屏"><i class="layui-icon layui-icon-screen-full"></i></a>\r
</li>\r
<li class="layui-nav-item" lay-unselect>\r
- <a>\r
+ <a href="javascript:;">\r
<img th:src="@{/static/custom/images/head.png}" class="layui-nav-img">\r
<cite>[[${loginOper.opername}]]</cite>\r
</a>\r
<dl class="layui-nav-child">\r
- <dd lay-unselect>\r
- <a id="setInfo">个人信息</a>\r
- </dd>\r
- <dd lay-unselect>\r
- <a id="setPsw">修改密码</a>\r
- </dd>\r
+ <dd ay-unselect><a lay-href="/operator/userinfor">基本资料</a></dd>\r
+ <dd ay-unselect><a lay-href="/operator/setpwd">修改密码</a></dd>\r
<hr>\r
- <dd lay-unselect>\r
- <a id="btnLogout">退出</a>\r
- </dd>\r
+ <dd layadmin-event="logout" style="text-align: center;" ><a href="/logout">退出</a></dd>\r
</dl>\r
</li>\r
<li class="layui-nav-item" lay-unselect>\r
index.checkPageTabs(true); // 检查多标签是否开启\r
index.initRouter(); // 导航栏和tab联动\r
index.bindEvent(); // 绑定事件\r
+\r
});\r
</script>\r
</body>\r
data: field,
type: 'POST',
success: function (data) {
+ console.log(data);
if (200 == data.code) {
layer.msg('登录成功', {icon: 1, time: 1500}, function () {
location.replace('./');
}
},
error: function (xhr) {
- console.log('error');
console.log(xhr);
layer.closeAll('loading');
- layer.msg('登录失败,请按f12查看console错误信息', {icon: 5});
+ layer.msg('登录失败', {icon: 5});
}
});
});
<div class="layui-card-header">\r
<h2 class="header-title">功能维护</h2>\r
<span class="layui-breadcrumb pull-right">\r
- <a href="#!_operator_index">系统中心</a>\r
+ <a href="#">系统中心</a>\r
<a><cite>功能维护</cite></a>\r
</span>\r
</div>\r
<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>
--- /dev/null
+<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
--- /dev/null
+<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
<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>