Commit 6c73c38c authored by 赵啸非's avatar 赵啸非

添加密码修改与登录用户名修改

parent 6823e508
<template>
<div class="page">
<LayoutTable :data="tableData" :config="tableConfig" notDel />
<dialog-show ref="dialogform" @ok="getData" />
<LayoutTable :data="tableData" :config="tableConfig" notDel/>
<dialog-show ref="dialogform" @ok="getData"/>
<el-dialog title="用户已分配的角色" :visible.sync="role.visible">
<el-form :model="role.form">
<el-checkbox-group v-model="role.checkList" :min="500">
<el-checkbox
v-for="item in allRoles"
:key="item.id"
:label="item.id"
>{{ item.name }}</el-checkbox
v-for="item in allRoles"
:key="item.id"
:label="item.id"
>{{ item.name }}
</el-checkbox
>
</el-checkbox-group>
</el-form>
......@@ -20,18 +21,18 @@
</el-dialog>
<el-dialog
:title="userRoleDialog.title"
:visible.sync="userRoleDialog.open"
width="60%"
append-to-body
:title="userRoleDialog.title"
:visible.sync="userRoleDialog.open"
width="60%"
append-to-body
>
<el-form label-width="100px">
<Field
label="角色分配"
:span="24"
v-model="roles"
type="checkbox"
:enumData="tableData.dict.roleIds"
label="角色分配"
:span="24"
v-model="roles"
type="checkbox"
:enumData="tableData.dict.roleIds"
/>
</el-form>
<div slot="footer" class="dialog-footer">
......@@ -41,24 +42,24 @@
</el-dialog>
<el-dialog
:title="userDeptDialog.title"
:visible.sync="userDeptDialog.open"
width="60%"
append-to-body
:title="userDeptDialog.title"
:visible.sync="userDeptDialog.open"
width="60%"
append-to-body
>
<div class="mytree">
<el-tree
ref="bomTree"
:data="data"
id="el-tree"
indent="0"
node-key="id"
:props="treeProps"
:load="loadNode"
highlight-current
lazy
:render-content="renderContent"
@node-click="handleNodeClick"
ref="bomTree"
:data="data"
id="el-tree"
indent="0"
node-key="id"
:props="treeProps"
:load="loadNode"
highlight-current
lazy
:render-content="renderContent"
@node-click="handleNodeClick"
>
</el-tree>
</div>
......@@ -68,6 +69,70 @@
<el-button @click="userDeptDialog.open = false">取 消</el-button>
</div>
</el-dialog>
<el-dialog
:title="userPasswordDialog.title"
hei
:visible.sync="userPasswordDialog.open"
width="60%"
>
<el-form
ref="form"
label-width="110px"
label-position="right"
>
<el-row>
<Field
:span="20"
label="登录名称"
prop="loginName"
disabled
v-model="userPasswordDialog.data.loginName"
/>
<Field
label="登录密码"
prop="loginPwd"
v-model="userPasswordDialog.data.loginPwd"
/>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="updatePasswordConfirm">确 定</el-button>
<el-button @click="userPasswordDialog.open = false">取 消</el-button>
</div>
</el-dialog>
<el-dialog
:title="userLoginDialog.title"
hei
:visible.sync="userLoginDialog.open"
width="60%"
>
<el-form
ref="form"
label-width="110px"
label-position="right"
>
<el-row>
<Field
:span="20"
label="登录名称"
prop="loginName"
v-model="userPasswordDialog.data.loginName"
/>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="updateLoginConfirm">确 定</el-button>
<el-button @click="userLoginDialog.open = false">取 消</el-button>
</div>
</el-dialog>
</div>
</template>
......@@ -77,10 +142,10 @@ import table from "@/assets/mixins/table";
export default {
mixins: [table],
components: { dialogShow },
components: {dialogShow},
methods: {
// 打开弹窗
async findRole({ id }) {
async findRole({id}) {
try {
this.tableData.loading = true;
this.allRoles = await this.getUserRoles(id);
......@@ -93,9 +158,9 @@ export default {
this.tableData.loading = false;
},
renderContent: function(h, { node, data, store }) {
renderContent: function (h, {node, data, store}) {
return (
<span>
<span>
<i style="font-size:16px;color:#409EFF" class={data.icon}></i>
<span style="padding-left: 2px;font-size:14px">{node.label}</span>
</span>
......@@ -107,23 +172,13 @@ export default {
}
this.$get("/dept/getListByParentId", {
parentId: node.data.id,
}).then(({ data }) => {
}).then(({data}) => {
resolve(data.result);
});
},
handleNodeClick(data, node, obj) {
console.log("select node tree", data);
this.node = data;
// this.userDeptDialog.open = false;
// this.$post("/user/save", {
// deptId: data.id,
// })
// .then((res) => {
//
// })
// .catch((error) => {
// this.$message.error(error);
// });
},
userDeptConfirm(row) {
......@@ -186,7 +241,7 @@ export default {
this.$nextTick(() => {
this.$get("/dept/getListByParentId", {
parentId: 0,
}).then(({ data }) => {
}).then(({data}) => {
this.data = data.result;
this.node = {};
console.log("data", this.data);
......@@ -199,14 +254,78 @@ export default {
this.tableData.loading = false;
},
updatePassword(row) {
console.log("修改密码");
try {
this.userPasswordDialog.data = row;
this.userPasswordDialog.data.loginPwd = "";
this.userPasswordDialog.open = true;
} catch (error) {
this.$message.error(error.message);
}
},
updatePasswordConfirm() {
console.log("修改密码");
try {
this.$post("/user/save", {
"id": userPasswordDialog.data.id,
"loginPwd": userPasswordDialog.data.loginPwd,
}).then((res) => {
if (res && res.code == 1) {
this.userPasswordDialog.data = {};
this.$message.success("修改密码成功!");
} else {
this.$message.error(res.message);
}
this.userRoleDialog.open = false;
})
} catch (error) {
this.$message.error(error.message);
}
},
updateLoginName(row) {
console.log("修改登录名");
try {
this.userLoginDialog.data = row;
this.userLoginDialog.data.loginName = "";
this.userLoginDialog.open = true;
} catch (error) {
this.$message.error(error.message);
}
},
updateLoginConfirm() {
console.log("修改登录名");
try {
this.$post("/user/save", {
"id": user.data.id,
"loginName": userLoginDialog.data.loginName,
}).then((res) => {
if (res && res.code == 1) {
this.userLoginDialog.data = {};
this.$message.success("修改登录名成功!");
} else {
this.$message.error(res.message);
}
this.userLoginDialog.open = false;
})
} catch (error) {
this.$message.error(error.message);
}
},
// 获取用户角色列表
getUserRoles(id) {
return new Promise((resolve, reject) => {
this.$post("/role/roleNameByUserId", { userId: id })
.then(({ data }) => {
resolve(data);
})
.catch(reject);
this.$post("/role/roleNameByUserId", {userId: id})
.then(({data}) => {
resolve(data);
})
.catch(reject);
});
},
getRoleUsers(id) {
......@@ -215,13 +334,13 @@ export default {
userId: id,
size: -1,
})
.then(({ data }) => {
const result = data.data
.filter((i) => i.roleId + "")
.map((i) => i.roleId + "");
resolve(result);
})
.catch(reject);
.then(({data}) => {
const result = data.data
.filter((i) => i.roleId + "")
.map((i) => i.roleId + "");
resolve(result);
})
.catch(reject);
});
},
/** 重写新增方法 */
......@@ -260,6 +379,22 @@ export default {
data: {},
},
userPasswordDialog: {
// 是否显示弹出层
open: false,
// 弹出层标题
title: "修改密码",
data: {},
},
userLoginDialog: {
// 是否显示弹出层
open: false,
// 弹出层标题
title: "修改登录名",
data: {},
},
treeProps: {
children: "children",
label: "label",
......@@ -272,8 +407,8 @@ export default {
config: {
isshowTabPane: true,
columns: [
{ type: "selection", reserveSelection: true, width: 60 },
{ type: "index", label: "序号", align: "center", width: 50 },
{type: "selection", reserveSelection: true, width: 60},
{type: "index", label: "序号", align: "center", width: 50},
{
prop: "loginName",
label: "登录名称",
......@@ -317,18 +452,19 @@ export default {
},
{
label: "操作",
width: 280,
width: 320,
align: "center",
formatter: (row) => {
return (
<div>
<table-buttons
noView
row={row}
onEdit={this.toEdit}
onDel={this.toDel}
/>
{/*
<div>
<table-buttons
noView
noDel
row={row}
onEdit={this.toEdit}
onDel={this.toDel}
/>
{/*
<el-button
size="mini"
type="text"
......@@ -338,25 +474,35 @@ export default {
分配角色
</el-button>
*/}
<span> </span>
<el-button
size="mini"
type="text"
icon="el-icon-share"
onClick={() => this.distributeDept(row)}
>
分配部门
</el-button>
<span> </span>
<el-button
size="mini"
type="text"
icon="el-icon-share"
onClick={() => this.distributeDept(row)}
>
修改密码
</el-button>
</div>
<span> </span>
<el-button
size="mini"
type="text"
icon="el-icon-share"
onClick={() => this.distributeDept(row)}
>
分配部门
</el-button>
<span> </span>
<el-button
size="mini"
type="text"
icon="el-icon-share"
onClick={() => this.updatePassword(row)}
>
修改密码
</el-button>
<span> </span>
<el-button
size="mini"
type="text"
icon="el-icon-share"
onClick={() => this.updateLoginName(row)}
>
修改登录名
</el-button>
</div>
);
},
},
......@@ -387,30 +533,35 @@ export default {
<style lang="scss" scoped>
.mytree ::v-deep {
.el-tree--highlight-current
::v-deep
.el-tree-node.is-checked
> .el-tree-node__content {
::v-deep
.el-tree-node.is-checked
> .el-tree-node__content {
background-color: rgb(255, 255, 255);
color: rgb(64, 158, 255);
}
.el-tree--highlight-current
::v-deep
.el-tree-node.is-current
> .el-tree-node__content {
::v-deep
.el-tree-node.is-current
> .el-tree-node__content {
background-color: rgb(255, 255, 255);
color: rgb(64, 158, 255);
}
.el-tree > .el-tree-node:after {
border-top: none;
}
.el-tree-node {
position: relative;
padding-left: 16px;
}
//节点有间隙,隐藏掉展开按钮就好了,如果觉得空隙没事可以删掉
.el-tree-node__expand-icon.is-leaf {
display: none;
}
.el-tree-node__children {
padding-left: 16px;
}
......
module.exports = {
productionSourceMap: false,
/* assetsDir: 's',
configureWebpack: {
externals: {
vue: "Vue",
vuex: "Vuex",
"vue-router": "VueRouter",
"element-ui": "ELEMENT"
},
},*/
lintOnSave:false,
devServer: {
inline: true,
......
......@@ -204,6 +204,57 @@ public class LoginController extends BaseCRUDJsonBodyMappingController<UserServi
}
}
/**
* 修改用户登录名
*
* @param userEntity
* @return
* @throws Exception
*/
@RequestMapping("reLoginName")
public String reLoginName(@RequestBody UserEntity userEntity) throws Exception {
JSONObject ret = new JSONObject();
Long id = userEntity.getId();
String loginName = userEntity.getLoginName();
Integer userType = userEntity.getUserType();
if (ObjectUtils.isEmpty(userEntity.getId())) {
throw new AppException("修改的用户id不能为空");
}
if (ObjectUtils.isEmpty(loginName)) {
throw new AppException("修改的登录名不能问空!");
}
try {
//检测修改的用户名是否存在
UserEntity entity = userService.selectOne(new UserQuery().loginName(loginName));
if (!ObjectUtils.isEmpty(entity)) {
throw new AppException("修改的用户登录名已经存在!loginName=" + loginName);
}
if (SysConstains.ADMIN_ID == id)
throw new AppException("超级管理员不允许修改!");
if (userType == UserType.SYSTEM.getValue())
throw new AppException("系统用户不允许修改!");
userService.getUserDao().update(userEntity);
ret.put(KEY_RESULT_CODE, VALUE_RESULT_SUCCESS);
ret.put(KEY_RESULT_MSG, "修改用户登录名成功!");
recordSysLog(request, userEntity, "修改用户登录名成功!");
return ret.toJSONString();
} catch (AppException e) {
log.error("login error ", e);
ret.put(KEY_RESULT_CODE, e.getCode());
ret.put(KEY_RESULT_MSG, super.convertException(e));
return ret.toJSONString();
} catch (Exception e) {
log.error("系统异常 error ", e);
ret.put(KEY_RESULT_CODE, VALUE_RESULT_FAILURE);
ret.put(KEY_RESULT_MSG, super.convertException(e));
return ret.toJSONString();
}
}
@RequestMapping("logout")
public void logout(HttpServletRequest request, HttpServletResponse response) throws Exception {
......
......@@ -114,6 +114,12 @@ public interface UserService extends ICRUDCacheService<UserEntity,Long> {
*/
public boolean updateUserPwd(String loginName, String oldPwd, String newPwd) throws AppException;
/**
*
* @param entity
*/
void doHandlerUser(UserEntity entity);
UserDao getUserDao();
......
......@@ -46,6 +46,7 @@ import java.util.stream.Collectors;
* <p>Description: UserServiceImpl service接口 </p>
* <p>Copyright: Copyright &reg; </p>
* <p>Company: </p>
*
* @author
* @version 1.0.0
*/
......@@ -65,10 +66,12 @@ public class UserServiceImpl extends AbstractCRUDCacheServiceImpl<UserDao, UserE
@Value("${sms.apiId:ADsUXLrS81vZDU95}")
private String appid;
/** 短信模板ID**/
/**
* 短信模板ID
**/
private static String SMS_TPYE = "30";
private static String SMS_VERIFY_CODE_KEY ="login:sms:verify:";
private static String SMS_VERIFY_CODE_KEY = "login:sms:verify:";
@Override
protected String getExtKey(UserEntity data) {
......@@ -76,8 +79,7 @@ public class UserServiceImpl extends AbstractCRUDCacheServiceImpl<UserDao, UserE
}
private void doHandlerUser(UserEntity entity) throws AppException {
public void doHandlerUser(UserEntity entity) throws AppException {
if (StringUtils.isNotEmpty(entity.getLoginPwd())) {
try {
entity.setLoginPwd(SecurityUtil.md5DoubleEncoding(entity.getLoginPwd()));
......@@ -101,9 +103,9 @@ public class UserServiceImpl extends AbstractCRUDCacheServiceImpl<UserDao, UserE
@Override
protected void saveAfter(UserEntity entity, Context context) throws AppException {
if(CollectionUtils.isNotEmpty(entity.getRoleIds())){
if (CollectionUtils.isNotEmpty(entity.getRoleIds())) {
List<RoleUserEntity> roleUserEntityList = new ArrayList<>();
entity.getRoleIds().stream().forEach(item->{
entity.getRoleIds().stream().forEach(item -> {
RoleUserEntity roleUserEntity = new RoleUserEntity();
roleUserEntity.setUserId(entity.getId());
roleUserEntity.setRoleId(item);
......@@ -115,7 +117,10 @@ public class UserServiceImpl extends AbstractCRUDCacheServiceImpl<UserDao, UserE
@Override
protected void updateBefore(UserEntity entity, Context context) throws AppException {
if (entity.getId().longValue() == SysConstains.ADMIN_ID && !context.getUser().isAdmin()) {
/* if (entity.getId().longValue() == SysConstains.ADMIN_ID && !context.getUser().isAdmin()) {
throw new AppException("你没有权限执行该操作");
}*/
if (entity.getId().longValue() == SysConstains.ADMIN_ID) {
throw new AppException("你没有权限执行该操作");
}
this.doHandlerUser(entity);
......@@ -123,9 +128,9 @@ public class UserServiceImpl extends AbstractCRUDCacheServiceImpl<UserDao, UserE
@Override
protected void updateAfter(UserEntity entity, Context context) throws AppException {
if(CollectionUtils.isNotEmpty(entity.getRoleIds())){
if (CollectionUtils.isNotEmpty(entity.getRoleIds())) {
List<RoleUserEntity> roleUserEntityList = new ArrayList<>();
entity.getRoleIds().stream().forEach(item->{
entity.getRoleIds().stream().forEach(item -> {
RoleUserEntity roleUserEntity = new RoleUserEntity();
roleUserEntity.setUserId(entity.getId());
roleUserEntity.setRoleId(item);
......@@ -156,13 +161,13 @@ public class UserServiceImpl extends AbstractCRUDCacheServiceImpl<UserDao, UserE
@Override
protected void findAfter(UserEntity params, PageInfo pageInfo, Context context, List<UserEntity> list) throws AppException {
if(CollectionUtils.isNotEmpty(list)) {
list.stream().forEach(item->{
if (CollectionUtils.isNotEmpty(list)) {
list.stream().forEach(item -> {
RoleUserEntity query = new RoleUserEntity();
query.setUserId(item.getId());
List<RoleUserEntity> roleUserEntityList = roleUserDao.getList(query);
List<Long> roleIds = new ArrayList<>();
roleUserEntityList.stream().forEach(role->{
roleUserEntityList.stream().forEach(role -> {
roleIds.add(role.getRoleId());
});
item.setRoleIds(roleIds);
......@@ -364,64 +369,64 @@ public class UserServiceImpl extends AbstractCRUDCacheServiceImpl<UserDao, UserE
@Override
public void sendSmsVerifyCode(String mobileNumber) throws AppException {
if(StringUtils.isEmpty(mobileNumber)){
if (StringUtils.isEmpty(mobileNumber)) {
throw new AppException("手机号不能为空");
}
if(!PhoneUtil.isPhone(mobileNumber)){
if (!PhoneUtil.isPhone(mobileNumber)) {
throw new AppException("手机号码格式不正确");
}
UserEntity user = this.selectOne(new UserQuery().mobile(mobileNumber));
if(user==null){
if (user == null) {
throw new AppException("手机号码:" + mobileNumber + "没有注册用户");
}
String verifyCode = cacheService.get(SMS_VERIFY_CODE_KEY + mobileNumber);
if(StringUtils.isNotEmpty(verifyCode)){
if (StringUtils.isNotEmpty(verifyCode)) {
throw new AppException("当前手机号码已发送验证码,请稍后重试");
}
try {
Map<String, String> params = new HashMap<>();
params.put("appid",appid);
params.put("phone",mobileNumber);
params.put("type",SMS_TPYE);
params.put("appid", appid);
params.put("phone", mobileNumber);
params.put("type", SMS_TPYE);
String[] json = new String[2];
String vCode = RandomUtil.randomNumbers(6);
json[0] = vCode;
json[1] = "1";
params.put("json", JSONObject.toJSON(json).toString());
String resp = HttpUtil.doPost(smsApiUrl,params);
String resp = HttpUtil.doPost(smsApiUrl, params);
JSONObject respJson = JSONObject.parseObject(resp);
if(respJson.getIntValue("code")==0){
if (respJson.getIntValue("code") == 0) {
throw new AppException("短信发送失败:" + respJson.getString("message"));
}
//有效期60秒
cacheService.setnx(SMS_VERIFY_CODE_KEY+mobileNumber,vCode,60);
}catch (Exception e){
log.error("短信发送异常",e);
cacheService.setnx(SMS_VERIFY_CODE_KEY + mobileNumber, vCode, 60);
} catch (Exception e) {
log.error("短信发送异常", e);
throw new AppException("短信发送异常");
}
}
@Override
public UserEntity doSmsLogin(String mobileNumber, String verifyCode, String loginIp) throws AppException {
if(StringUtils.isEmpty(mobileNumber)){
if (StringUtils.isEmpty(mobileNumber)) {
throw new AppException("手机号不能为空");
}
if(StringUtils.isEmpty(verifyCode)){
if (StringUtils.isEmpty(verifyCode)) {
throw new AppException("验证码不能为空");
}
if(!PhoneUtil.isPhone(mobileNumber)){
if (!PhoneUtil.isPhone(mobileNumber)) {
throw new AppException("手机号码格式不正确");
}
UserEntity customer = this.selectOne(new UserQuery().mobile(mobileNumber));
if(customer==null){
if (customer == null) {
throw new AppException("手机号码:" + mobileNumber + "没有注册用户");
}
String vCode = cacheService.get(SMS_VERIFY_CODE_KEY + mobileNumber);
if(StringUtils.isEmpty(vCode)){
if (StringUtils.isEmpty(vCode)) {
throw new AppException("验证码已失效");
}
if(!verifyCode.equals(vCode)){
if (!verifyCode.equals(vCode)) {
throw new AppException("验证码不正确");
}
UserEntity update = new UserEntity();
......
......@@ -24,10 +24,7 @@ import io.jsonwebtoken.Jwts;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
......@@ -122,6 +119,31 @@ public class UserController extends BaseCRUDJsonBodyMappingController<UserServic
}
@RequestMapping(value = "repassword", method = RequestMethod.POST)
public String rePassword(@RequestBody UserEntity userEntity) {
JSONObject ret = new JSONObject();
try {
//查询用户是否存在
boolean existUser = service.existUser(userEntity.getLoginName(), userEntity.getId());
if(!existUser) throw new AppException("用户不存在!");
//修改密码
//service.doHandlerUser(userEntity);
service.update(userEntity,getContext());
//更新密码
ret.put(KEY_RESULT_CODE, VALUE_RESULT_SUCCESS);
ret.put(KEY_RESULT_MSG, "密码修改成功!");
} catch (Exception e) {
ret.put(KEY_RESULT_CODE, VALUE_RESULT_FAILURE);
ret.put(KEY_RESULT_MSG, super.convertException(e));
}
return ret.toJSONString();
}
public static void main(String[] args) {
String token = "eyJhbGciOiJIUzI1NiJ9.eyJsb2dpbl91c2VyX2tleSI6IjIzNGE5NDA5ZDVhOTQ3MWNhMzdkYjZkYmMwY2JjZTc5In0.MWyQW40HYDxyUz7PJRf_nRsFPWx3Hr811Ime984nixs";
......
......@@ -121,64 +121,6 @@ public class ApiLoginController extends BaseJsonBodyController {
ret.put(KEY_RESULT_MSG, super.convertException(e));
return ret.toJSONString();
}
/*
JSONObject ret = new JSONObject();
String loginName = loginForm.getLoginName();
String password = loginForm.getPassword();
String ip = super.getRequestIP(request);
if (StringUtils.isEmpty(loginName) || StringUtils.isEmpty(password)) {
ret.put(KEY_RESULT_CODE, VALUE_RESULT_FAILURE);
ret.put(KEY_RESULT_MSG, "未获取到用户信息,请重新登录");
return ret.toJSONString();
}
UserEntity userEntity = null;
try {
loginForm.validate();
userEntity = userService.doLogin(loginName, password, ip);
userEntity.setLastLoginAddress(ip);
recordSysLog(request, userEntity, "H5用户登录系统成功!");
String currUserName = userEntity.getRealName();
if (currUserName == null || currUserName.trim().length() == 0) {
currUserName = "管理员";
}
JSONObject data = new JSONObject();
data.put("currUserName", currUserName);
data.put("id", userEntity.getId());
data.put("userType", userEntity.getUserType());
HashSet<Integer> set = new HashSet<>();
set.add(0);
set.add(2);
set.add(3);
if (ObjectUtils.isEmpty(userEntity.getUserType()) || !set.contains(userEntity.getUserType())) {
throw new AppException("当前用户不支持H5登录!");
}
userEntity.setLoginTime(System.currentTimeMillis());
userEntity.setToken(IdUtil.fastSimpleUUID());
userEntity.setExpireTime(DateUtils.addCurrDate(3).getTime());
String token = authTokenService.createToken(userEntity);
data.put("token", token);
if (!ObjectUtils.isEmpty(loginForm.getDingCode())) {
//更新绑定钉钉
userEntity.setDingUserId(loginForm.getDingCode());
userService.getUserDao().update(userEntity);
}
ret.put(KEY_RESULT_DATA, data);
ret.put(KEY_RESULT_CODE, VALUE_RESULT_SUCCESS);
ret.put(KEY_RESULT_MSG, "用户登录系统成功!");
return ret.toJSONString();
} catch (Exception e) {
log.error("h5 login error ", e);
ret.put(KEY_RESULT_CODE, VALUE_RESULT_FAILURE);SyncDoorsEventTaskImpl
ret.put(KEY_RESULT_MSG, super.convertException(e));SyncDoorsEventTaskImpl
return ret.toJSONString();
}*/
}
@RequestMapping("logout")
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment