diff --git a/Jenkinsfile b/Jenkinsfile index adea408eb7acf08b3b35c32c955f4027736c37ef..c7d1bdaf52d2787d2b2739dee49789a492ef5a8f 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -7,7 +7,7 @@ node { } stage('maven构建项目') { - //sh "mvn clean install -pl ${"${SERVICE}"} -am -amd -Pdev -Dmaven.test.skip=true" + //sh "mvn clean install" sh "mvn clean install -pl cvmagic-admin -am -amd -Pdev -Dmaven.test.skip=true" } diff --git a/cvmagic-common/src/main/java/com/cwf/common/core/controller/BaseController.java b/cvmagic-common/src/main/java/com/cwf/common/core/controller/BaseController.java index 7c62d106c24f46c69a50822e53e53207aa86d092..62e3d593b09d673d4efc0b9f73f8efd2a3e88012 100644 --- a/cvmagic-common/src/main/java/com/cwf/common/core/controller/BaseController.java +++ b/cvmagic-common/src/main/java/com/cwf/common/core/controller/BaseController.java @@ -3,6 +3,7 @@ package com.cwf.common.core.controller; import com.cwf.common.entity.auth.TokenInfo; import com.cwf.common.enums.TokenInfoKeyEnum; +import com.cwf.common.exception.base.MyException; import com.cwf.common.utils.auth.JwtUtil; import com.github.pagehelper.PageHelper; import lombok.extern.slf4j.Slf4j; @@ -10,6 +11,8 @@ import org.springframework.util.StringUtils; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; import java.util.Map; @Slf4j @@ -103,4 +106,49 @@ public class BaseController { } + + + public void isEmpty(Object obj){ + Class aClass = obj.getClass(); + + Field[] declaredFields = aClass.getDeclaredFields(); + + + boolean isAllNull = true; + + String isEmptyStr = ""; + + for (Field field : declaredFields){ + field.setAccessible(true); + try { + Object value = field.get(obj); + String s = Modifier.toString(field.getModifiers()); + + if (!s.equals("private static final")){ + if (value!=null){ + isAllNull = false; + + if (value.equals("")){ + String name = field.getName()+"为无效空字符;"; + isEmptyStr+=name; + } + } + } + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } + } + + if (isEmptyStr.length()!=0){ + throw new MyException(isEmptyStr,400); + } + + if (isAllNull){ + throw new MyException("无效参数",400); + } + + + } + + } diff --git a/cvmagic-common/src/main/java/com/cwf/common/core/service/BaseService.java b/cvmagic-common/src/main/java/com/cwf/common/core/service/BaseService.java new file mode 100644 index 0000000000000000000000000000000000000000..049cfdb710eb32f534c9950be74eb0accb4fe62e --- /dev/null +++ b/cvmagic-common/src/main/java/com/cwf/common/core/service/BaseService.java @@ -0,0 +1,26 @@ +package com.cwf.common.core.service; + +import com.cwf.common.enums.ResCodeEnum; +import com.cwf.common.exception.base.MyException; +import com.cwf.common.exception.base.SQLByIdSelectException; + +import java.util.List; + +public class BaseService { + + + public static void checkByIdGetInfoResult(Object data, String errMsg) { + if (data == null) { + throw new MyException(errMsg, ResCodeEnum.SELECTONE_ERR.getCode()); + } + } + + + public static void checkListResult(List data, String errMsg) { + if (data.size() == 0) { + throw new MyException(errMsg, ResCodeEnum.SELECTONE_ERR.getCode()); + } + } + + +} diff --git a/cvmagic-common/src/main/java/com/cwf/common/entity/http/R.java b/cvmagic-common/src/main/java/com/cwf/common/entity/http/R.java index 40cb03bc910fab595a67bf81db83ff62b3200b7d..8bb35ee385b673f1c557cd1161ff291ded3fa11a 100644 --- a/cvmagic-common/src/main/java/com/cwf/common/entity/http/R.java +++ b/cvmagic-common/src/main/java/com/cwf/common/entity/http/R.java @@ -49,6 +49,9 @@ public class R { return response; } + + + public static R error() { response.setCode(ResCodeEnum.ERROR.getCode()); response.setMsg(ResCodeEnum.ERROR.getMsg()); @@ -64,6 +67,8 @@ public class R { } + + /** * @param msg 提示信息 * @return diff --git a/cvmagic-common/src/main/java/com/cwf/common/enums/ResCodeEnum.java b/cvmagic-common/src/main/java/com/cwf/common/enums/ResCodeEnum.java index 8aaae9ff6bf6c6172a963a157b71bec8f4f55820..49da9009de6785f1eb6f1d3daf053a492e9289cd 100644 --- a/cvmagic-common/src/main/java/com/cwf/common/enums/ResCodeEnum.java +++ b/cvmagic-common/src/main/java/com/cwf/common/enums/ResCodeEnum.java @@ -10,6 +10,7 @@ public enum ResCodeEnum{ ERROR(400,"操作失败"), + LOGIN(1,"登入成功"), LOGIN_ERR(-1,"登入失败"), @@ -23,20 +24,25 @@ public enum ResCodeEnum{ AUTH_RANK(403,"权限不足"), + INSERT(2000,"添加成功"), + DELETE(2001,"删除成功"), + UPDATE(2002,"更新成功"), + QUERY(2003,"查询成功"), + FILE_UPLOAD(2004,"上传成功"), + DELETE_UPLOAD_FILE(2005,"删除文件成功"), + SELECTONE(2006,"获取详情"), + + + + INSERT_ERR(4000,"添加失败"), DELETE_ERR(4001,"删除失败"), UPDATE_ERR(4002,"更新失败"), QUERY_ERR(4003,"查询失败"), - FILE_UPLOAD_ERR(4004,"上传失败"), DELETE_UPLOAD_FILE_ERR(4005,"删除文件失败"), + SELECTONE_ERR(4006,"获取详情失败"); - INSERT(2000,"添加成功"), - DELETE(2001,"删除成功"), - UPDATE(2002,"更新成功"), - QUERY(2003,"查询成功"), - FILE_UPLOAD(2004,"上传成功"), - DELETE_UPLOAD_FILE(2005,"删除文件成功"); diff --git a/cvmagic-common/src/main/java/com/cwf/common/exception/base/SQLByIdSelectException.java b/cvmagic-common/src/main/java/com/cwf/common/exception/base/SQLByIdSelectException.java new file mode 100644 index 0000000000000000000000000000000000000000..1b7d35f54e03c6878c377f521d53854a11cf0772 --- /dev/null +++ b/cvmagic-common/src/main/java/com/cwf/common/exception/base/SQLByIdSelectException.java @@ -0,0 +1,23 @@ +package com.cwf.common.exception.base; + +import com.cwf.common.enums.ResCodeEnum; + +public class SQLByIdSelectException extends RuntimeException{ + + private Integer code = ResCodeEnum.SELECTONE_ERR.getCode(); + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + public SQLByIdSelectException() { + } + + public SQLByIdSelectException(String message) { + super(message); + } +} diff --git a/cvmagic-common/src/main/java/com/cwf/common/handle/ExceptionHandler.java b/cvmagic-common/src/main/java/com/cwf/common/handle/ExceptionHandler.java index 2f18fea088e4d0de559669b7bfb2b7723f215ccd..7f5c827bfa5798913ee7d6ad1173853d9011aebb 100644 --- a/cvmagic-common/src/main/java/com/cwf/common/handle/ExceptionHandler.java +++ b/cvmagic-common/src/main/java/com/cwf/common/handle/ExceptionHandler.java @@ -108,4 +108,10 @@ public class ExceptionHandler { System.out.println(e.getCode()); return R.error().writeMsg(e.getMessage()).writeCode(e.getCode()).writeData(null); } + + + + + + } diff --git a/cvmagic-framework/src/main/java/com/cwf/framework/config/CorsConfig.java b/cvmagic-framework/src/main/java/com/cwf/framework/config/CorsConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..414e615295dde121e1d239e2d3f34532b6f3f0f4 --- /dev/null +++ b/cvmagic-framework/src/main/java/com/cwf/framework/config/CorsConfig.java @@ -0,0 +1,4 @@ +package com.cwf.framework.config; + +public class CorsConfig { +} diff --git a/cvmagic-security/src/main/java/com/cwf/security/config/SecurityConfig.java b/cvmagic-security/src/main/java/com/cwf/security/config/SecurityConfig.java index 223f56cd0fffbd9c05cdf2f4b18981732284e94f..05e970a83fe7d993fc1b25323efeca5860983779 100644 --- a/cvmagic-security/src/main/java/com/cwf/security/config/SecurityConfig.java +++ b/cvmagic-security/src/main/java/com/cwf/security/config/SecurityConfig.java @@ -16,6 +16,11 @@ import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.web.AuthenticationEntryPoint; import org.springframework.security.web.access.AccessDeniedHandler; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.CorsConfigurationSource; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; + +import java.util.Arrays; @Configuration @EnableGlobalMethodSecurity(prePostEnabled = true) @@ -49,6 +54,8 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { protected void configure(HttpSecurity http) throws Exception { http .csrf().disable() + .cors().configurationSource(corsConfigurationSource()) + .and() //不通过session获取SecurityContext .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) .and() @@ -57,7 +64,6 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { .antMatchers("/user/login").permitAll() .antMatchers("/admin/login").permitAll() .antMatchers("/api/**").permitAll() - .antMatchers("/websocket/**").permitAll() //除此之外的所有接口需要鉴权认证 .anyRequest().authenticated(); @@ -68,4 +74,24 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { http.addFilterBefore(jwtAuthenticationTokenFilter, UsernamePasswordAuthenticationFilter.class); } + + + + + /** + * @description 跨越配置 + * @author 18068 + * @date 2023/2/18 17:12 + */ + CorsConfigurationSource corsConfigurationSource(){ + CorsConfiguration corsConfiguration = new CorsConfiguration(); + corsConfiguration.setAllowedHeaders(Arrays.asList("*")); + corsConfiguration.setAllowedMethods(Arrays.asList("*")); + corsConfiguration.setAllowedOrigins(Arrays.asList("*")); + corsConfiguration.setMaxAge(3600L); + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**",corsConfiguration); + return source; + } + } diff --git a/cvmagic-security/src/main/java/com/cwf/security/filter/JwtAuthenticationTokenFilter.java b/cvmagic-security/src/main/java/com/cwf/security/filter/JwtAuthenticationTokenFilter.java index 397e25c8561f6165a421a8fceb19dc175c6e4ea2..c9d9be24deee35459262f5121cc247eb9ff3984f 100644 --- a/cvmagic-security/src/main/java/com/cwf/security/filter/JwtAuthenticationTokenFilter.java +++ b/cvmagic-security/src/main/java/com/cwf/security/filter/JwtAuthenticationTokenFilter.java @@ -43,8 +43,7 @@ public class JwtAuthenticationTokenFilter extends OncePerRequestFilter { @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { String token = request.getHeader("Authorization"); - - + System.out.println(token); diff --git a/cvmagic-system/src/main/java/com/cwf/system/controller/PermissionController.java b/cvmagic-system/src/main/java/com/cwf/system/controller/PermissionController.java index bcc8b2079f19e72a0a9be9c5c220e6cd101c4560..42030657b06524487401113f956a1f1e3a5618fa 100644 --- a/cvmagic-system/src/main/java/com/cwf/system/controller/PermissionController.java +++ b/cvmagic-system/src/main/java/com/cwf/system/controller/PermissionController.java @@ -8,12 +8,16 @@ import com.cwf.common.entity.http.R; import com.cwf.common.entity.page.PageResult; import com.cwf.common.enums.TokenInfoKeyEnum; import com.cwf.common.utils.auth.JwtUtil; +import com.cwf.common.utils.validator.ValidatorUtil; import com.cwf.framework.aspectj.annotation.MyPage; import com.cwf.framework.page.entity.PageParams; import com.cwf.system.entity.Permission; import com.cwf.system.service.PermissionService; +import com.cwf.system.validation.permission.AddPermission; +import com.cwf.system.validation.permission.PermissionGroup; import com.cwf.system.vo.PermissionTreeVO; import com.github.pagehelper.PageInfo; +import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.security.access.prepost.PreAuthorize; @@ -22,6 +26,7 @@ import org.springframework.web.bind.annotation.*; import java.util.List; @RestController +@CrossOrigin @RequestMapping("/system/menu") public class PermissionController extends BaseController { @@ -30,20 +35,17 @@ public class PermissionController extends BaseController { @Autowired - RedisTemplate redisTemplate; - - - + RedisTemplate redisTemplate; /** + * @return * @description 获取所有菜单/权限 * @author 18068 * @date 2023/2/16 10:12 - * @return */ @GetMapping("/tree/list") - public R> selectRolePageList(){ + public R> selectRolePageList() { List permissionTreeVOList = permissionService.getPermissionTreeVO(); return R.success(permissionTreeVOList); } @@ -57,22 +59,67 @@ public class PermissionController extends BaseController { @PostMapping("/page/list") public R getPermissionPageList1( @RequestBody PageParams params - ){ + ) { Permission data = params.getData(); PageInfo pageList = permissionService.getPermissionPageList(data); return R.success(pageList); } + @GetMapping("/info/{id}") + public R byIdGetPermissionInfo(@PathVariable Integer id) { + + Permission permission = permissionService.byIdGetPermissionInfo(id); + return R.success(permission); + } + + @PostMapping("/add/{rank}") public R addOne( @PathVariable Integer rank, - @RequestBody Permission permission - ){ + @RequestBody AddPermission permission + ) { + + if (rank == 1) { + ValidatorUtil.check(permission, PermissionGroup.addOne.class); + } else if (rank == 2) { + ValidatorUtil.check(permission, PermissionGroup.addTwo.class); + } else if (rank == 3) { + ValidatorUtil.check(permission, PermissionGroup.addThree.class); + } else if (rank == 4) { + ValidatorUtil.check(permission, PermissionGroup.button.class); + } - System.out.println(rank); return R.success(permission); } + + @PutMapping("/update/{id}") + public R update( + @PathVariable @NotNull Integer id, + @RequestBody Permission permission + ) { + + + isEmpty(permission); + + + + Permission build = Permission.builder() + .id(Long.valueOf(id)) + .title(permission.getTitle()) + .path(permission.getPath()) + .name(permission.getName()) + .icon(permission.getIcon()) + .redirect(permission.getRedirect()) + .state(permission.getState()) + .isShow(permission.getIsShow()) + .sort(permission.getSort()).build(); + + + boolean res = permissionService.update(build); + return R.update(1); + } + } diff --git a/cvmagic-system/src/main/java/com/cwf/system/entity/Permission.java b/cvmagic-system/src/main/java/com/cwf/system/entity/Permission.java index 882be6a4c1fb6251c776b8f33c4ec655a5ec0c5e..e87e1be01aa59bd78194a03736c38c8f7714e25e 100644 --- a/cvmagic-system/src/main/java/com/cwf/system/entity/Permission.java +++ b/cvmagic-system/src/main/java/com/cwf/system/entity/Permission.java @@ -1,6 +1,8 @@ package com.cwf.system.entity; +import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; import com.cwf.system.validation.permission.PermissionGroup; import com.cwf.system.vo.PermissionTreeVO; import lombok.*; @@ -30,32 +32,24 @@ public class Permission implements Serializable { /** * 功能id */ - @Null(groups=PermissionGroup.addOne.class) - @Null(groups=PermissionGroup.addTwo.class) - @Null(groups=PermissionGroup.addThree.class) + @TableId(type = IdType.AUTO) private Long id; /** * 功能名称 */ - - @Null(groups=PermissionGroup.addOne.class) - @Null(groups=PermissionGroup.addTwo.class) - @Null(groups=PermissionGroup.addThree.class) private String title; /** * 级别 */ - @NotNull(groups=PermissionGroup.add.class) private Integer rank; /** * 功能父级id */ - @NotNull(groups=PermissionGroup.add.class) private Long parentId; /** * 路径 */ - @NotBlank(groups=PermissionGroup.add.class) + @NotBlank private String path; /** * 名称 @@ -64,7 +58,6 @@ public class Permission implements Serializable { /** * 组件地址 */ - @NotBlank(groups=PermissionGroup.add.class) private String component; /** * 重定向 @@ -85,7 +78,6 @@ public class Permission implements Serializable { /** * 分类(1是菜单2是按钮) */ - private Integer category; /** * 图标地址 diff --git a/cvmagic-system/src/main/java/com/cwf/system/service/PermissionService.java b/cvmagic-system/src/main/java/com/cwf/system/service/PermissionService.java index 7803f422321a2cbd62a6bf303676238044a4db58..ddf216db9baae4190c47457f7c90c6ef8e826c07 100644 --- a/cvmagic-system/src/main/java/com/cwf/system/service/PermissionService.java +++ b/cvmagic-system/src/main/java/com/cwf/system/service/PermissionService.java @@ -1,6 +1,7 @@ package com.cwf.system.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.cwf.common.core.service.BaseService; import com.cwf.system.entity.Permission; import com.cwf.system.vo.PermissionTreeVO; import com.github.pagehelper.PageInfo; @@ -30,6 +31,15 @@ public interface PermissionService extends IService { PageInfo getPermissionPageList(Permission permission); + + Permission byIdGetPermissionInfo(Integer id); + boolean add(Permission permission); + + + boolean update(Permission permission); + + + } diff --git a/cvmagic-system/src/main/java/com/cwf/system/service/impl/PermissionServiceImpl.java b/cvmagic-system/src/main/java/com/cwf/system/service/impl/PermissionServiceImpl.java index 7b7aadd659a9c30a46ccac20e7bce11618fb5f3c..00cbc637183e8e0bd1f2b8ffcadc2e955485bf9c 100644 --- a/cvmagic-system/src/main/java/com/cwf/system/service/impl/PermissionServiceImpl.java +++ b/cvmagic-system/src/main/java/com/cwf/system/service/impl/PermissionServiceImpl.java @@ -2,6 +2,7 @@ package com.cwf.system.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.cwf.common.core.service.BaseService; import com.cwf.common.enums.IsDeleteEnum; import com.cwf.system.dao.PermissionDao; import com.cwf.system.entity.Permission; @@ -24,6 +25,7 @@ import java.util.stream.Collectors; @Service public class PermissionServiceImpl extends ServiceImpl implements PermissionService { + @Autowired private PermissionDao permissionDao; @@ -80,11 +82,32 @@ public class PermissionServiceImpl extends ServiceImpl lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(Permission::getId,id); + + Permission permission = permissionDao.selectOne(lambdaQueryWrapper); + + BaseService.checkByIdGetInfoResult(permission,"获取当前菜单/按钮失败"); + + return permission; + } + @Override public boolean add(Permission permission) { return false; } + + + @Override + public boolean update(Permission permission) { + + return this.updateById(permission); + } } diff --git a/cvmagic-system/src/main/java/com/cwf/system/validation/permission/AddPermission.java b/cvmagic-system/src/main/java/com/cwf/system/validation/permission/AddPermission.java new file mode 100644 index 0000000000000000000000000000000000000000..725b4079192c8036e45432c8a613d62fa2a3fc94 --- /dev/null +++ b/cvmagic-system/src/main/java/com/cwf/system/validation/permission/AddPermission.java @@ -0,0 +1,113 @@ +package com.cwf.system.validation.permission; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.*; +import lombok.experimental.SuperBuilder; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Null; +import java.io.Serializable; + +/** + * 添加(Permission)实体类 + * + * @author makejava + * @since 2023-02-15 12:42:44 + */ +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +@SuperBuilder +@ToString +public class AddPermission implements Serializable { + private static final long serialVersionUID = 210823805838544488L; + /** + * 功能id + */ + @Null(groups=PermissionGroup.addOne.class) + @Null(groups=PermissionGroup.addTwo.class) + @Null(groups=PermissionGroup.addThree.class) + @Null(groups=PermissionGroup.button.class) + private Long id; + /** + * 功能名称 + */ + + @NotBlank(groups=PermissionGroup.addOne.class) + @NotBlank(groups=PermissionGroup.addTwo.class) + @NotBlank(groups=PermissionGroup.addThree.class) + @NotBlank(groups=PermissionGroup.button.class) + private String title; + /** + * 级别 + */ + private Integer rank; + /** + * 功能父级id + */ + @NotNull(groups=PermissionGroup.addOne.class) + @NotNull(groups=PermissionGroup.addTwo.class) + @NotNull(groups=PermissionGroup.addThree.class) + @NotNull(groups=PermissionGroup.button.class) + private Long parentId; + /** + * 路径 + */ + @NotBlank(groups=PermissionGroup.addOne.class) + @NotBlank(groups=PermissionGroup.addThree.class) + private String path; + /** + * 名称 + */ + @NotBlank(groups=PermissionGroup.addOne.class) + @NotBlank(groups=PermissionGroup.addThree.class) + private String name; + /** + * 组件地址 + */ + @NotBlank(groups=PermissionGroup.addOne.class) + @NotBlank(groups=PermissionGroup.addThree.class) + private String component; + /** + * 重定向 + */ + private String redirect; + /** + * 元标签 + */ + private String meta; + /** + * 功能状态 + */ + private Integer state; + /** + * 标记 + */ + @NotBlank(groups=PermissionGroup.button.class) + private String mark; + /** + * 分类(1是菜单2是按钮) + */ + private Integer category; + /** + * 图标地址 + */ + private String icon; + /** + * 排序 + */ + private Integer sort; + /** + * 是否显示 + */ + private Integer isShow; + /** + * 逻辑删除 + */ + private String isDelete; + +} + diff --git a/cvmagic-system/src/main/java/com/cwf/system/validation/permission/PermissionGroup.java b/cvmagic-system/src/main/java/com/cwf/system/validation/permission/PermissionGroup.java index cbe41708a7a5850eff06125cffb2f7f1fbb3cd9a..9502912bf03e51dffabbe313c496b0ccd8300a53 100644 --- a/cvmagic-system/src/main/java/com/cwf/system/validation/permission/PermissionGroup.java +++ b/cvmagic-system/src/main/java/com/cwf/system/validation/permission/PermissionGroup.java @@ -20,6 +20,10 @@ public class PermissionGroup { } + public interface button{ + + } + public interface update{ }