fix&todo: ClassCopyException补丁优化,张:roleChangeUser部分存在漏洞

This commit is contained in:
筱锋xiao_lfeng 2024-01-20 00:38:12 +08:00
parent 23e888138d
commit 92e6c2b0a7
No known key found for this signature in database
GPG Key ID: F693AA12AABBFA87
6 changed files with 16 additions and 18 deletions

View File

@ -1,6 +1,5 @@
package com.jsl.oa.controllers; package com.jsl.oa.controllers;
import com.jsl.oa.exception.ClassCopyException;
import com.jsl.oa.model.voData.UserAddVo; import com.jsl.oa.model.voData.UserAddVo;
import com.jsl.oa.model.voData.UserAllCurrentVO; import com.jsl.oa.model.voData.UserAllCurrentVO;
import com.jsl.oa.model.voData.UserEditProfileVO; import com.jsl.oa.model.voData.UserEditProfileVO;
@ -166,7 +165,7 @@ public class UserController {
@PutMapping("/user/edit") @PutMapping("/user/edit")
public BaseResponse userEdit(@RequestBody @Validated UserEditVo userEditVo, BindingResult bindingResult, HttpServletRequest request) throws ClassCopyException { public BaseResponse userEdit(@RequestBody @Validated UserEditVo userEditVo, BindingResult bindingResult, HttpServletRequest request) {
// 判断是否有参数错误 // 判断是否有参数错误
if (bindingResult.hasErrors()) { if (bindingResult.hasErrors()) {
return ResultUtil.error(ErrorCode.REQUEST_BODY_ERROR, Processing.getValidatedErrorList(bindingResult)); return ResultUtil.error(ErrorCode.REQUEST_BODY_ERROR, Processing.getValidatedErrorList(bindingResult));
@ -176,7 +175,7 @@ public class UserController {
@GetMapping("/user/profile/get") @GetMapping("/user/profile/get")
public BaseResponse userProfileGet(HttpServletRequest request) throws ClassCopyException { public BaseResponse userProfileGet(HttpServletRequest request) {
return userService.userProfileGet(request); return userService.userProfileGet(request);
} }
} }

View File

@ -1,10 +1,9 @@
package com.jsl.oa.exception; package com.jsl.oa.exception;
import com.jsl.oa.utils.ErrorCode; import com.jsl.oa.utils.ErrorCode;
import org.jetbrains.annotations.NotNull;
public class ClassCopyException extends IllegalAccessException { public class ClassCopyException extends BusinessException {
public ClassCopyException(@NotNull ErrorCode errorCode) { public ClassCopyException() {
super(errorCode.getOutput() + "|" + errorCode.getMessage()); super(ErrorCode.CLASS_COPY_EXCEPTION);
} }
} }

View File

@ -1,6 +1,5 @@
package com.jsl.oa.services; package com.jsl.oa.services;
import com.jsl.oa.exception.ClassCopyException;
import com.jsl.oa.model.doData.UserDO; import com.jsl.oa.model.doData.UserDO;
import com.jsl.oa.model.voData.UserAddVo; import com.jsl.oa.model.voData.UserAddVo;
import com.jsl.oa.model.voData.UserAllCurrentVO; import com.jsl.oa.model.voData.UserAllCurrentVO;
@ -87,10 +86,10 @@ public interface UserService {
BaseResponse userAdd(UserAddVo userAddVo, HttpServletRequest request); BaseResponse userAdd(UserAddVo userAddVo, HttpServletRequest request);
BaseResponse userEdit(UserEditVo userEditVo, HttpServletRequest request) throws ClassCopyException; BaseResponse userEdit(UserEditVo userEditVo, HttpServletRequest request);
BaseResponse userProfileGet(HttpServletRequest request) throws ClassCopyException; BaseResponse userProfileGet(HttpServletRequest request);
} }

View File

@ -42,7 +42,10 @@ public class RoleServiceImpl implements RoleService {
@Override @Override
public BaseResponse roleChangeUser(HttpServletRequest request, Long uid, Long rid) { public BaseResponse roleChangeUser(HttpServletRequest request, Long uid, Long rid) {
if (Processing.checkUserIsAdmin(request, roleDAO.roleMapper)) { if (Processing.checkUserIsAdmin(request, roleDAO.roleMapper)) {
if(!roleDAO.roleChangeUser(uid, rid)){ // TODO: 2023-01-20|List:10002-未判断用户是否存在
// TODO: 2023-01-20|List:10003-保险起见默认用户主键为 1 的用户为超级管理员
// 不可以修改自己权限组避免修改后不存在管理员无管理组
if (!roleDAO.roleChangeUser(uid, rid)) {
return ResultUtil.error(ErrorCode.DATABASE_UPDATE_ERROR); return ResultUtil.error(ErrorCode.DATABASE_UPDATE_ERROR);
} }
return ResultUtil.success(); return ResultUtil.success();
@ -84,8 +87,7 @@ public class RoleServiceImpl implements RoleService {
// 判断是否存在该 Role // 判断是否存在该 Role
if (getRole != null) { if (getRole != null) {
// 替换 Role 信息 // 替换 Role 信息
getRole.setRoleName(roleEditVO.getName()) getRole.setRoleName(roleEditVO.getName()).setDisplayName(roleEditVO.getDisplayName());
.setDisplayName(roleEditVO.getDisplayName());
// 更新 Role 信息 // 更新 Role 信息
if (roleDAO.roleEdit(getRole)) { if (roleDAO.roleEdit(getRole)) {
return ResultUtil.success(); return ResultUtil.success();

View File

@ -1,7 +1,6 @@
package com.jsl.oa.services.impl; package com.jsl.oa.services.impl;
import com.jsl.oa.dao.UserDAO; import com.jsl.oa.dao.UserDAO;
import com.jsl.oa.exception.ClassCopyException;
import com.jsl.oa.mapper.RoleMapper; import com.jsl.oa.mapper.RoleMapper;
import com.jsl.oa.model.doData.RoleUserDO; import com.jsl.oa.model.doData.RoleUserDO;
import com.jsl.oa.model.doData.UserCurrentDO; import com.jsl.oa.model.doData.UserCurrentDO;
@ -165,7 +164,7 @@ public class UserServiceImpl implements UserService {
@Override @Override
public BaseResponse userEdit(UserEditVo userEditVo, HttpServletRequest request) throws ClassCopyException { public BaseResponse userEdit(UserEditVo userEditVo, HttpServletRequest request) {
//检测用户是否为管理员 //检测用户是否为管理员
BaseResponse checkManagerResult = isManager(request); BaseResponse checkManagerResult = isManager(request);
if (checkManagerResult.getCode() != 200) { if (checkManagerResult.getCode() != 200) {
@ -188,7 +187,7 @@ public class UserServiceImpl implements UserService {
} }
@Override @Override
public BaseResponse userProfileGet(HttpServletRequest request) throws ClassCopyException { public BaseResponse userProfileGet(HttpServletRequest request) {
// 获取用户Id // 获取用户Id
UserDO userDO = userDAO.getUserById(Processing.getAuthHeaderToUserId(request)); UserDO userDO = userDAO.getUserById(Processing.getAuthHeaderToUserId(request));
UserProfile userProfile = new UserProfile(); UserProfile userProfile = new UserProfile();

View File

@ -219,8 +219,8 @@ public class Processing {
targetField.set(target, value); targetField.set(target, value);
} }
} catch (IllegalAccessException e) { } catch (IllegalAccessException ignored) {
throw new ClassCopyException(ErrorCode.CLASS_COPY_EXCEPTION); throw new ClassCopyException();
} }
return null; return null;
} }