同步 SensitiveWord 敏感词代码,原分支未正确关联仓库
parent
bae4502eb9
commit
3f7d7c3bfa
@ -0,0 +1,22 @@
|
|||||||
|
GET http://localhost:81/dev-api/admin-api/system/sensitive-word/get-all-tags
|
||||||
|
Accept: application/json
|
||||||
|
Authorization: Bearer 385d533b781f44f6bb21ea08afeec47c
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
###
|
||||||
|
POST http://localhost:81/dev-api/admin-api/system/sensitive-word/create
|
||||||
|
Content-Type: application/json
|
||||||
|
Authorization: Bearer 1649ff1f8b9a4eeeb458fe93a71c78b5
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "test",
|
||||||
|
"tags": [
|
||||||
|
"bbb,aaa"
|
||||||
|
],
|
||||||
|
"description": "test",
|
||||||
|
"status": true
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
###
|
||||||
@ -0,0 +1,104 @@
|
|||||||
|
package cn.iocoder.yudao.module.system.controller.admin.sensitiveword;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
|
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
|
||||||
|
import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
|
||||||
|
import cn.iocoder.yudao.module.system.controller.admin.sensitiveword.vo.*;
|
||||||
|
import cn.iocoder.yudao.module.system.convert.sensitiveword.SensitiveWordConvert;
|
||||||
|
import cn.iocoder.yudao.module.system.dal.dataobject.sensitiveword.SensitiveWordDO;
|
||||||
|
import cn.iocoder.yudao.module.system.service.sensitiveword.SensitiveWordService;
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
|
import io.swagger.annotations.ApiImplicitParam;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import javax.validation.Valid;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||||
|
import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
|
||||||
|
|
||||||
|
@Api(tags = "管理后台 - 敏感词")
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/system/sensitive-word")
|
||||||
|
@Validated
|
||||||
|
public class SensitiveWordController {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private SensitiveWordService sensitiveWordService;
|
||||||
|
|
||||||
|
@PostMapping("/create")
|
||||||
|
@ApiOperation("创建敏感词")
|
||||||
|
@PreAuthorize("@ss.hasPermission('system:sensitive-word:create')")
|
||||||
|
public CommonResult<Long> createSensitiveWord(@Valid @RequestBody SensitiveWordCreateReqVO createReqVO) {
|
||||||
|
return success(sensitiveWordService.createSensitiveWord(createReqVO));
|
||||||
|
}
|
||||||
|
|
||||||
|
@PutMapping("/update")
|
||||||
|
@ApiOperation("更新敏感词")
|
||||||
|
@PreAuthorize("@ss.hasPermission('system:sensitive-word:update')")
|
||||||
|
public CommonResult<Boolean> updateSensitiveWord(@Valid @RequestBody SensitiveWordUpdateReqVO updateReqVO) {
|
||||||
|
sensitiveWordService.updateSensitiveWord(updateReqVO);
|
||||||
|
return success(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@DeleteMapping("/delete")
|
||||||
|
@ApiOperation("删除敏感词")
|
||||||
|
@ApiImplicitParam(name = "id", value = "编号", required = true, dataTypeClass = Long.class)
|
||||||
|
@PreAuthorize("@ss.hasPermission('system:sensitive-word:delete')")
|
||||||
|
public CommonResult<Boolean> deleteSensitiveWord(@RequestParam("id") Long id) {
|
||||||
|
sensitiveWordService.deleteSensitiveWord(id);
|
||||||
|
return success(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/get")
|
||||||
|
@ApiOperation("获得敏感词")
|
||||||
|
@ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class)
|
||||||
|
@PreAuthorize("@ss.hasPermission('system:sensitive-word:query')")
|
||||||
|
public CommonResult<SensitiveWordRespVO> getSensitiveWord(@RequestParam("id") Long id) {
|
||||||
|
SensitiveWordDO sensitiveWord = sensitiveWordService.getSensitiveWord(id);
|
||||||
|
return success(SensitiveWordConvert.INSTANCE.convert(sensitiveWord));
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/page")
|
||||||
|
@ApiOperation("获得敏感词分页")
|
||||||
|
@PreAuthorize("@ss.hasPermission('system:sensitive-word:query')")
|
||||||
|
public CommonResult<PageResult<SensitiveWordRespVO>> getSensitiveWordPage(@Valid SensitiveWordPageReqVO pageVO) {
|
||||||
|
PageResult<SensitiveWordDO> pageResult = sensitiveWordService.getSensitiveWordPage(pageVO);
|
||||||
|
return success(SensitiveWordConvert.INSTANCE.convertPage(pageResult));
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/get-tags")
|
||||||
|
@ApiOperation("获取所有敏感词的标签数组")
|
||||||
|
@PreAuthorize("@ss.hasPermission('system:sensitive-word:query')")
|
||||||
|
public CommonResult<Set<String>> getSensitiveWordTags() throws IOException {
|
||||||
|
return success(sensitiveWordService.getSensitiveWordTags());
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/export-excel")
|
||||||
|
@ApiOperation("导出敏感词 Excel")
|
||||||
|
@PreAuthorize("@ss.hasPermission('system:sensitive-word:export')")
|
||||||
|
@OperateLog(type = EXPORT)
|
||||||
|
public void exportSensitiveWordExcel(@Valid SensitiveWordExportReqVO exportReqVO,
|
||||||
|
HttpServletResponse response) throws IOException {
|
||||||
|
List<SensitiveWordDO> list = sensitiveWordService.getSensitiveWordList(exportReqVO);
|
||||||
|
// 导出 Excel
|
||||||
|
List<SensitiveWordExcelVO> datas = SensitiveWordConvert.INSTANCE.convertList02(list);
|
||||||
|
ExcelUtils.write(response, "敏感词.xls", "数据", SensitiveWordExcelVO.class, datas);
|
||||||
|
}
|
||||||
|
|
||||||
|
// @GetMapping("/is-sensitive-word-by-text-and-tag")
|
||||||
|
// @ApiOperation("通过tag判断传入text是否含有敏感词")
|
||||||
|
// @PreAuthorize("@ss.hasPermission('system:sensitive-word:checkbytextandtag')")
|
||||||
|
// public CommonResult<Boolean> isSensitiveWordByTextAndTag(@NotBlank String text, @NotBlank String tag) throws IOException {
|
||||||
|
// return success(sensitiveWordApi.isSensitiveWordByTextAndTag(text,tag));
|
||||||
|
// }
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,14 @@
|
|||||||
|
package cn.iocoder.yudao.module.system.controller.admin.sensitiveword.vo;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.ToString;
|
||||||
|
|
||||||
|
@ApiModel("管理后台 - 敏感词创建 Request VO")
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@ToString(callSuper = true)
|
||||||
|
public class SensitiveWordCreateReqVO extends SensitiveWordBaseVO {
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,23 @@
|
|||||||
|
package cn.iocoder.yudao.module.system.controller.admin.sensitiveword.vo;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.ToString;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
@ApiModel("管理后台 - 敏感词 Response VO")
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@ToString(callSuper = true)
|
||||||
|
public class SensitiveWordRespVO extends SensitiveWordBaseVO {
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "编号", required = true, example = "1")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "创建时间", required = true)
|
||||||
|
private Date createTime;
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,21 @@
|
|||||||
|
package cn.iocoder.yudao.module.system.controller.admin.sensitiveword.vo;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.ToString;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
|
@ApiModel("管理后台 - 敏感词更新 Request VO")
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@ToString(callSuper = true)
|
||||||
|
public class SensitiveWordUpdateReqVO extends SensitiveWordBaseVO {
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "编号", required = true, example = "1")
|
||||||
|
@NotNull(message = "编号不能为空")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,36 @@
|
|||||||
|
package cn.iocoder.yudao.module.system.convert.sensitiveword;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
|
import cn.iocoder.yudao.module.system.controller.admin.sensitiveword.vo.SensitiveWordCreateReqVO;
|
||||||
|
import cn.iocoder.yudao.module.system.controller.admin.sensitiveword.vo.SensitiveWordExcelVO;
|
||||||
|
import cn.iocoder.yudao.module.system.controller.admin.sensitiveword.vo.SensitiveWordRespVO;
|
||||||
|
import cn.iocoder.yudao.module.system.controller.admin.sensitiveword.vo.SensitiveWordUpdateReqVO;
|
||||||
|
import cn.iocoder.yudao.module.system.dal.dataobject.sensitiveword.SensitiveWordDO;
|
||||||
|
import org.mapstruct.Mapper;
|
||||||
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 敏感词 Convert
|
||||||
|
*
|
||||||
|
* @author 永不言败
|
||||||
|
*/
|
||||||
|
@Mapper
|
||||||
|
public interface SensitiveWordConvert {
|
||||||
|
|
||||||
|
SensitiveWordConvert INSTANCE = Mappers.getMapper(SensitiveWordConvert.class);
|
||||||
|
|
||||||
|
SensitiveWordDO convert(SensitiveWordCreateReqVO bean);
|
||||||
|
|
||||||
|
SensitiveWordDO convert(SensitiveWordUpdateReqVO bean);
|
||||||
|
|
||||||
|
SensitiveWordRespVO convert(SensitiveWordDO bean);
|
||||||
|
|
||||||
|
List<SensitiveWordRespVO> convertList(List<SensitiveWordDO> list);
|
||||||
|
|
||||||
|
PageResult<SensitiveWordRespVO> convertPage(PageResult<SensitiveWordDO> page);
|
||||||
|
|
||||||
|
List<SensitiveWordExcelVO> convertList02(List<SensitiveWordDO> list);
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,47 @@
|
|||||||
|
package cn.iocoder.yudao.module.system.dal.mysql.sensitiveword;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
|
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
||||||
|
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||||
|
import cn.iocoder.yudao.module.system.controller.admin.sensitiveword.vo.SensitiveWordExportReqVO;
|
||||||
|
import cn.iocoder.yudao.module.system.controller.admin.sensitiveword.vo.SensitiveWordPageReqVO;
|
||||||
|
import cn.iocoder.yudao.module.system.dal.dataobject.sensitiveword.SensitiveWordDO;
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
import org.apache.ibatis.annotations.Select;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 敏感词 Mapper
|
||||||
|
*
|
||||||
|
* @author 永不言败
|
||||||
|
*/
|
||||||
|
@Mapper
|
||||||
|
public interface SensitiveWordMapper extends BaseMapperX<SensitiveWordDO> {
|
||||||
|
|
||||||
|
default PageResult<SensitiveWordDO> selectPage(SensitiveWordPageReqVO reqVO) {
|
||||||
|
return selectPage(reqVO, new LambdaQueryWrapperX<SensitiveWordDO>()
|
||||||
|
.likeIfPresent(SensitiveWordDO::getName, reqVO.getName())
|
||||||
|
.likeIfPresent(SensitiveWordDO::getTags, reqVO.getTag())
|
||||||
|
.eqIfPresent(SensitiveWordDO::getStatus, reqVO.getStatus())
|
||||||
|
.betweenIfPresent(SensitiveWordDO::getCreateTime, reqVO.getBeginCreateTime(), reqVO.getEndCreateTime())
|
||||||
|
.orderByDesc(SensitiveWordDO::getId));
|
||||||
|
}
|
||||||
|
|
||||||
|
default List<SensitiveWordDO> selectList(SensitiveWordExportReqVO reqVO) {
|
||||||
|
return selectList(new LambdaQueryWrapperX<SensitiveWordDO>()
|
||||||
|
.likeIfPresent(SensitiveWordDO::getName, reqVO.getName())
|
||||||
|
.likeIfPresent(SensitiveWordDO::getTags, reqVO.getTag())
|
||||||
|
.eqIfPresent(SensitiveWordDO::getStatus, reqVO.getStatus())
|
||||||
|
.betweenIfPresent(SensitiveWordDO::getCreateTime, reqVO.getBeginCreateTime(), reqVO.getEndCreateTime())
|
||||||
|
.orderByDesc(SensitiveWordDO::getId));
|
||||||
|
}
|
||||||
|
|
||||||
|
default SensitiveWordDO selectByName(String name) {
|
||||||
|
return selectOne(SensitiveWordDO::getName, name);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Select("SELECT id FROM system_sensitive_word WHERE update_time > #{maxUpdateTime} LIMIT 1")
|
||||||
|
SensitiveWordDO selectExistsByUpdateTimeAfter(Date maxUpdateTime);
|
||||||
|
}
|
||||||
@ -0,0 +1,29 @@
|
|||||||
|
package cn.iocoder.yudao.module.system.mq.consumer.sensitiveword;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.mq.core.pubsub.AbstractChannelMessageListener;
|
||||||
|
import cn.iocoder.yudao.module.system.mq.message.sensitiveword.SensitiveWordRefreshMessage;
|
||||||
|
import cn.iocoder.yudao.module.system.service.sensitiveword.SensitiveWordService;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 针对 {@link SensitiveWordRefreshMessage} 的消费者
|
||||||
|
*
|
||||||
|
* @author 芋道源码
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
@Slf4j
|
||||||
|
public class SensitiveWordRefreshConsumer extends AbstractChannelMessageListener<SensitiveWordRefreshMessage> {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private SensitiveWordService sensitiveWordService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onMessage(SensitiveWordRefreshMessage message) {
|
||||||
|
log.info("[onMessage][收到 SensitiveWord 刷新消息]");
|
||||||
|
sensitiveWordService.initLocalCache();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,19 @@
|
|||||||
|
package cn.iocoder.yudao.module.system.mq.message.sensitiveword;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.mq.core.pubsub.AbstractChannelMessage;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 敏感词的刷新 Message
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
public class SensitiveWordRefreshMessage extends AbstractChannelMessage {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getChannel() {
|
||||||
|
return "system.sensitive-word.refresh";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,26 @@
|
|||||||
|
package cn.iocoder.yudao.module.system.mq.producer.sensitiveword;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.mq.core.RedisMQTemplate;
|
||||||
|
import cn.iocoder.yudao.module.system.mq.message.sensitiveword.SensitiveWordRefreshMessage;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 敏感词相关的 Producer
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
public class SensitiveWordProducer {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private RedisMQTemplate redisMQTemplate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发送 {@link SensitiveWordRefreshMessage} 消息
|
||||||
|
*/
|
||||||
|
public void sendSensitiveWordRefreshMessage() {
|
||||||
|
SensitiveWordRefreshMessage message = new SensitiveWordRefreshMessage();
|
||||||
|
redisMQTemplate.send(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,86 @@
|
|||||||
|
package cn.iocoder.yudao.module.system.service.sensitiveword;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
|
import cn.iocoder.yudao.module.system.controller.admin.sensitiveword.vo.SensitiveWordCreateReqVO;
|
||||||
|
import cn.iocoder.yudao.module.system.controller.admin.sensitiveword.vo.SensitiveWordExportReqVO;
|
||||||
|
import cn.iocoder.yudao.module.system.controller.admin.sensitiveword.vo.SensitiveWordPageReqVO;
|
||||||
|
import cn.iocoder.yudao.module.system.controller.admin.sensitiveword.vo.SensitiveWordUpdateReqVO;
|
||||||
|
import cn.iocoder.yudao.module.system.dal.dataobject.sensitiveword.SensitiveWordDO;
|
||||||
|
|
||||||
|
import javax.validation.Valid;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 敏感词 Service 接口
|
||||||
|
*
|
||||||
|
* @author 永不言败
|
||||||
|
*/
|
||||||
|
public interface SensitiveWordService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 初始化本地缓存
|
||||||
|
*/
|
||||||
|
void initLocalCache();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建敏感词
|
||||||
|
*
|
||||||
|
* @param createReqVO 创建信息
|
||||||
|
* @return 编号
|
||||||
|
*/
|
||||||
|
Long createSensitiveWord(@Valid SensitiveWordCreateReqVO createReqVO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新敏感词
|
||||||
|
*
|
||||||
|
* @param updateReqVO 更新信息
|
||||||
|
*/
|
||||||
|
void updateSensitiveWord(@Valid SensitiveWordUpdateReqVO updateReqVO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除敏感词
|
||||||
|
*
|
||||||
|
* @param id 编号
|
||||||
|
*/
|
||||||
|
void deleteSensitiveWord(Long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得敏感词
|
||||||
|
*
|
||||||
|
* @param id 编号
|
||||||
|
* @return 敏感词
|
||||||
|
*/
|
||||||
|
SensitiveWordDO getSensitiveWord(Long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得敏感词列表
|
||||||
|
*
|
||||||
|
* @return 敏感词列表
|
||||||
|
*/
|
||||||
|
List<SensitiveWordDO> getSensitiveWordList();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得敏感词分页
|
||||||
|
*
|
||||||
|
* @param pageReqVO 分页查询
|
||||||
|
* @return 敏感词分页
|
||||||
|
*/
|
||||||
|
PageResult<SensitiveWordDO> getSensitiveWordPage(SensitiveWordPageReqVO pageReqVO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得敏感词列表, 用于 Excel 导出
|
||||||
|
*
|
||||||
|
* @param exportReqVO 查询条件
|
||||||
|
* @return 敏感词列表
|
||||||
|
*/
|
||||||
|
List<SensitiveWordDO> getSensitiveWordList(SensitiveWordExportReqVO exportReqVO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得所有敏感词的标签数组
|
||||||
|
*
|
||||||
|
* @return 标签数组
|
||||||
|
*/
|
||||||
|
Set<String> getSensitiveWordTags();
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue