diff --git a/src/main/java/com/jsl/oa/aspect/AuthControllerAspect.java b/src/main/java/com/jsl/oa/aspect/AuthControllerAspect.java index f9f0383..fa54554 100755 --- a/src/main/java/com/jsl/oa/aspect/AuthControllerAspect.java +++ b/src/main/java/com/jsl/oa/aspect/AuthControllerAspect.java @@ -41,7 +41,7 @@ public class AuthControllerAspect { * @throws Throwable 异常 * @since v1.0.0 */ - @Around("execution(* com.jsl.oa.controllers.*.*(..))") + @Around("execution(* com.jsl.oa.controllers.*.*(..)) && !execution(* com.jsl.oa.controllers.IndexController.*(..))") public Object controllerAround(ProceedingJoinPoint pjp) throws Throwable { // 获取HttpServletRequest对象 HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest(); @@ -56,6 +56,15 @@ public class AuthControllerAspect { } + /** + *

Token检查切面

+ *
+ * 用于检查Token是否有效 + * + * @param pjp ProceedingJoinPoint对象 + * @return {@link Object} + * @throws Throwable + */ @Around("execution(* com.jsl.oa.controllers.AuthController.authLogout(..)) || execution(* com.jsl.oa.controllers.AuthController.authChangePassword(..))") public Object tokenControllerAround(ProceedingJoinPoint pjp) throws Throwable { // 获取 HttpServletRequest 对象 @@ -99,6 +108,6 @@ public class AuthControllerAspect { long nowTimestamp = System.currentTimeMillis(); // 时间误差允许前后五秒钟 - return nowTimestamp - Long.parseLong(getTimestamp) <= 5000 && nowTimestamp - Long.parseLong(getTimestamp) >= -5000; + return nowTimestamp - Long.parseLong(getTimestamp) <= 10000 && nowTimestamp - Long.parseLong(getTimestamp) >= -10000; } } diff --git a/src/main/java/com/jsl/oa/config/redis/RedisConfiguration.java b/src/main/java/com/jsl/oa/config/redis/RedisConfiguration.java index be2569e..c697e1f 100755 --- a/src/main/java/com/jsl/oa/config/redis/RedisConfiguration.java +++ b/src/main/java/com/jsl/oa/config/redis/RedisConfiguration.java @@ -1,5 +1,6 @@ package com.jsl.oa.config.redis; +import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; @@ -21,9 +22,17 @@ import org.springframework.data.redis.serializer.StringRedisSerializer; */ @Configuration public class RedisConfiguration { + @Value("${spring.redis.host}") + private String host; + @Value("${spring.redis.port}") + private Integer port; + @Value("${spring.redis.password}") + private String password; + @Bean public JedisConnectionFactory jedisConnectionFactory() { - RedisStandaloneConfiguration config = new RedisStandaloneConfiguration("localhost"); + RedisStandaloneConfiguration config = new RedisStandaloneConfiguration(host, port); + config.setPassword(password); return new JedisConnectionFactory(config); } diff --git a/src/main/java/com/jsl/oa/config/shiro/ShiroConfiguration.java b/src/main/java/com/jsl/oa/config/shiro/ShiroConfiguration.java index ab7e474..bbf96ed 100755 --- a/src/main/java/com/jsl/oa/config/shiro/ShiroConfiguration.java +++ b/src/main/java/com/jsl/oa/config/shiro/ShiroConfiguration.java @@ -27,7 +27,7 @@ public class ShiroConfiguration { Map filterChainDefinitionMap = new LinkedHashMap<>(); filterChainDefinitionMap.put("/auth/**/**", "anon"); // 登录接口允许匿名访问 filterChainDefinitionMap.put("/unauthorized", "anon"); // 未授权接口允许匿名访问 - filterChainDefinitionMap.put("/", "jwt"); // 首页允许匿名访问 + filterChainDefinitionMap.put("/", "anon"); // 首页允许匿名访问 filterChainDefinitionMap.put("/**/**", "jwt"); // 其他接口一律拦截(需要Token) shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap); diff --git a/src/main/java/com/jsl/oa/controllers/RoleController.java b/src/main/java/com/jsl/oa/controllers/RoleController.java index 093af5e..bb81360 100755 --- a/src/main/java/com/jsl/oa/controllers/RoleController.java +++ b/src/main/java/com/jsl/oa/controllers/RoleController.java @@ -1,35 +1,54 @@ package com.jsl.oa.controllers; -import com.jsl.oa.model.voData.RoleAddUserVO; -import com.jsl.oa.model.voData.RoleRemoveUserVO; import com.jsl.oa.services.RoleService; 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.validation.BindingResult; -import org.springframework.validation.annotation.Validated; +import org.springframework.lang.Nullable; import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; + +/** + *

角色控制器

+ *
+ * 角色控制器,包含角色获取接口 + * + * @version v1.1.0 + * @see RoleService + * @since v1.1.0 + */ @RestController @RequiredArgsConstructor - public class RoleController { private final RoleService roleService; + /** + *

角色获取

+ *
+ * 角色获取接口 + * + * @param id 角色id + * @return {@link BaseResponse} + */ + @GetMapping("/role/get") + public BaseResponse roleGet(HttpServletRequest request, @RequestParam @Nullable String id) { + return roleService.roleGet(request, id); + } + /** * 用户权限授予 * * @return */ @PostMapping("role/user/add") - public BaseResponse roleAddUser(@RequestParam Long uid,@RequestParam Long rid){ + public BaseResponse roleAddUser(@RequestParam Long uid, @RequestParam Long rid) { // 判断是否有参数错误 if (uid == null || rid == null) { return ResultUtil.error(ErrorCode.PARAMETER_ERROR); } - return roleService.roleAddUser(uid,rid); + return roleService.roleAddUser(uid, rid); } /** @@ -38,9 +57,9 @@ public class RoleController { * @return */ @DeleteMapping("role/user/remove") - public BaseResponse roleRemoveUser(@RequestParam Long uid){ + public BaseResponse roleRemoveUser(@RequestParam Long uid) { // 判断是否有参数错误 - if (uid==null) { + if (uid == null) { return ResultUtil.error(ErrorCode.PARAMETER_ERROR); } return roleService.roleRemoveUser(uid); diff --git a/src/main/java/com/jsl/oa/dao/RoleDAO.java b/src/main/java/com/jsl/oa/dao/RoleDAO.java index 7eb8950..8f1eed1 100644 --- a/src/main/java/com/jsl/oa/dao/RoleDAO.java +++ b/src/main/java/com/jsl/oa/dao/RoleDAO.java @@ -1,15 +1,17 @@ package com.jsl.oa.dao; import com.jsl.oa.mapper.RoleMapper; -import com.jsl.oa.model.voData.RoleAddUserVO; -import com.jsl.oa.model.voData.RoleRemoveUserVO; +import com.jsl.oa.model.doData.RoleDO; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; +import java.util.ArrayList; +import java.util.List; + @Component @RequiredArgsConstructor public class RoleDAO { - private final RoleMapper roleMapper; + public final RoleMapper roleMapper; public void roleAddUser(Long uid,Long rid) { roleMapper.roleAddUser(uid,rid); @@ -18,4 +20,14 @@ public class RoleDAO { public void roleRemoveUser(Long uid) { roleMapper.roleRemoveUser(uid); } + + public List getRoleById(String id) { + ArrayList getRoleList = new ArrayList<>(); + getRoleList.add(roleMapper.getRoleById(Long.valueOf(id))); + return getRoleList; + } + + public List getRole() { + return roleMapper.getRole(); + } } diff --git a/src/main/java/com/jsl/oa/mapper/RoleMapper.java b/src/main/java/com/jsl/oa/mapper/RoleMapper.java index 2a3400f..970a919 100644 --- a/src/main/java/com/jsl/oa/mapper/RoleMapper.java +++ b/src/main/java/com/jsl/oa/mapper/RoleMapper.java @@ -7,6 +7,8 @@ import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; +import java.util.List; + @Mapper public interface RoleMapper { @@ -21,4 +23,10 @@ public interface RoleMapper { @Select("SELECT * FROM organize_oa.oa_role WHERE role_name=#{roleName}") RoleDO getRoleByRoleName(String roleName); + + @Select("SELECT * FROM organize_oa.oa_role WHERE id=#{id}") + RoleDO getRoleById(Long id); + + @Select("SELECT * FROM organize_oa.oa_role ORDER BY id DESC") + List getRole(); } diff --git a/src/main/java/com/jsl/oa/model/doData/RoleDO.java b/src/main/java/com/jsl/oa/model/doData/RoleDO.java index e5121b2..04148c3 100755 --- a/src/main/java/com/jsl/oa/model/doData/RoleDO.java +++ b/src/main/java/com/jsl/oa/model/doData/RoleDO.java @@ -1,6 +1,5 @@ package com.jsl.oa.model.doData; -import com.fasterxml.jackson.annotation.JsonInclude; import lombok.Data; import lombok.experimental.Accessors; @@ -17,7 +16,6 @@ import java.sql.Timestamp; */ @Data @Accessors(chain = true) -@JsonInclude(JsonInclude.Include.NON_NULL) public class RoleDO { private Long id; private String roleName; diff --git a/src/main/java/com/jsl/oa/services/MailService.java b/src/main/java/com/jsl/oa/services/MailService.java index a1c3c20..b8f48a9 100755 --- a/src/main/java/com/jsl/oa/services/MailService.java +++ b/src/main/java/com/jsl/oa/services/MailService.java @@ -40,8 +40,7 @@ public interface MailService { * * @param email 邮箱 * @param code 验证码 - * @return 是否发送成功 */ - boolean sendMailAboutUserLogin(String email, Integer code); + void sendMailAboutUserLogin(String email, Integer code); } diff --git a/src/main/java/com/jsl/oa/services/RoleService.java b/src/main/java/com/jsl/oa/services/RoleService.java index eea254d..7da9e3b 100644 --- a/src/main/java/com/jsl/oa/services/RoleService.java +++ b/src/main/java/com/jsl/oa/services/RoleService.java @@ -1,11 +1,21 @@ package com.jsl.oa.services; -import com.jsl.oa.model.voData.RoleAddUserVO; -import com.jsl.oa.model.voData.RoleRemoveUserVO; import com.jsl.oa.utils.BaseResponse; +import javax.servlet.http.HttpServletRequest; + +/** + *

角色控制器接口

+ *
+ * 该接口用于定义角色控制器的方法 + * + * @version 1.1.0 + * @since v1.1.0 + */ public interface RoleService { - BaseResponse roleAddUser(Long uid,Long rid); + BaseResponse roleAddUser(Long uid, Long rid); BaseResponse roleRemoveUser(Long uid); + + BaseResponse roleGet(HttpServletRequest request, String id); } diff --git a/src/main/java/com/jsl/oa/services/impl/AuthServiceImpl.java b/src/main/java/com/jsl/oa/services/impl/AuthServiceImpl.java index 32fe4ff..e4aae3a 100755 --- a/src/main/java/com/jsl/oa/services/impl/AuthServiceImpl.java +++ b/src/main/java/com/jsl/oa/services/impl/AuthServiceImpl.java @@ -138,11 +138,8 @@ public class AuthServiceImpl implements AuthService { // 存储验证码 if (emailRedisUtil.setData(BusinessConstants.BUSINESS_LOGIN, email, code, 5)) { // 发送邮件 - if (mailService.sendMailAboutUserLogin(email, code)) { - return ResultUtil.success("验证码已发送"); - } else { - return ResultUtil.error(ErrorCode.EMAIL_LOGIN_NOT_SUPPORT); - } + mailService.sendMailAboutUserLogin(email, code); + return ResultUtil.success("验证码已发送"); } else { return ResultUtil.error(ErrorCode.DATABASE_INSERT_ERROR); } diff --git a/src/main/java/com/jsl/oa/services/impl/MailServiceImpl.java b/src/main/java/com/jsl/oa/services/impl/MailServiceImpl.java index 5cd7904..c0bd8e9 100755 --- a/src/main/java/com/jsl/oa/services/impl/MailServiceImpl.java +++ b/src/main/java/com/jsl/oa/services/impl/MailServiceImpl.java @@ -5,6 +5,7 @@ import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Value; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.MimeMessageHelper; +import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.thymeleaf.TemplateEngine; import org.thymeleaf.context.Context; @@ -60,7 +61,8 @@ public class MailServiceImpl implements MailService { } @Override - public boolean sendMailAboutUserLogin(String email, Integer code) { + @Async + public void sendMailAboutUserLogin(String email, Integer code) { // 发送邮件带HTML模块部分 try { MimeMessage message = javaMailSender.createMimeMessage(); @@ -72,14 +74,12 @@ public class MailServiceImpl implements MailService { Context context = new Context(); context.setVariable("code", code); context.setVariable("email", email); - String emailContent = templateEngine.process("/mail/user-login.html", context); + String emailContent = templateEngine.process("./mail/user-login.html", context); mimeMessage.setText(emailContent, true); javaMailSender.send(message); - return true; } catch (MessagingException e) { //TODO: 10001-发送邮件失败处理 - return false; } } } diff --git a/src/main/java/com/jsl/oa/services/impl/RoleServiceImpl.java b/src/main/java/com/jsl/oa/services/impl/RoleServiceImpl.java index 3dcd359..2e1ef48 100644 --- a/src/main/java/com/jsl/oa/services/impl/RoleServiceImpl.java +++ b/src/main/java/com/jsl/oa/services/impl/RoleServiceImpl.java @@ -2,15 +2,19 @@ package com.jsl.oa.services.impl; import com.jsl.oa.dao.RoleDAO; import com.jsl.oa.dao.UserDAO; -import com.jsl.oa.model.voData.RoleAddUserVO; -import com.jsl.oa.model.voData.RoleRemoveUserVO; +import com.jsl.oa.model.doData.RoleDO; import com.jsl.oa.services.RoleService; 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; +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.regex.Pattern; + @Service @RequiredArgsConstructor public class RoleServiceImpl implements RoleService { @@ -19,18 +23,42 @@ public class RoleServiceImpl implements RoleService { private final UserDAO userDAO; @Override - public BaseResponse roleAddUser(Long uid,Long rid) { - if(userDAO.isExistUser(uid)) { - roleDAO.roleAddUser(uid,rid); + public BaseResponse roleAddUser(Long uid, Long rid) { + if (userDAO.isExistUser(uid)) { + roleDAO.roleAddUser(uid, rid); return ResultUtil.success(); } else return ResultUtil.error(ErrorCode.USER_NOT_EXIST); } @Override public BaseResponse roleRemoveUser(Long uid) { - if(userDAO.isExistUser(uid)) { + if (userDAO.isExistUser(uid)) { roleDAO.roleRemoveUser(uid); return ResultUtil.success(); } else return ResultUtil.error(ErrorCode.USER_NOT_EXIST); } + + @Override + public BaseResponse roleGet(HttpServletRequest request, String id) { + // 检查用户权限 + if (!Processing.checkUserIsAdmin(request, roleDAO.roleMapper)) { + return ResultUtil.error(ErrorCode.NOT_ADMIN); + } + // 获取 Role 权限组 + ArrayList getRoleList; + if (id != null && !id.isEmpty()) { + if (Pattern.matches("^[0-9]+$", id)) { + getRoleList = (ArrayList) roleDAO.getRoleById(id); + } else { + ArrayList error = new ArrayList<>(); + error.add("id 只能为数字"); + return ResultUtil.error(ErrorCode.PARAMETER_ERROR, error); + } + } else { + getRoleList = (ArrayList) roleDAO.getRole(); + getRoleList.add(getRoleList.size(), new RoleDO().setId(0L).setRoleName("none")); + } + // 返回数据 + return ResultUtil.success(getRoleList); + } } diff --git a/src/main/java/com/jsl/oa/services/impl/UserServiceImpl.java b/src/main/java/com/jsl/oa/services/impl/UserServiceImpl.java index 0d16f15..bb7bfef 100755 --- a/src/main/java/com/jsl/oa/services/impl/UserServiceImpl.java +++ b/src/main/java/com/jsl/oa/services/impl/UserServiceImpl.java @@ -3,7 +3,6 @@ package com.jsl.oa.services.impl; import com.jsl.oa.dao.UserDAO; import com.jsl.oa.exception.BusinessException; import com.jsl.oa.mapper.RoleMapper; -import com.jsl.oa.model.doData.RoleDO; import com.jsl.oa.model.doData.RoleUserDO; import com.jsl.oa.model.doData.UserCurrentDO; import com.jsl.oa.model.doData.UserDO; @@ -33,10 +32,10 @@ public class UserServiceImpl implements UserService { } @Override - public BaseResponse userDelete(HttpServletRequest request,Long id) { + public BaseResponse userDelete(HttpServletRequest request, Long id) { //判断用户是否存在 if (userDAO.isExistUser(id)) { - if(!Processing.checkUserIsAdmin(request,roleMapper)){ + if (!Processing.checkUserIsAdmin(request, roleMapper)) { return ResultUtil.error(ErrorCode.NOT_ADMIN); } userDAO.userDelete(id); @@ -45,10 +44,10 @@ public class UserServiceImpl implements UserService { } @Override - public BaseResponse userLock(HttpServletRequest request,Long id) { + public BaseResponse userLock(HttpServletRequest request, Long id) { //判断用户是否存在 if (userDAO.isExistUser(id)) { - if (!Processing.checkUserIsAdmin(request,roleMapper)){ + if (!Processing.checkUserIsAdmin(request, roleMapper)) { return ResultUtil.error(ErrorCode.NOT_ADMIN); } userDAO.userLock(id); @@ -127,19 +126,17 @@ public class UserServiceImpl implements UserService { } - - @Override public BaseResponse userAdd(UserAddVo userAddVo, HttpServletRequest request) { //检测用户是否为管理员 BaseResponse checkManagerResult = isManager(request); - if(checkManagerResult.getCode() != 200){ + if (checkManagerResult.getCode() != 200) { return checkManagerResult; } //如果用户不重复,添加用户 - if(!userDAO.isRepeatUser(userAddVo.getUsername())){ + if (!userDAO.isRepeatUser(userAddVo.getUsername())) { // 生成工号 String userNum; do { @@ -164,27 +161,26 @@ public class UserServiceImpl implements UserService { } else { throw new BusinessException(ErrorCode.DATABASE_INSERT_ERROR); } - }else return ResultUtil.error(ErrorCode.USER_EXIST); + } else return ResultUtil.error(ErrorCode.USER_EXIST); } - @Override public BaseResponse userEdit(UserEditVo userEditVo, HttpServletRequest request) { //检测用户是否为管理员 BaseResponse checkManagerResult = isManager(request); - if(checkManagerResult.getCode() != 200){ + if (checkManagerResult.getCode() != 200) { return checkManagerResult; } //根据id获取用户信息 UserDO userDO = userDAO.getUserById(userEditVo.getId()); - if(userDO == null){ + if (userDO == null) { return ResultUtil.error(ErrorCode.USER_NOT_EXIST); } //修改非空属性 try { - Processing.copyProperties(userEditVo,userDO); + Processing.copyProperties(userEditVo, userDO); } catch (Exception e) { throw new RuntimeException(e); } @@ -199,12 +195,12 @@ public class UserServiceImpl implements UserService { public BaseResponse userProflieGet(Long id) { UserDO userDO = userDAO.getUserById(id); - if(userDO == null){ + if (userDO == null) { return ResultUtil.error(ErrorCode.USER_NOT_EXIST); } UserProfile userProfile = new UserProfile(); try { - Processing.copyProperties(userDO,userProfile); + Processing.copyProperties(userDO, userProfile); } catch (Exception e) { throw new RuntimeException(e); } @@ -218,18 +214,18 @@ public class UserServiceImpl implements UserService { * @Date: 2024/1/18 * @Param request: 请求头 **/ - public BaseResponse isManager(HttpServletRequest 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){ + if (roleUserDO == null) { return ResultUtil.error(ErrorCode.USER_ROLE_NOT_EXIST); } //用户权限应为管理员 - if(!userDAO.isManagerByRoleId(roleUserDO.getRid())){ + if (!userDAO.isManagerByRoleId(roleUserDO.getRid())) { return ResultUtil.error(ErrorCode.USER_ROLE_NOT_MANAGER); } return ResultUtil.success(); diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index f378642..90a6aa2 100755 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -12,7 +12,7 @@ spring: host: localhost port: 6379 profiles: - active: dev + active: test mail: host: 171.38.91.172 username: zrx