Merge remote-tracking branch 'origin/master'

This commit is contained in:
176yunxuan 2024-01-20 17:18:03 +08:00
commit 3c77c5047c
24 changed files with 358 additions and 193 deletions

View File

@ -6,6 +6,7 @@ import com.jsl.oa.services.UserService;
import lombok.RequiredArgsConstructor;
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.jetbrains.annotations.NotNull;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@ -25,12 +26,7 @@ public class ShiroConfiguration {
shiroFilterFactoryBean.setSecurityManager(securityManager);
// 配置过滤器规则
Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
filterChainDefinitionMap.put("/auth/**/**", "anon"); // 登录接口允许匿名访问
filterChainDefinitionMap.put("/unauthorized", "anon"); // 未授权接口允许匿名访问
filterChainDefinitionMap.put("/", "anon"); // 首页允许匿名访问
filterChainDefinitionMap.put("/info/header-image/get", "anon"); // 信息接口允许匿名访问
filterChainDefinitionMap.put("/**/**", "authc"); // 其他接口一律拦截(需要Token)
Map<String, String> filterChainDefinitionMap = setFilterChain();
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
@ -56,4 +52,18 @@ public class ShiroConfiguration {
public MyRealm myRealm() {
return new MyRealm();
}
@NotNull
private static Map<String, String> setFilterChain() {
Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
filterChainDefinitionMap.put("/auth/**/**", "anon"); // 登录接口允许匿名访问
filterChainDefinitionMap.put("/unauthorized", "anon"); // 未授权接口允许匿名访问
filterChainDefinitionMap.put("/", "anon"); // 首页允许匿名访问
filterChainDefinitionMap.put("/info/header-image/get", "anon"); // 信息接口允许匿名访问
filterChainDefinitionMap.put("/info/header-user/get", "anon"); // 信息接口允许匿名访问
filterChainDefinitionMap.put("/project/header/get", "anon"); // 信息接口允许匿名访问
filterChainDefinitionMap.put("/project/get", "anon"); // 信息接口允许匿名访问
filterChainDefinitionMap.put("/**/**", "authc"); // 其他接口一律拦截(需要Token)
return filterChainDefinitionMap;
}
}

View File

@ -10,6 +10,7 @@ import com.jsl.oa.utils.ErrorCode;
import com.jsl.oa.utils.Processing;
import com.jsl.oa.utils.ResultUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.NotNull;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
@ -33,6 +34,7 @@ import java.util.regex.Pattern;
* @see ResultUtil
* @since v1.0.0
*/
@Slf4j
@RestController
@RequiredArgsConstructor
public class AuthController {
@ -49,6 +51,7 @@ public class AuthController {
*/
@PostMapping("/auth/register")
public BaseResponse authRegister(@RequestBody @Validated UserRegisterVO userRegisterVO, @NotNull BindingResult bindingResult) {
log.info("请求接口[POST]: /auth/register");
// 判断是否有参数错误
if (bindingResult.hasErrors()) {
return ResultUtil.error(ErrorCode.REQUEST_BODY_ERROR, Processing.getValidatedErrorList(bindingResult));
@ -69,6 +72,7 @@ public class AuthController {
*/
@PostMapping("/auth/login")
public BaseResponse authLogin(@RequestBody @Validated UserLoginVO userLoginVO, @NotNull BindingResult bindingResult) {
log.info("请求接口[POST]: /auth/login");
// 判断是否有参数错误
if (bindingResult.hasErrors()) {
return ResultUtil.error(ErrorCode.REQUEST_BODY_ERROR, Processing.getValidatedErrorList(bindingResult));
@ -88,6 +92,7 @@ public class AuthController {
*/
@GetMapping("/auth/email/code")
public BaseResponse authSendEmailCode(@RequestParam String email) {
log.info("请求接口[GET]: /auth/email/code");
if (email != null) {
if (Pattern.matches("^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$", email)) {
return authService.authLoginSendEmailCode(email);
@ -101,6 +106,7 @@ public class AuthController {
@GetMapping("/auth/login/email")
public BaseResponse authLoginByEmail(@RequestParam String email, @RequestParam String code) {
log.info("请求接口[GET]: /auth/login/email");
if (email != null && code != null && !email.isEmpty() && !code.isEmpty()) {
System.out.println("测试");
if (Pattern.matches("^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$", email)) {
@ -128,11 +134,14 @@ public class AuthController {
*/
@GetMapping("/auth/logout")
public BaseResponse authLogout(HttpServletRequest request) {
log.info("请求接口[GET]: /auth/logout");
return authService.authLogout(request);
}
@PutMapping("/auth/password")
public BaseResponse authChangePassword(@RequestBody @Validated UserChangePasswordVO userChangePasswordVO, HttpServletRequest request, @NotNull BindingResult bindingResult) {
log.info("请求接口[PUT]: /auth/password");
// 判断是否有参数错误
if (bindingResult.hasErrors()) {
return ResultUtil.error(ErrorCode.REQUEST_BODY_ERROR, Processing.getValidatedErrorList(bindingResult));
}
@ -141,6 +150,8 @@ public class AuthController {
@PutMapping("auth/password/forget")
public BaseResponse authForgetPassword(@RequestBody @Validated UserForgetPasswordVO userForgetPasswordVO, @NotNull BindingResult bindingResult) {
log.info("请求接口[PUT]: /auth/password/forget");
// 判断是否有参数错误
if (bindingResult.hasErrors()) {
return ResultUtil.error(ErrorCode.REQUEST_BODY_ERROR, Processing.getValidatedErrorList(bindingResult));
}

View File

@ -75,7 +75,7 @@ public class InfoController {
}
@GetMapping("info/header-user/get")
public BaseResponse infoGetHeaderUser(@RequestParam String order,@RequestParam String orderBy,HttpServletRequest request){
public BaseResponse infoGetHeaderUser(@RequestParam(required = false) String order,@RequestParam(required = false) String orderBy,HttpServletRequest request){
log.info("请求接口[GET]: /info/header-user/get");
return infoService.getHeaderUser(request,order,orderBy);
}

View File

@ -1,7 +1,6 @@
package com.jsl.oa.controllers;
import com.jsl.oa.model.voData.PermissionEditVo;
import com.jsl.oa.model.voData.UserEditVo;
import com.jsl.oa.services.PermissionService;
import com.jsl.oa.utils.BaseResponse;
import com.jsl.oa.utils.ErrorCode;

View File

@ -1,8 +1,6 @@
package com.jsl.oa.controllers;
import com.jsl.oa.model.doData.info.ProjectShowDO;
import com.jsl.oa.model.voData.ProjectInfoVO;
import com.jsl.oa.model.voData.business.info.CarouselVO;
import com.jsl.oa.model.voData.business.info.ProjectShowVO;
import com.jsl.oa.services.ProjectService;
import com.jsl.oa.utils.BaseResponse;
@ -32,7 +30,7 @@ public class ProjectController {
}
@GetMapping("/project/get")
public BaseResponse projectGet(){
public BaseResponse projectGet() {
return projectService.get();
}
@ -54,7 +52,7 @@ public class ProjectController {
}
@PutMapping("/project/header/edit")
public BaseResponse projectEditHeader(@RequestBody @Validated ProjectShowVO projectShowVO,@RequestParam Integer id,HttpServletRequest request,@NotNull BindingResult bindingResult) {
public BaseResponse projectEditHeader(@RequestBody @Validated ProjectShowVO projectShowVO, @RequestParam Integer id, HttpServletRequest request, @NotNull BindingResult bindingResult) {
log.info("请求接口[PUT]: /project/header/del");
// 参数校验
if (bindingResult.hasErrors()) {
@ -70,13 +68,14 @@ public class ProjectController {
@DeleteMapping("/project/header/del")
public BaseResponse projectDelHeader(@RequestParam Integer id,HttpServletRequest request) {
public BaseResponse projectDelHeader(@RequestParam Integer id, HttpServletRequest request) {
log.info("请求接口[Delete]: /project/header/del");
return projectService.delHeader(id,request);
return projectService.delHeader(id, request);
}
@PostMapping("/project/add")
public BaseResponse projectAdd(@RequestBody @Validated ProjectInfoVO projectAdd, BindingResult bindingResult){
public BaseResponse projectAdd(@RequestBody @Validated ProjectInfoVO projectAdd, @NotNull BindingResult bindingResult) {
log.info("请求接口[PUT]: /project/header/del");
// 判断是否有参数错误
if (bindingResult.hasErrors()) {
return ResultUtil.error(ErrorCode.REQUEST_BODY_ERROR, Processing.getValidatedErrorList(bindingResult));
@ -85,7 +84,8 @@ public class ProjectController {
}
@PutMapping("/project/edit")
public BaseResponse projectEdit(@RequestBody @Validated ProjectInfoVO projectEdit, BindingResult bindingResult){
public BaseResponse projectEdit(@RequestBody @Validated ProjectInfoVO projectEdit, @NotNull BindingResult bindingResult) {
log.info("请求接口[PUT]: /project/header/del");
// 判断是否有参数错误
if (bindingResult.hasErrors()) {
return ResultUtil.error(ErrorCode.REQUEST_BODY_ERROR, Processing.getValidatedErrorList(bindingResult));
@ -94,7 +94,8 @@ public class ProjectController {
}
@GetMapping("/project/cut/user")
public BaseResponse projectGetUserInCutting(@RequestParam Long uid){
public BaseResponse projectGetUserInCutting(@RequestParam Long uid) {
log.info("请求接口[PUT]: /project/header/del");
// 判断是否有参数错误
if (uid == null) {
return ResultUtil.error(ErrorCode.PARAMETER_ERROR);
@ -103,11 +104,12 @@ public class ProjectController {
}
@PostMapping("/project/cut/user/add")
public BaseResponse projectAddUserForCutting(@RequestParam Long uid,@RequestParam Long pid){
public BaseResponse projectAddUserForCutting(@RequestParam Long uid, @RequestParam Long pid) {
log.info("请求接口[PUT]: /project/header/del");
// 判断是否有参数错误
if (uid == null || pid == null) {
return ResultUtil.error(ErrorCode.PARAMETER_ERROR);
}
return projectService.projectAddUserForCutting(uid,pid);
return projectService.projectAddUserForCutting(uid, pid);
}
}

View File

@ -11,7 +11,6 @@ import com.jsl.oa.utils.ResultUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@ -44,7 +43,7 @@ public class RoleController {
* @return {@link BaseResponse}
*/
@GetMapping("/role/get")
public BaseResponse roleGet(HttpServletRequest request, @RequestParam @Nullable String id) {
public BaseResponse roleGet(HttpServletRequest request, @RequestParam(required = false) String id) {
log.info("请求接口[GET]: /role/get");
return roleService.roleGet(request, id);
}

View File

@ -3,13 +3,14 @@ package com.jsl.oa.controllers;
import com.jsl.oa.model.voData.UserAddVo;
import com.jsl.oa.model.voData.UserAllCurrentVO;
import com.jsl.oa.model.voData.UserEditProfileVO;
import com.jsl.oa.model.voData.UserEditVo;
import com.jsl.oa.model.voData.UserEditVO;
import com.jsl.oa.services.UserService;
import com.jsl.oa.utils.BaseResponse;
import com.jsl.oa.utils.ErrorCode;
import com.jsl.oa.utils.Processing;
import com.jsl.oa.utils.ResultUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.NotNull;
import org.springframework.lang.Nullable;
import org.springframework.validation.BindingResult;
@ -30,6 +31,7 @@ import java.util.regex.Pattern;
* @see UserEditProfileVO
* @since v1.0.0
*/
@Slf4j
@RestController
@RequiredArgsConstructor
public class UserController {
@ -95,10 +97,6 @@ public class UserController {
*/
@GetMapping("/user/current")
public BaseResponse userCurrent(HttpServletRequest request, @RequestParam @Nullable String id, @RequestParam @Nullable String username, @RequestParam @Nullable String email, @RequestParam @Nullable String phone) {
// 判断是否有参数错误
if (id == null && username == null && email == null && phone == null) {
return ResultUtil.error(ErrorCode.PARAMETER_ERROR);
}
// 检查数据是否有问题
ArrayList<String> arrayForError = new ArrayList<>();
if (id != null && !id.isEmpty()) {
@ -165,12 +163,13 @@ public class UserController {
@PutMapping("/user/edit")
public BaseResponse userEdit(@RequestBody @Validated UserEditVo userEditVo, BindingResult bindingResult, HttpServletRequest request) {
public BaseResponse userEdit(@RequestBody @Validated UserEditVO userEditVO, BindingResult bindingResult, HttpServletRequest request) {
log.info("请求接口[PUT]: /user/edit");
// 判断是否有参数错误
if (bindingResult.hasErrors()) {
return ResultUtil.error(ErrorCode.REQUEST_BODY_ERROR, Processing.getValidatedErrorList(bindingResult));
}
return userService.userEdit(userEditVo,request);
return userService.userEdit(userEditVO,request);
}

View File

@ -35,7 +35,7 @@ public class InfoDAO {
public CarouselDO getCarousel() {
String getCarouselSql = infoMapper.getCarousel();
CarouselDO getCarousel = null;
if (!getCarouselSql.equals("{}")) {
if (getCarouselSql != null && !getCarouselSql.equals("{}")) {
getCarousel = gson.fromJson(getCarouselSql, CarouselDO.class);
}
if (getCarousel == null) {

View File

@ -4,7 +4,6 @@ import com.google.gson.Gson;
import com.jsl.oa.mapper.ProjectMapper;
import com.jsl.oa.model.doData.ProjectCuttingDO;
import com.jsl.oa.model.doData.ProjectDO;
import com.jsl.oa.model.doData.info.CarouselDO;
import com.jsl.oa.model.doData.info.ProjectShowDO;
import com.jsl.oa.model.voData.ProjectInfoVO;
import com.jsl.oa.utils.BaseResponse;
@ -35,9 +34,7 @@ public class ProjectDAO {
}
public boolean isExistProject(Long id) {
if(projectMapper.getProjectById(id)==null) {
return false;
}else return true;
return projectMapper.getProjectById(id) != null;
}
public List<ProjectCuttingDO> projectGetUserInCutting(Long uid) {
@ -45,13 +42,13 @@ public class ProjectDAO {
}
public void projectAddUserForCutting(Long uid, Long pid) {
projectMapper.projectAddUserInCutting(uid,pid);
projectMapper.projectAddUserInCutting(uid, pid);
}
public ProjectShowDO getHeader() {
String getProjectShowSql = projectMapper.getHeader();
ProjectShowDO getProjectShow = null;
if (!getProjectShowSql.equals("{}")) {
if (getProjectShowSql != null && !getProjectShowSql.equals("{}")) {
getProjectShow = gson.fromJson(getProjectShowSql, ProjectShowDO.class);
}
if (getProjectShow == null) {

View File

@ -13,8 +13,8 @@ import java.util.List;
public class RoleDAO {
public final RoleMapper roleMapper;
public void roleAddUser(Long uid,Long rid) {
roleMapper.roleAddUser(uid,rid);
public void roleAddUser(Long uid, Long rid) {
roleMapper.roleAddUser(uid, rid);
}
public void roleRemoveUser(Long uid) {
@ -35,7 +35,9 @@ public class RoleDAO {
return roleMapper.getRole();
}
public void roleAdd(RoleDO roleDO) { roleMapper.roleAdd(roleDO);}
public void roleAdd(RoleDO roleDO) {
roleMapper.roleAdd(roleDO);
}
public boolean roleEdit(RoleDO getRole) {
return roleMapper.roleEdit(getRole);
@ -45,12 +47,12 @@ public class RoleDAO {
return roleMapper.roleDelete(id);
}
public boolean isExistRoleByRoleName(String roleName){
public boolean isExistRoleByRoleName(String roleName) {
RoleDO roleDO = roleMapper.getRoleByRoleName(roleName);
return roleDO != null;
}
public boolean roleChangeUser(Long uid, Long rid) {
return roleMapper.roleChangeUser(uid,rid);
return roleMapper.roleChangeUser(uid, rid);
}
}

View File

@ -7,15 +7,20 @@ import com.jsl.oa.model.doData.RoleUserDO;
import com.jsl.oa.model.doData.UserCurrentDO;
import com.jsl.oa.model.doData.UserDO;
import com.jsl.oa.model.voData.UserAllCurrentVO;
import com.jsl.oa.model.voData.UserCurrentBackVO;
import com.jsl.oa.model.voData.UserEditProfileVO;
import com.jsl.oa.utils.Processing;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull;
import org.springframework.stereotype.Component;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;
@Slf4j
@Component
@RequiredArgsConstructor
public class UserDAO {
@ -50,9 +55,7 @@ public class UserDAO {
* @return
*/
public Boolean isExistUser(Long id) {
if (userMapper.getUserById(id) == null) {
return false;
} else return true;
return userMapper.getUserById(id) != null;
}
/**
@ -77,15 +80,23 @@ public class UserDAO {
userMapper.userEditProfile(userEditProfileVO);
}
public List<UserCurrentDO> userCurrentAll(UserAllCurrentVO userAllCurrentVO) {
List<UserCurrentDO> userCurrentDO = userMapper.getAllUser(userAllCurrentVO);
return this.userCurrentAll(userCurrentDO);
public List<UserCurrentBackVO> userCurrentAll(UserAllCurrentVO userAllCurrentVO) {
List<UserDO> userCurrentDO = userMapper.getAllUser(userAllCurrentVO);
List<UserCurrentBackVO> userCurrentDOList = new ArrayList<>();
userCurrentDO.forEach(it -> {
userCurrentDOList.add(Processing.ReturnUserInfo(it, roleMapper));
});
return userCurrentDOList;
}
public List<UserCurrentDO> userCurrentAllLike(UserAllCurrentVO userAllCurrentVO) {
List<UserCurrentDO> userCurrentDO = userMapper.getAllUserBySearch(userAllCurrentVO);
return this.userCurrentAll(userCurrentDO);
public List<UserCurrentBackVO> userCurrentAllLike(UserAllCurrentVO userAllCurrentVO) {
List<UserDO> userCurrentDO = userMapper.getAllUserBySearch(userAllCurrentVO);
List<UserCurrentBackVO> userCurrentDOList = new ArrayList<>();
userCurrentDO.forEach(it -> {
userCurrentDOList.add(Processing.ReturnUserInfo(it, roleMapper));
});
return userCurrentDOList;
}
@Contract("_ -> param1")
@ -172,6 +183,7 @@ public class UserDAO {
}
public void userEdit(UserDO userDO) {
log.info("> 执行 DAO 层 userEdit 方法");
userMapper.updateUser(userDO);
}
@ -207,6 +219,7 @@ public class UserDAO {
* @Param userId
**/
public UserDO getUserById(Long userId) {
log.info("> 执行 DAO 层 getUserById 方法");
return userMapper.getUserById(userId);
}
@ -241,4 +254,12 @@ public class UserDAO {
public List<UserDO> getRecommendUser(){
return userMapper.getRecommendUser();
}
public UserDO getUserByEmail(String email) {
return userMapper.getUserByEmail(email);
}
public UserDO getUserByPhone(String phone) {
return userMapper.getUserByPhone(phone);
}
}

View File

@ -1,6 +1,5 @@
package com.jsl.oa.mapper;
import com.jsl.oa.dao.UserDAO;
import com.jsl.oa.model.doData.RoleDO;
import com.jsl.oa.model.doData.RoleUserDO;
import com.jsl.oa.model.doData.UserCurrentDO;
@ -52,14 +51,14 @@ public interface UserMapper {
boolean updateUserPassword(Long id, String newPassword);
@Select("SELECT * FROM organize_oa.oa_user ORDER BY `id` DESC LIMIT #{page},#{limit}")
List<UserCurrentDO> getAllUser(UserAllCurrentVO userAllCurrentVO);
List<UserDO> getAllUser(UserAllCurrentVO userAllCurrentVO);
@Select("SELECT * FROM organize_oa.oa_user " +
"WHERE username LIKE CONCAT('%',#{search},'%') " +
"OR email LIKE CONCAT('%',#{search},'%') " +
"OR phone LIKE CONCAT('%',#{search},'%') " +
"ORDER BY `id` LIMIT #{page},#{limit}")
List<UserCurrentDO> getAllUserBySearch(UserAllCurrentVO userAllCurrentVO);
List<UserDO> getAllUserBySearch(UserAllCurrentVO userAllCurrentVO);
@Select("SELECT * FROM organize_oa.oa_user WHERE id = #{uid}")
UserCurrentDO getUserCurrentById(Long uid);
@ -92,4 +91,9 @@ public interface UserMapper {
void updateUser(UserDO userDO);
@Select("SELECT * FROM organize_oa.oa_user WHERE email = #{email}")
UserDO getUserByEmail(String email);
@Select("SELECT * FROM organize_oa.oa_user WHERE phone = #{phone}")
UserDO getUserByPhone(String phone);
}

View File

@ -0,0 +1,54 @@
package com.jsl.oa.model.voData;
import lombok.Data;
import lombok.experimental.Accessors;
import java.sql.Timestamp;
import java.util.List;
/**
* <h1>用户注册成功UserDO自定义实体类</h1>
* <hr/>
* 用于处理用户注册表单输出的数据
*
* @author 筱锋xiao_lfeng
* @version v1.1.0
* @since v1.1.0
*/
@Data
@Accessors(chain = true)
public class UserCurrentBackVO {
private ReturnUser user;
private ReturnUserRole role;
private List<String> permission;
@Data
@Accessors(chain = true)
public static class ReturnUserRole {
private Long rid;
}
@Data
@Accessors(chain = true)
public static class ReturnUser {
private Long id;
private String jobId;
private String username;
private String address;
private String phone;
private String email;
private Short age;
private String signature;
private String avatar;
private String nickname;
private Short sex;
private Boolean enabled;
private Boolean accountNoExpired;
private Boolean credentialsNoExpired;
private Boolean recommend;
private Boolean accountNoLocked;
private String description;
private Timestamp createdAt;
private Timestamp updatedAt;
}
}

View File

@ -2,15 +2,21 @@ package com.jsl.oa.model.voData;
import lombok.Data;
import javax.validation.constraints.*;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
@Data
public class UserEditVo {
public class UserEditVO {
@NotNull
private Long id;
@NotNull
private String username;
private String address;
@Pattern(regexp = "^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\\d{8}$", message = "电话格式错误")
@ -28,7 +34,16 @@ public class UserEditVo {
private String avatar;
private String nickname;
private String description;
@NotNull
private Boolean enabled;
@NotNull
private Boolean isExpired;
@NotNull
private Boolean passwordExpired;
@NotNull
private Boolean recommend;
@NotNull
private Boolean isLocked;
}

View File

@ -1,10 +1,10 @@
package com.jsl.oa.model.voData;
import com.jsl.oa.model.doData.RoleUserDO;
import lombok.Getter;
import lombok.Setter;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.List;
/**
* <h1>用户注册成功UserDO自定义实体类</h1>
* <hr/>
@ -14,17 +14,27 @@ import lombok.experimental.Accessors;
* @version v1.1.0
* @since v1.1.0
*/
@Getter
@Setter
@Data
@Accessors(chain = true)
public class UserReturnBackVO {
private ReturnUser user;
private ReturnUserRole role;
private String token;
private List<String> permission;
@Data
@Accessors(chain = true)
public static class ReturnUserRole {
private Long rid;
}
@Data
@Accessors(chain = true)
public static class ReturnUser {
private Long id;
private String jobId;
private String username;
private String address;
private String phone;
private String email;
private Short age;
private Short sex;
private String token;
private RoleUserDO role;
}
}

View File

@ -4,7 +4,7 @@ import com.jsl.oa.model.doData.UserDO;
import com.jsl.oa.model.voData.UserAddVo;
import com.jsl.oa.model.voData.UserAllCurrentVO;
import com.jsl.oa.model.voData.UserEditProfileVO;
import com.jsl.oa.model.voData.UserEditVo;
import com.jsl.oa.model.voData.UserEditVO;
import com.jsl.oa.utils.BaseResponse;
import javax.servlet.http.HttpServletRequest;
@ -86,7 +86,7 @@ public interface UserService {
BaseResponse userAdd(UserAddVo userAddVo, HttpServletRequest request);
BaseResponse userEdit(UserEditVo userEditVo, HttpServletRequest request);
BaseResponse userEdit(UserEditVO userEditVo, HttpServletRequest request);
BaseResponse userProfileGet(HttpServletRequest request);

View File

@ -12,12 +12,14 @@ import com.jsl.oa.utils.*;
import com.jsl.oa.utils.redis.EmailRedisUtil;
import com.jsl.oa.utils.redis.TokenRedisUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.NotNull;
import org.mindrot.jbcrypt.BCrypt;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletRequest;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.regex.Pattern;
/**
@ -29,6 +31,7 @@ import java.util.regex.Pattern;
* @see AuthService
* @since v1.0.0
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class AuthServiceImpl implements AuthService {
@ -78,15 +81,19 @@ public class AuthServiceImpl implements AuthService {
UserDO userDO;
if (Pattern.matches("^[0-9A-Za-z_]{3,40}$", userLoginVO.getUser())) {
// 是否为用户名
log.info("userLogin: 用户名登陆");
userDO = userMapper.getUserInfoByUsername(userLoginVO.getUser());
} else if (Pattern.matches("^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\\d{8}$", userLoginVO.getUser())) {
// 是否为手机号
log.info("userLogin: 手机号登陆");
userDO = userMapper.getUserInfoByPhone(userLoginVO.getUser());
} else if (Pattern.matches("^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$", userLoginVO.getUser())) {
// 是否为邮箱
log.info("userLogin: 邮箱登陆");
return ResultUtil.error(ErrorCode.EMAIL_LOGIN_NOT_SUPPORT);
} else {
// 工号
log.info("userLogin: 工号登陆");
userDO = userMapper.getUserByJobId(userLoginVO.getUser());
}
if (userDO != null) {
@ -236,15 +243,16 @@ public class AuthServiceImpl implements AuthService {
} else {
getUserRole.setUid(null);
}
userReturnBackVO.setAddress(userDO.getAddress())
.setAge(userDO.getAge())
.setEmail(userDO.getEmail())
userReturnBackVO.setUser(new UserReturnBackVO.ReturnUser()
.setId(userDO.getId())
.setJobId(userDO.getJobId())
.setPhone(userDO.getPhone())
.setSex(userDO.getSex())
.setUsername(userDO.getUsername())
.setEmail(userDO.getEmail())
.setPhone(userDO.getPhone()))
.setRole(new UserReturnBackVO.ReturnUserRole()
.setRid(getUserRole.getRid()))
.setToken(token)
.setRole(getUserRole);
.setPermission(new ArrayList<>());
return ResultUtil.success("登陆成功", userReturnBackVO);
}
}

View File

@ -3,7 +3,6 @@ package com.jsl.oa.services.impl;
import com.jsl.oa.dao.InfoDAO;
import com.jsl.oa.dao.UserDAO;
import com.jsl.oa.mapper.RoleMapper;
import com.jsl.oa.model.doData.UserCurrentDO;
import com.jsl.oa.model.doData.UserDO;
import com.jsl.oa.model.doData.info.CarouselDO;
import com.jsl.oa.model.voData.UserProfileVo;
@ -144,31 +143,31 @@ public class InfoServiceImpl implements InfoService {
@Override
public BaseResponse getHeaderUser(HttpServletRequest request, String order, String orderBy) {
// 用户权限校验
if (!Processing.checkUserIsAdmin(request, roleMapper)) {
return ResultUtil.error(ErrorCode.NOT_ADMIN);
// 默认无参数情况
if (order == null) {
order = "asc";
}
if (orderBy == null) {
orderBy = "userId";
}
// 检查参数是否错误
if( !(order.equals("asc")||order.equals("desc")) || !(orderBy.equals("userName")||orderBy.equals("userId")) ){
if (!(order.equals("asc") || order.equals("desc")) || !(orderBy.equals("userName") || orderBy.equals("userId"))) {
return ResultUtil.error(ErrorCode.PARAMETER_ERROR);
}
//获取用户信息
List<UserDO> userDOS = userDAO.getRecommendUser();
//进行排序
userDOS = Processing.orderUser(userDOS,order,orderBy);
Processing.orderUser(userDOS, order, orderBy);
//封装VO类
List<UserProfileVo> userProfileVos = new ArrayList<>();
for(UserDO userDO :userDOS){
for (UserDO userDO : userDOS) {
UserProfileVo userProfileVo = new UserProfileVo();
Processing.copyProperties(userDO,userProfileVo);
Processing.copyProperties(userDO, userProfileVo);
userProfileVo.setSex(Processing.getSex(userDO.getSex()));
userProfileVos.add(userProfileVo);
}
return ResultUtil.success(userProfileVos);
}
}

View File

@ -6,20 +6,17 @@ import com.jsl.oa.mapper.RoleMapper;
import com.jsl.oa.model.doData.ProjectCuttingDO;
import com.jsl.oa.model.doData.ProjectDO;
import com.jsl.oa.model.doData.UserDO;
import com.jsl.oa.model.doData.info.CarouselDO;
import com.jsl.oa.model.doData.info.ProjectShowDO;
import com.jsl.oa.model.voData.ProjectInfoVO;
import com.jsl.oa.model.voData.business.info.ProjectShowVO;
import com.jsl.oa.services.ProjectService;
import com.jsl.oa.services.UserService;
import com.jsl.oa.utils.BaseResponse;
import com.jsl.oa.utils.ErrorCode;
import com.jsl.oa.utils.Processing;
import com.jsl.oa.utils.ResultUtil;
import lombok.RequiredArgsConstructor;
import org.jetbrains.annotations.NotNull;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import javax.servlet.http.HttpServletRequest;
import java.sql.Timestamp;
@ -42,7 +39,7 @@ public class ProjectServiceImpl implements ProjectService {
}
@Override
public BaseResponse projectEdit(ProjectInfoVO projectEdit) {
public BaseResponse projectEdit(@NotNull ProjectInfoVO projectEdit) {
//判断项目是否存在
if(projectDAO.isExistProject(projectEdit.getId())) {
projectDAO.projectEdit(projectEdit);

View File

@ -7,7 +7,10 @@ import com.jsl.oa.model.doData.RoleDO;
import com.jsl.oa.model.voData.RoleAddVo;
import com.jsl.oa.model.voData.RoleEditVO;
import com.jsl.oa.services.RoleService;
import com.jsl.oa.utils.*;
import com.jsl.oa.utils.BaseResponse;
import com.jsl.oa.utils.ErrorCode;
import com.jsl.oa.utils.Processing;
import com.jsl.oa.utils.ResultUtil;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
@ -40,22 +43,21 @@ public class RoleServiceImpl implements RoleService {
@Override
public BaseResponse roleChangeUser(HttpServletRequest request, Long uid, Long rid) {
//检测用户是否存在
if(!userDAO.isExistUser(uid)){
if (!userDAO.isExistUser(uid)) {
return ResultUtil.error(ErrorCode.USER_NOT_EXIST);
}
//检测要改变的用户权限是否为自己
String token = request.getHeader("Authorization").replace("Bearer ", "");
if(uid == JwtUtil.getUserId(token)){
if (uid.equals(Processing.getAuthHeaderToUserId(request))) {
return ResultUtil.error(ErrorCode.USER_NOT_CHANGE_TO_THEMSELVES);
}
//检测用户权限是否为管理员
if (Processing.checkUserIsAdmin(request, roleDAO.roleMapper)) {
if (!roleDAO.roleChangeUser(uid, rid)) {
return ResultUtil.error(ErrorCode.DATABASE_UPDATE_ERROR);
}
if (roleDAO.roleChangeUser(uid, rid)) {
return ResultUtil.success();
} else {
return ResultUtil.error(ErrorCode.PLEASE_ASSIGN_ROLE_TO_USER);
}
} else return ResultUtil.error(ErrorCode.NOT_ADMIN);
}
@ -125,7 +127,6 @@ public class RoleServiceImpl implements RoleService {
} else {
return ResultUtil.error(ErrorCode.ROLE_NOT_FOUNDED);
}
}
@Override
@ -145,9 +146,6 @@ public class RoleServiceImpl implements RoleService {
}
//向数据库中插入数据
roleDAO.roleAdd(roleDO);
return ResultUtil.success();
}
}

View File

@ -2,13 +2,15 @@ package com.jsl.oa.services.impl;
import com.jsl.oa.dao.UserDAO;
import com.jsl.oa.mapper.RoleMapper;
import com.jsl.oa.model.doData.RoleUserDO;
import com.jsl.oa.model.doData.UserCurrentDO;
import com.jsl.oa.model.doData.UserDO;
import com.jsl.oa.model.voData.*;
import com.jsl.oa.services.UserService;
import com.jsl.oa.utils.*;
import com.jsl.oa.utils.BaseResponse;
import com.jsl.oa.utils.ErrorCode;
import com.jsl.oa.utils.Processing;
import com.jsl.oa.utils.ResultUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.NotNull;
import org.mindrot.jbcrypt.BCrypt;
import org.springframework.stereotype.Service;
@ -18,6 +20,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
@Slf4j
@Service
@RequiredArgsConstructor
public class UserServiceImpl implements UserService {
@ -80,7 +83,7 @@ public class UserServiceImpl implements UserService {
userAllCurrentVO.setPage((userAllCurrentVO.getPage() - 1) * userAllCurrentVO.getLimit());
}
// 检查是否处于模糊查询
List<UserCurrentDO> userAllCurrentVOList;
List<UserCurrentBackVO> userAllCurrentVOList;
if (userAllCurrentVO.getSearch() != null && !userAllCurrentVO.getSearch().isEmpty()) {
if (Pattern.matches("^[0-9A-Za-z_@]+$", userAllCurrentVO.getSearch())) {
userAllCurrentVOList = userDAO.userCurrentAllLike(userAllCurrentVO);
@ -101,39 +104,46 @@ public class UserServiceImpl implements UserService {
@Override
public BaseResponse userCurrent(HttpServletRequest request, String id, String username, String email, String phone) {
if (id == null && username == null && email == null && phone == null) {
// Token获取信息
UserDO userDO = userDAO.getUserById(Processing.getAuthHeaderToUserId(request));
if (userDO != null) {
return ResultUtil.success(Processing.ReturnUserInfo(userDO, roleMapper));
} else {
return ResultUtil.error(ErrorCode.USER_NOT_EXIST);
}
} else {
// 检查是否是管理员用户
if (!Processing.checkUserIsAdmin(request, roleMapper)) {
return ResultUtil.error(ErrorCode.NOT_ADMIN);
}
// 根据顺序优先级进行用户信息获取
UserCurrentDO userCurrentDO = null;
UserDO userDO = null;
if (id != null && !id.isEmpty()) {
userCurrentDO = userDAO.userCurrentById(Long.valueOf(id));
userDO = userDAO.getUserById(Long.valueOf(id));
} else if (username != null && !username.isEmpty()) {
userCurrentDO = userDAO.userCurrentByUsername(username);
userDO = userDAO.getUserInfoByUsername(username);
} else if (email != null && !email.isEmpty()) {
userCurrentDO = userDAO.userCurrentByEmail(email);
userDO = userDAO.getUserByEmail(email);
} else if (phone != null && !phone.isEmpty()) {
userCurrentDO = userDAO.userCurrentByPhone(phone);
userDO = userDAO.getUserByPhone(phone);
}
// 返回结果
if (userCurrentDO != null) {
return ResultUtil.success(userCurrentDO);
if (userDO != null) {
return ResultUtil.success(Processing.ReturnUserInfo(userDO, roleMapper));
} else {
return ResultUtil.error(ErrorCode.USER_NOT_EXIST);
}
}
}
@Override
public BaseResponse userAdd(UserAddVo userAddVo, HttpServletRequest request) {
//检测用户是否为管理员
BaseResponse checkManagerResult = isManager(request);
if (checkManagerResult.getCode() != 200) {
return checkManagerResult;
// 检测用户是否为管理员
if (!Processing.checkUserIsAdmin(request, roleMapper)) {
return ResultUtil.error(ErrorCode.NOT_ADMIN);
}
//如果用户不重复添加用户
if (!userDAO.isRepeatUser(userAddVo.getUsername())) {
// 生成工号
@ -164,22 +174,32 @@ public class UserServiceImpl implements UserService {
@Override
public BaseResponse userEdit(UserEditVo userEditVo, HttpServletRequest request) {
//检测用户是否为管理员
BaseResponse checkManagerResult = isManager(request);
if (checkManagerResult.getCode() != 200) {
return checkManagerResult;
public BaseResponse userEdit(UserEditVO userEditVO, HttpServletRequest request) {
log.info("> 执行 Service 层 userEdit 方法");
// 检测用户是否为管理员
if (!Processing.checkUserIsAdmin(request, roleMapper)) {
return ResultUtil.error(ErrorCode.NOT_ADMIN);
}
//根据id获取用户信息
UserDO userDO = userDAO.getUserById(userEditVo.getId());
UserDO userDO = userDAO.getUserById(userEditVO.getId());
if (userDO == null) {
return ResultUtil.error(ErrorCode.USER_NOT_EXIST);
}
//修改非空属性
Processing.copyProperties(userEditVo, userDO);
userDO.setAddress(userEditVO.getAddress())
.setPhone(userEditVO.getPhone())
.setEmail(userEditVO.getEmail())
.setAge(userEditVO.getAge())
.setSex(userEditVO.getSex())
.setSignature(userEditVO.getSignature())
.setAvatar(userEditVO.getAvatar())
.setNickname(userEditVO.getNickname())
.setDescription(userEditVO.getDescription())
.setEnabled(userEditVO.getEnabled())
.setAccountNoExpired(userEditVO.getIsExpired())
.setCredentialsNoExpired(userEditVO.getPasswordExpired())
.setRecommend(userEditVO.getRecommend())
.setAccountNoLocked(userEditVO.getIsLocked());
//向数据库中修改属性
userDAO.userEdit(userDO);
@ -195,29 +215,4 @@ public class UserServiceImpl implements UserService {
userProfileVo.setSex(Processing.getSex(userDO.getSex()));
return ResultUtil.success(userProfileVo);
}
/**
* @Description: 判断用户是否为管理员
* @Date: 2024/1/18
* @Param request: 请求头
**/
public BaseResponse isManager(HttpServletRequest request) {
//获取token
String originalAuthorization = request.getHeader("Authorization");
String token = originalAuthorization.replace("Bearer ", "");
//获取操作用户的权限
RoleUserDO roleUserDO = userDAO.getRoleFromUser(JwtUtil.getUserId(token));
//用户权限不为空
if (roleUserDO == null) {
return ResultUtil.error(ErrorCode.USER_ROLE_NOT_EXIST);
}
//用户权限应为管理员
if (!userDAO.isManagerByRoleId(roleUserDO.getRid())) {
return ResultUtil.error(ErrorCode.USER_ROLE_NOT_MANAGER);
}
return ResultUtil.success();
}
}

View File

@ -25,6 +25,7 @@ public enum ErrorCode {
NOT_ADMIN("NotAdmin", 40302, "不是管理员"),
EMAIL_LOGIN_NOT_SUPPORT("EmailLoginNotSupport", 40303, "请使用邮箱登陆"),
PASSWORD_NOT_SAME("PasswordNotSame", 40304, "两次密码不一致"),
PLEASE_ASSIGN_ROLE_TO_USER("PleaseAssignRoleToUser", 40305, "请为用户添加角色"),
ID_NOT_EXIST("IdNotExist", 40400, "ID不存在"),
ROLE_NOT_FOUNDED("RoleNotFounded", 40401, "角色不存在"),
ROLE_NAME_REPEAT("RoleNameRepeat", 40402, "角色名称重复"),

View File

@ -7,7 +7,7 @@ import com.jsl.oa.model.doData.RoleDO;
import com.jsl.oa.model.doData.RoleUserDO;
import com.jsl.oa.model.doData.UserDO;
import com.jsl.oa.model.voData.PermissionContentVo;
import com.jsl.oa.model.voData.UserProfileVo;
import com.jsl.oa.model.voData.UserCurrentBackVO;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.springframework.validation.BindingResult;
@ -15,6 +15,7 @@ import org.springframework.validation.ObjectError;
import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Field;
import java.sql.Timestamp;
import java.util.*;
/**
@ -166,8 +167,7 @@ public class Processing {
public static @NotNull Boolean checkUserIsAdmin(HttpServletRequest request, @NotNull RoleMapper roleMapper) {
RoleUserDO roleUserDO = roleMapper.getRoleUserByUid(Processing.getAuthHeaderToUserId(request));
if (roleUserDO != null) {
//默认主键为1的用户为管理员
RoleDO roleDO = roleMapper.getRoleById(Long.valueOf(1));
RoleDO roleDO = roleMapper.getRoleByRoleName("admin");
return roleUserDO.getRid().equals(roleDO.getId());
} else {
return false;
@ -247,6 +247,50 @@ public class Processing {
return " ";
}
/**
* <h2>封装返回内容</h2>
* <hr/>
* 封装返回内容
*
* @param userDO 用户信息
* @return {@link BaseResponse}
*/
public static @NotNull UserCurrentBackVO ReturnUserInfo(@NotNull UserDO userDO, RoleMapper roleMapper) {
UserCurrentBackVO userCurrentBackVO = new UserCurrentBackVO();
// 获取用户角色
RoleUserDO getUserRole = roleMapper.getRoleUserByUid(userDO.getId());
if (getUserRole == null) {
getUserRole = new RoleUserDO();
getUserRole.setRid(0L)
.setCreatedAt(new Timestamp(System.currentTimeMillis()));
} else {
getUserRole.setUid(null);
}
userCurrentBackVO.setUser(new UserCurrentBackVO.ReturnUser()
.setId(userDO.getId())
.setJobId(userDO.getJobId())
.setUsername(userDO.getUsername())
.setAddress(userDO.getAddress())
.setPhone(userDO.getPhone())
.setEmail(userDO.getEmail())
.setAge(userDO.getAge())
.setSignature(userDO.getSignature())
.setAvatar(userDO.getAvatar())
.setNickname(userDO.getNickname())
.setSex(userDO.getSex())
.setEnabled(userDO.getEnabled())
.setAccountNoExpired(userDO.getAccountNoExpired())
.setCredentialsNoExpired(userDO.getCredentialsNoExpired())
.setRecommend(userDO.getRecommend())
.setAccountNoLocked(userDO.getAccountNoLocked())
.setDescription(userDO.getDescription())
.setCreatedAt(userDO.getCreatedAt())
.setUpdatedAt(userDO.getUpdatedAt()))
.setRole(new UserCurrentBackVO.ReturnUserRole()
.setRid(getUserRole.getRid()))
.setPermission(new ArrayList<>());
return userCurrentBackVO;
}
public static List<UserDO> orderUser(List<UserDO> userDOS,String order,String orderBy){

View File

@ -34,24 +34,24 @@ public class ResultUtil {
@Contract("_ -> new")
public static @NotNull BaseResponse error(@NotNull ErrorCode errorCode) {
log.warn("失败: 错误码[" + errorCode.getCode() + "]: {} - {}", errorCode.getOutput(), errorCode.getMessage());
log.warn("失败: 错误码[" + errorCode.getCode() + "] {} - {}", errorCode.getOutput(), errorCode.getMessage());
return new BaseResponse(errorCode.getOutput(), errorCode.getCode(), errorCode.getMessage());
}
@Contract("_, _ -> new")
public static @NotNull BaseResponse error(@NotNull ErrorCode errorCode, Object data) {
log.warn("失败: 错误码[" + errorCode.getCode() + "]: {} - {}", errorCode.getOutput(), errorCode.getMessage());
log.warn("失败: 错误码[" + errorCode.getCode() + "] {} - {}", errorCode.getOutput(), errorCode.getMessage());
return new BaseResponse(errorCode.getOutput(), errorCode.getCode(), errorCode.getMessage(), data);
}
@Contract(value = "_, _, _, _ -> new", pure = true)
public static @NotNull BaseResponse error(String output, Integer code, String message, Object data) {
log.warn("失败: 错误码[" + code + "]: {} - {}", output, message);
log.warn("失败: 错误码[" + code + "] {} - {}", output, message);
return new BaseResponse(output, code, message, data);
}
public static @NotNull ResponseEntity<BaseResponse> error(String output, Integer code, String message) {
log.warn("失败: 错误码[" + code + "]: {} - {}", output, message);
log.warn("失败: 错误码[" + code + "] {} - {}", output, message);
return ResponseEntity.status(code)
.body(new BaseResponse(output, code, message));
}