fix: 升级数据集插件版本0.0.1.2023071101.Alpha;移除原有的接口权限注解,统一使用数据集插件提供的权限校验注解

升级数据集插件版本0.0.1.2023071101.Alpha;移除原有的接口权限注解,统一使用数据集插件提供的权限校验注解
main
hong.yang 2 years ago
parent 59f17ac8a7
commit 82e62c2048

@ -18,6 +18,7 @@
</properties>
<dependencies>
<!-- 数据集插件 -->
<dependency>
<groupId>com.gccloud</groupId>
<artifactId>dataset-core</artifactId>
@ -42,103 +43,21 @@
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<!-- swagger相关依赖 -->
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>${swagger.annotations.version}</version>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>${swagger.bootstrap.version}</version>
</dependency>
<!-- lombok依赖 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<!-- mybatis相关依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-core</artifactId>
<version>${mybatis.plus.version}</version>
<exclusions>
<exclusion>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>${mybatis-spring.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis.plus.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-extension</artifactId>
<version>${mybatis.plus.version}</version>
</dependency>
<!-- 工具 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${commons-lang3.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>${commons-collections4.version}</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>${commons-io.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>${guava.version}</version>
</dependency>
<!-- jackson -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.core.version}</version>
<version>${jackson.version.core}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.core.version}</version>
<version>${jackson.version.core}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson.core.version}</version>
<version>${jackson.version.core}</version>
</dependency>
<dependency>
<groupId>org.json</groupId>
@ -148,60 +67,7 @@
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-json-org</artifactId>
<version>${jackson.core.version}</version>
</dependency>
<!-- groovy -->
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<type>pom</type>
<version>${groovy.version}</version>
</dependency>
<dependency>
<groupId>org.kohsuke</groupId>
<artifactId>groovy-sandbox</artifactId>
<version>1.19</version>
</dependency>
<!-- caffeine缓存 -->
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
</dependency>
<!-- 数据库 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid.version}</version>
</dependency>
<dependency>
<groupId>p6spy</groupId>
<artifactId>p6spy</artifactId>
<version>${p6spy.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>${ojdbc8.version}</version>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>${postgresql.version}</version>
</dependency>
<dependency>
<groupId>com.clickhouse</groupId>
<artifactId>clickhouse-jdbc</artifactId>
<version>${clickhouse.version}</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.9.1</version>
<version>${jackson.version.core}</version>
</dependency>
</dependencies>
</project>

@ -50,35 +50,6 @@ public class DataSetDataSource extends BaseChartDataSource {
@ApiModelProperty(notes = "服务端分页页长")
private Integer pageSize;
/**
*
* treeNodeField
*/
@ApiModelProperty(notes = "是否懒加载树")
private boolean lazy = false;
@ApiModelProperty(notes = "子级列表字段,非懒加载时使用")
private String childrenField;
@ApiModelProperty(notes = "树节点显示字段, 用于树组件,树表组件可不填")
private String treeNodeField;
@ApiModelProperty(notes = "父节点字段所存储的字段")
private String parentIdValueField;
@ApiModelProperty(notes = "父节点字段参数")
private String parentIdParam;
@ApiModelProperty(notes = "父节点字段")
private String parentIdField;
@ApiModelProperty(notes = "是否有子节点字段")
private String hasChildrenField;
@ApiModelProperty(notes = "默认根节点的父节点ID的值如果不设置则默认为0")
private String rootNodeParentIdValue;
/**
*
*/

@ -8,7 +8,7 @@ import com.gccloud.dataroom.core.module.manage.dto.DataRoomSearchDTO;
import com.gccloud.dataroom.core.module.manage.service.IDataRoomPageService;
import com.gccloud.dataroom.core.module.manage.vo.StaticFileVO;
import com.gccloud.dataroom.core.permission.Permission;
import com.gccloud.dataroom.core.permission.ScreenPermission;
import com.gccloud.common.permission.ApiPermission;
import com.gccloud.dataroom.core.utils.Webjars;
import com.gccloud.common.exception.GlobalException;
import com.gccloud.common.utils.BeanConvertUtils;
@ -45,7 +45,7 @@ public class DataRoomPageController {
@Resource
private DataRoomConfig bigScreenConfig;
@ScreenPermission(permissions = {Permission.Screen.VIEW})
@ApiPermission(permissions = {Permission.DataRoom.VIEW})
@GetMapping("/info/code/{code}")
@ApiOperation(value = "大屏页/组件详情", position = 10, produces = MediaType.APPLICATION_JSON_VALUE)
public MixinsResp<DataRoomPageDTO> info(@PathVariable("code") String code) {
@ -57,7 +57,7 @@ public class DataRoomPageController {
return resp;
}
@ScreenPermission(permissions = {Permission.Screen.VIEW})
@ApiPermission(permissions = {Permission.DataRoom.VIEW})
@GetMapping("/page")
@ApiOperation(value = "大屏/组件分页列表", position = 10, produces = MediaType.APPLICATION_JSON_VALUE)
public MixinsResp<PageVO<PageEntity>> page(DataRoomSearchDTO searchDTO) {
@ -68,7 +68,7 @@ public class DataRoomPageController {
}
@ScreenPermission(permissions = {Permission.Screen.EDIT})
@ApiPermission(permissions = {Permission.DataRoom.ADD})
@PostMapping("/add")
@ApiOperation(value = "从空白新增大屏/组件", position = 20, produces = MediaType.APPLICATION_JSON_VALUE)
public R<String> add(@RequestBody DataRoomPageDTO bigScreenPageDTO) {
@ -80,7 +80,7 @@ public class DataRoomPageController {
return R.success(bigScreenPageDTO.getCode());
}
@ScreenPermission(permissions = {Permission.Screen.EDIT})
@ApiPermission(permissions = {Permission.DataRoom.UPDATE})
@PostMapping("/update")
@ApiOperation(value = "修改大屏/组件", position = 30, produces = MediaType.APPLICATION_JSON_VALUE)
public R<String> update(@RequestBody DataRoomPageDTO bigScreenPageDTO) {
@ -92,7 +92,7 @@ public class DataRoomPageController {
return R.success(bigScreenPageDTO.getCode());
}
@ScreenPermission(permissions = {Permission.Screen.DELETE})
@ApiPermission(permissions = {Permission.DataRoom.DELETE})
@PostMapping("/delete/{code}")
@ApiOperation(value = "删除大屏/组件", position = 40, produces = MediaType.APPLICATION_JSON_VALUE)
public R<Void> delete(@PathVariable String code) {
@ -104,7 +104,7 @@ public class DataRoomPageController {
return R.success();
}
@ScreenPermission(permissions = {Permission.Screen.EDIT})
@ApiPermission(permissions = {Permission.DataRoom.ADD})
@PostMapping("/copy/{code}")
@ApiOperation(value = "复制大屏/组件", position = 50, produces = MediaType.APPLICATION_JSON_VALUE)
public R<String> copy(@PathVariable String code) {
@ -116,7 +116,7 @@ public class DataRoomPageController {
return R.success(newCode);
}
@ScreenPermission(permissions = {Permission.Screen.EDIT})
@ApiPermission(permissions = {Permission.DataRoom.ADD})
@PostMapping("/add/template")
@ApiOperation(value = "从模板新增大屏页", position = 20, produces = MediaType.APPLICATION_JSON_VALUE)
public R<String> addByTemplate(@RequestBody DataRoomPageDTO bigScreenPageDTO) {
@ -127,7 +127,6 @@ public class DataRoomPageController {
return R.success(code);
}
@ScreenPermission(permissions = {Permission.Screen.TEMPLATE_VIEW})
@PostMapping("/get/template")
@ApiOperation(value = "根据模板获取配置", position = 20, produces = MediaType.APPLICATION_JSON_VALUE)
public MixinsResp<DataRoomPageDTO> getByTemplate(@RequestBody DataRoomPageDTO bigScreenPageDTO) {
@ -138,7 +137,7 @@ public class DataRoomPageController {
}
@ScreenPermission
@ApiPermission
@GetMapping("/bg/list")
@ApiOperation(value = "背景图片列表", position = 60, produces = MediaType.APPLICATION_JSON_VALUE)
public R<List<StaticFileVO>> getBgList() {
@ -154,7 +153,7 @@ public class DataRoomPageController {
return R.success(bgList);
}
@ScreenPermission
@ApiPermission
@GetMapping("/map/list/{level}")
@ApiOperation(value = "地图数据列表", position = 60, produces = MediaType.APPLICATION_JSON_VALUE)
public R<List<StaticFileVO>> getMapJsonList(@PathVariable("level") String level) {

@ -6,8 +6,6 @@ import com.gccloud.dataroom.core.module.template.dto.PageTemplateSearchDTO;
import com.gccloud.dataroom.core.module.template.entity.PageTemplateEntity;
import com.gccloud.dataroom.core.module.template.service.IPageTemplateService;
import com.gccloud.dataroom.core.module.template.vo.PageTemplateVO;
import com.gccloud.dataroom.core.permission.Permission;
import com.gccloud.dataroom.core.permission.ScreenPermission;
import com.gccloud.common.controller.SuperController;
import com.gccloud.common.utils.BeanConvertUtils;
import com.gccloud.common.validator.ValidatorUtils;
@ -47,7 +45,6 @@ public class PageTemplateController extends SuperController {
* @param searchDTO
* @return
*/
@ScreenPermission(permissions = {Permission.Screen.TEMPLATE_VIEW})
@GetMapping("/page")
@ApiOperation(value = "分页查询", position = 10, notes = "分页查询列表", produces = MediaType.APPLICATION_JSON_VALUE)
@ApiImplicitParams({@ApiImplicitParam(name = "current", value = "页码", paramType = "query", required = true, dataType = "int"), @ApiImplicitParam(name = "size", value = "每页条数", paramType = "query", required = true, dataType = "int"), @ApiImplicitParam(name = "searchKey", value = "查询条件", paramType = "query", dataType = "string")})
@ -68,7 +65,6 @@ public class PageTemplateController extends SuperController {
* @param searchDTO
* @return
*/
@ScreenPermission(permissions = {Permission.Screen.TEMPLATE_VIEW})
@GetMapping("/list")
@ApiOperation(value = "列表查询", position = 10, notes = "查询列表", produces = MediaType.APPLICATION_JSON_VALUE)
public R<List<PageTemplateVO>> getList(@ApiParam(name = "查询", value = "传入查询的业务条件", required = true) PageTemplateSearchDTO searchDTO) {
@ -88,7 +84,6 @@ public class PageTemplateController extends SuperController {
* @param id
* @return
*/
@ScreenPermission(permissions = {Permission.Screen.TEMPLATE_VIEW})
@GetMapping("/info/{id}")
@ApiOperation(value = "详情", position = 20, notes = "获取详情", produces = MediaType.APPLICATION_JSON_VALUE)
public R<PageTemplateVO> getById(@ApiParam(name = "id", value = "传入String格式", required = true) @PathVariable("id") String id) {
@ -103,7 +98,6 @@ public class PageTemplateController extends SuperController {
* @param pageTemplateDTO
* @return
*/
@ScreenPermission(permissions = {Permission.Screen.TEMPLATE_EDIT})
@PostMapping("/add")
@ApiOperation(value = "新增", position = 30, notes = "新增数据", produces = MediaType.APPLICATION_JSON_VALUE)
public R<String> add(@ApiParam(name = "新增对象", value = "传入json格式", required = true) @RequestBody PageTemplateDTO pageTemplateDTO) {
@ -119,7 +113,6 @@ public class PageTemplateController extends SuperController {
* @param pageTemplateDTO
* @return
*/
@ScreenPermission(permissions = {Permission.Screen.TEMPLATE_EDIT})
@PostMapping("/update")
@ApiOperation(value = "更新", position = 40, notes = "更新数据", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public R<Void> update(@ApiParam(name = "更新对象", value = "传入json格式", required = true) @RequestBody PageTemplateDTO pageTemplateDTO) {
@ -136,7 +129,6 @@ public class PageTemplateController extends SuperController {
* @param idList
* @return
*/
@ScreenPermission(permissions = {Permission.Screen.TEMPLATE_DELETE})
@PostMapping("/delete")
@ApiOperation(value = "删除", position = 50, notes = "删除", produces = MediaType.APPLICATION_JSON_VALUE)
public R<Void> deleteById(@ApiParam(name = "id列表", value = "传入id列表", required = true) @RequestBody List<String> idList) {

@ -16,15 +16,13 @@ public class DataRoomPermissionClient {
@Autowired(required = false)
private IDataRoomPermissionService tokenService;
public boolean verifyApiPermission(HttpServletRequest request, String... permissions) {
boolean verify = true;
if (tokenService != null) {
verify = tokenService.verifyApiPermission(request, permissions);
}
return verify;
}
/**
* 访
* @param request
* @param pageCode
* @return
*/
public boolean verifyDataPermission(HttpServletRequest request, String pageCode) {
boolean verify = true;
if (tokenService != null) {

@ -10,15 +10,6 @@ import javax.servlet.http.HttpServletRequest;
*/
public interface IDataRoomPermissionService {
/**
*
* @param request
* @param permission
* @return
*/
boolean verifyApiPermission(HttpServletRequest request, String... permission);
/**
* 访
* @param request

@ -1,61 +0,0 @@
package com.gccloud.dataroom.core.permission;
import com.gccloud.common.exception.GlobalException;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Method;
import java.util.Objects;
/**
* @author hongyang
* @version 1.0
* @date 2023/5/15 10:51
*/
@Slf4j
@Aspect
@Component("dataRoomLoginRequiredAspect")
public class LoginRequiredAspect {
@Resource
private DataRoomPermissionClient tokenClient;
@Before("@annotation(loginRequired) || @within(loginRequired)")
public void doBefore(JoinPoint joinPoint, ScreenPermission loginRequired) {
// 获取request
HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
// 判断方法所属的类是否标记了该注解
Class<?> targetClass = joinPoint.getTarget().getClass();
ScreenPermission classAnnotation = targetClass.getAnnotation(ScreenPermission.class);
boolean classRequired = (classAnnotation != null && classAnnotation.required());
// 判断方法是否标记了该注解
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
Method method = signature.getMethod();
ScreenPermission methodAnnotation = method.getAnnotation(ScreenPermission.class);
boolean methodRequired = (methodAnnotation != null && methodAnnotation.required());
// 判断是否需要登录权限,就近原则,方法上有优先方法上的,方法上没有则使用类上的
boolean required = methodRequired || classRequired;
if (required) {
// 获取权限
String[] permissions = methodAnnotation != null ? methodAnnotation.permissions() : classAnnotation.permissions();
// 校验token
boolean verify = tokenClient.verifyApiPermission(request, permissions);
if (!verify) {
throw new GlobalException("请求权限不足");
}
}
}
@AfterThrowing(pointcut = "@annotation(loginRequired) || @within(loginRequired)")
public void doAfterThrowing(JoinPoint joinPoint, ScreenPermission loginRequired) {
// 记录日志等操作
}
}

@ -1,16 +1,18 @@
package com.gccloud.dataroom.core.permission;
import com.gccloud.dataset.constant.DatasetConstant;
/**
* @author hongyang
* @version 1.0
* @date 2023/5/15 17:08
*/
public interface Permission {
public interface Permission extends DatasetConstant.Permission {
/**
*
*/
interface Screen {
interface DataRoom {
/**
* /
@ -18,85 +20,20 @@ public interface Permission {
String VIEW = "screen:view";
/**
* /
*/
String EDIT = "screen:edit";
/**
* /
*/
String DELETE = "screen:delete";
/**
*
*/
String TEMPLATE_VIEW = "screen:template:view";
/**
*
*/
String TEMPLATE_EDIT = "screen:template:edit";
/**
*
*/
String TEMPLATE_DELETE = "screen:template:delete";
}
interface DataSource {
/**
*
* /
*/
String VIEW = "dataSource:view";
String ADD = "screen:add";
/**
*
*/
String EDIT = "dataSource:edit";
/**
*
*/
String DELETE = "dataSource:delete";
/**
*
*/
String TEST = "dataSource:test";
}
interface DataSet {
/**
*
*/
String CATEGORY = "dataSet:category";
/**
*
*/
String VIEW = "dataSet:view";
/**
*
* /
*/
String EDIT = "dataSet:edit";
String UPDATE = "screen:update";
/**
*
* /
*/
String DELETE = "dataSet:delete";
String DELETE = "screen:delete";
/**
*
*/
String EXECUTE = "dataSet:execute";
}
}

@ -1,20 +0,0 @@
package com.gccloud.dataroom.core.permission;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* @author hongyang
* @version 1.0
* @date 2023/5/15 10:51
*/
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface ScreenPermission {
boolean required() default true;
String[] permissions() default {};
}

@ -50,16 +50,17 @@
<hanlp.version>portable-1.7.8</hanlp.version>
<hutool.version>5.3.1</hutool.version>
<guava.version>20.0</guava.version>
<jackson.core.version>2.13.3</jackson.core.version>
<jackson.version.core>2.13.3</jackson.version.core>
<json.version>20220320</json.version>
<druid.version>1.2.11</druid.version>
<p6spy.version>3.9.0</p6spy.version>
<ojdbc8.version>12.2.0.1</ojdbc8.version>
<oracle-database.version>12.2.0.1</oracle-database.version>
<mysql.version>5.1.49</mysql.version>
<postgresql.version>42.3.3</postgresql.version>
<clickhouse.version>0.3.2</clickhouse.version>
<commons-io.version>2.2</commons-io.version>
<dataset.core.version>0.0.1.2023071001.Alpha</dataset.core.version>
<okhttp3.version>4.9.1</okhttp3.version>
<dataset.core.version>0.0.1.2023071101.Alpha</dataset.core.version>
</properties>
<dependencyManagement>

Loading…
Cancel
Save