敏感词管理接口完善

master
chenyuepan 1 month ago
parent 757bc0e5fc
commit 7ad15df234

@ -42,7 +42,6 @@ public class VenueReservationServiceApplication {
MediaType.TEXT_HTML,
MediaType.TEXT_PLAIN));
restTemplate.getMessageConverters().add(mappingJackson2HttpMessageConverter);
return restTemplate;
}
@ -57,5 +56,4 @@ public class VenueReservationServiceApplication {
mapper.configure(com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
return mapper;
}
}

@ -0,0 +1,16 @@
package com.example.venue_reservation_service.config;
import jakarta.annotation.PostConstruct;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
@Component
@Slf4j
public class CacheInitializer {
@PostConstruct // 在Bean初始化后执行[5](@ref)
public void init() {
log.info("敏感词库已加载到Redis");
}
}

@ -1,7 +1,9 @@
package com.example.venue_reservation_service.controller;
import com.example.venue_reservation_service.domain.SensitiveWord;
import com.example.venue_reservation_service.dto.PageDTO;
import com.example.venue_reservation_service.dto.SensitiveWordDTO;
import com.example.venue_reservation_service.dto.WordDTO;
import com.example.venue_reservation_service.service.SensitiveWordService;
import com.example.venue_reservation_service.vo.Result;
import io.swagger.annotations.Api;
@ -14,7 +16,7 @@ import org.springframework.web.bind.annotation.*;
* Controller
*/
@RestController
@RequestMapping("/sensitiveword")
@RequestMapping("/word")
@CrossOrigin
@Api("敏感词管理")
@Slf4j
@ -28,10 +30,9 @@ public class SensitiveWordController {
*/
@ApiOperation("获取敏感词数据")
@PostMapping("/query")
public Result query(@RequestBody PageDTO dto) {
public Result query(@RequestBody WordDTO dto) {
return sensitiveWordService.getSensitiveWords(dto);
}
/**
*
*/
@ -47,9 +48,8 @@ public class SensitiveWordController {
*/
@ApiOperation("修改敏感词")
@PostMapping("/update")
public Result update(@RequestParam("id") Integer id,
@RequestBody SensitiveWordDTO dto) {
return sensitiveWordService.updateSensitiveWord(id, dto);
public Result update(@RequestBody SensitiveWord word) {
return sensitiveWordService.updateSensitiveWord(word);
}
/**
@ -62,5 +62,9 @@ public class SensitiveWordController {
return sensitiveWordService.removeSensitiveWord(id);
}
@ApiOperation("启用/禁用敏感词")
@GetMapping("/set/{id}")
public Result set(@PathVariable("id") Integer id){
return sensitiveWordService.set(id);
}
}

@ -33,7 +33,7 @@ public class UserController {
@ApiOperation("管理员登录")
@PostMapping("/admin")
@Log(operationType = "POST", operationDesc = "场馆管理员登录,用户账号为#{#body.account}")
// @Log(operationType = "POST", operationDesc = "场馆管理员登录,用户账号为#{#body.account}")
public Result adminLogin(@RequestBody AdminDTO dto){
return userService.adminLogin(dto);
}

@ -1,13 +0,0 @@
package com.example.venue_reservation_service.controller;
import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/word")
@CrossOrigin
@Api("敏感词管理")
public class WordController {
}

@ -18,9 +18,9 @@ public class SensitiveWord {
private String word;
private String level;
private Integer level;
private String status;
private Integer status;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")

@ -5,8 +5,12 @@ import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
/**
*
@ -34,52 +38,14 @@ public class UserLike implements Serializable {
/**
*
*/
private Date createTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
/**
*
*/
@TableField(exist = false)
private static final long serialVersionUID = 1L;
@Override
public boolean equals(Object that) {
if (this == that) {
return true;
}
if (that == null) {
return false;
}
if (getClass() != that.getClass()) {
return false;
}
UserLike other = (UserLike) that;
return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId()))
&& (this.getUserId() == null ? other.getUserId() == null : this.getUserId().equals(other.getUserId()))
&& (this.getCommentId() == null ? other.getCommentId() == null : this.getCommentId().equals(other.getCommentId()))
&& (this.getCreateTime() == null ? other.getCreateTime() == null : this.getCreateTime().equals(other.getCreateTime()));
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((getId() == null) ? 0 : getId().hashCode());
result = prime * result + ((getUserId() == null) ? 0 : getUserId().hashCode());
result = prime * result + ((getCommentId() == null) ? 0 : getCommentId().hashCode());
result = prime * result + ((getCreateTime() == null) ? 0 : getCreateTime().hashCode());
return result;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(getClass().getSimpleName());
sb.append(" [");
sb.append("Hash = ").append(hashCode());
sb.append(", id=").append(id);
sb.append(", userId=").append(userId);
sb.append(", commentId=").append(commentId);
sb.append(", createTime=").append(createTime);
sb.append(", serialVersionUID=").append(serialVersionUID);
sb.append("]");
return sb.toString();
}
}

@ -1,85 +0,0 @@
package com.example.venue_reservation_service.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
/**
*
* @TableName venue_word
*/
@TableName(value ="venue_word")
@Data
public class Word implements Serializable {
/**
* ID
*/
@TableId(type = IdType.AUTO)
private Integer id;
/**
*
*/
private String word;
/**
* 1-2-
*/
private String level;
/**
*
*/
private Date createTime;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
@Override
public boolean equals(Object that) {
if (this == that) {
return true;
}
if (that == null) {
return false;
}
if (getClass() != that.getClass()) {
return false;
}
Word other = (Word) that;
return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId()))
&& (this.getWord() == null ? other.getWord() == null : this.getWord().equals(other.getWord()))
&& (this.getLevel() == null ? other.getLevel() == null : this.getLevel().equals(other.getLevel()))
&& (this.getCreateTime() == null ? other.getCreateTime() == null : this.getCreateTime().equals(other.getCreateTime()));
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((getId() == null) ? 0 : getId().hashCode());
result = prime * result + ((getWord() == null) ? 0 : getWord().hashCode());
result = prime * result + ((getLevel() == null) ? 0 : getLevel().hashCode());
result = prime * result + ((getCreateTime() == null) ? 0 : getCreateTime().hashCode());
return result;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(getClass().getSimpleName());
sb.append(" [");
sb.append("Hash = ").append(hashCode());
sb.append(", id=").append(id);
sb.append(", word=").append(word);
sb.append(", level=").append(level);
sb.append(", createTime=").append(createTime);
sb.append(", serialVersionUID=").append(serialVersionUID);
sb.append("]");
return sb.toString();
}
}

@ -8,7 +8,6 @@ public class SensitiveWordDTO {
//敏感词
private String word;
//敏感词等级
private String level;
private Integer level;
}

@ -9,7 +9,7 @@ public class UserInfo {
private String username;
private String phone;
private String userPhone;
private String email;
}

@ -0,0 +1,10 @@
package com.example.venue_reservation_service.dto;
import lombok.Data;
@Data
public class WordDTO extends PageDTO{
private Integer level;
}

@ -0,0 +1,74 @@
package com.example.venue_reservation_service.filter;
import java.util.List;
public class SensitiveFilter {
private final TrieNode root = new TrieNode();
private static final String REPLACEMENT = "***"; // 敏感词替换字符
// 构建字典树
public void buildTrie(List<String> sensitiveWords) {
for (String word : sensitiveWords) {
TrieNode currentNode = root;
// 逐个字符插入树中
for (char c : word.toCharArray()) {
TrieNode child = currentNode.getChild(c);
if (child == null) {
child = new TrieNode();
currentNode.addChild(c, child);
}
currentNode = child;
}
currentNode.setEnd(true); // 标记敏感词结尾
}
}
// 敏感词过滤主方法
public String filter(String text) {
if (text == null || text.isEmpty()) return text;
StringBuilder result = new StringBuilder();
TrieNode currentNode = root;
int begin = 0; // 当前检测起始位置
int position = 0; // 当前扫描位置
while (position < text.length()) {
char c = text.charAt(position);
// 特殊字符处理(如空格、符号)
if (isSymbol(c)) {
if (currentNode == root) {
result.append(c);
begin++;
}
position++;
continue;
}
// 移动到下一节点
currentNode = currentNode.getChild(c);
if (currentNode == null) {
// 未匹配到敏感词
result.append(text.charAt(begin));
position = ++begin;
currentNode = root; // 重置根节点
} else if (currentNode.isEnd()) {
// 发现完整敏感词 → 替换
result.append(REPLACEMENT);
begin = ++position;
currentNode = root;
} else {
// 部分匹配,继续扫描
position++;
}
}
result.append(text.substring(begin)); // 添加剩余文本
return result.toString();
}
// 特殊字符检测(可根据需求扩展)
private boolean isSymbol(char c) {
// 过滤非字母数字字符(可自定义规则)
return !Character.isLetterOrDigit(c) && ((int) c < 0x2E80 || (int) c > 0x9FFF);
}
}

@ -0,0 +1,31 @@
package com.example.venue_reservation_service.filter;
import java.util.HashMap;
import java.util.Map;
public class TrieNode {
// 存储子节点(字符 → 节点映射)
private final Map<Character, TrieNode> children = new HashMap<>();
// 标记是否为敏感词终点
private boolean isEnd = false;
// 添加子节点
public void addChild(char c, TrieNode node) {
children.put(c, node);
}
// 获取子节点
public TrieNode getChild(char c) {
return children.get(c);
}
// 是否为敏感词结尾
public boolean isEnd() {
return isEnd;
}
// 设置终点标记
public void setEnd(boolean end) {
isEnd = end;
}
}

@ -1,18 +0,0 @@
package com.example.venue_reservation_service.mapper;
import com.example.venue_reservation_service.domain.Word;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author 31586
* @description venue_word()Mapper
* @createDate 2025-06-03 15:00:23
* @Entity generator.domain.Word
*/
public interface WordMapper extends BaseMapper<Word> {
}

@ -1,23 +1,24 @@
package com.example.venue_reservation_service.service;
import com.example.venue_reservation_service.domain.SensitiveWord;
import com.example.venue_reservation_service.dto.PageDTO;
import com.example.venue_reservation_service.dto.SensitiveWordDTO;
import com.example.venue_reservation_service.dto.WordDTO;
import com.example.venue_reservation_service.vo.Result;
public interface SensitiveWordService {
// 获取敏感词数据
Result getSensitiveWords(PageDTO dto);
Result getSensitiveWords(WordDTO dto);
// 添加敏感词
Result addSensitiveWord(SensitiveWordDTO dto);
// 更新敏感词
Result updateSensitiveWord(Integer id, SensitiveWordDTO dto);
Result updateSensitiveWord(SensitiveWord word);
// 移除敏感词
Result removeSensitiveWord(Integer id);
Result set(Integer id);
}

@ -1,13 +0,0 @@
package com.example.venue_reservation_service.service;
import com.example.venue_reservation_service.domain.Word;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @author 31586
* @description venue_word()Service
* @createDate 2025-06-03 15:00:23
*/
public interface WordService extends IService<Word> {
}

@ -126,20 +126,11 @@ public class ReservationServiceImpl extends ServiceImpl<ReservationMapper, Reser
// 检查当前时间段内场地是否被禁用
List<Slot> slots = slotMapper.selectList(Wrappers.<Slot>lambdaQuery()
.eq(Slot::getReservationDate, reservationDate)
.and(wrap -> { // 嵌套 OR 条件:( (slot_start < ? AND slot_end > ? ) OR ... )
wrap.or(sub -> sub
.lt(Slot::getSlotStart, start)
.gt(Slot::getSlotEnd, start)
.and(wrap -> wrap
.lt(Slot::getSlotStart, end) // 条件1slot_start < end
.gt(Slot::getSlotEnd, start) // 条件2slot_end > start
)
.or(sub -> sub
.lt(Slot::getSlotStart, end)
.gt(Slot::getSlotEnd, end)
)
.or(sub -> sub
.le(Slot::getSlotStart, start)
.ge(Slot::getSlotEnd, end)
);
}));
for (Slot slot : slots) {
List<VenueSlot> list = venueSlotService.list(Wrappers.<VenueSlot>lambdaQuery()
.eq(VenueSlot::getVenueId, information.getId())
@ -151,26 +142,16 @@ public class ReservationServiceImpl extends ServiceImpl<ReservationMapper, Reser
}
// 判断该预约时间是否合理(即查询用户预约的日期下,该场地的此时间段内是否存在其他的预约订单)
int size = list(Wrappers.<Reservation>lambdaQuery()
long count = count(Wrappers.<Reservation>lambdaQuery()
.eq(Reservation::getReservationDate, reservationDate)
.eq(Reservation::getVenueId, dto.getVenueId())
.in(Reservation::getAuditStatus,1, 2 )
.and(wrap -> { // 嵌套 OR 条件:( (slot_start < ? AND slot_end > ? ) OR ... )
wrap.or(sub -> sub
.lt(Reservation::getStartTime, start)
.in(Reservation::getAuditStatus, 1, 2)
.and(wrap -> wrap
.lt(Reservation::getStartTime, end) // 简化的重叠条件
.gt(Reservation::getEndTime, start)
)
.or(sub -> sub
.lt(Reservation::getStartTime, end)
.gt(Reservation::getEndTime, end)
)
.or(sub -> sub
.le(Reservation::getStartTime, start)
.ge(Reservation::getEndTime, end)
);
}))
.size();
if (size>0) {
if (count>0) {
// 存在其他订单数据,不可预约
return Result.fail().message("预约时间段内存在其他用户订单");
}
@ -216,6 +197,12 @@ public class ReservationServiceImpl extends ServiceImpl<ReservationMapper, Reser
dealReservation(reservation.getId());
};
scheduleUtil.scheduleOneTimeTask(task, reservationDate, end);
// 定时任务解耦设计
scheduleUtil.scheduleOneTimeTask(
() -> dealReservation(reservation.getId()),
reservationDate,
end
);
// 返回订单信息
return Result.ok(payment).message("预约成功");

@ -1,20 +1,21 @@
package com.example.venue_reservation_service.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.venue_reservation_service.domain.SensitiveWord;
import com.example.venue_reservation_service.dto.PageDTO;
import com.example.venue_reservation_service.dto.SensitiveWordDTO;
import com.example.venue_reservation_service.dto.WordDTO;
import com.example.venue_reservation_service.mapper.SensitiveWordMapper;
import com.example.venue_reservation_service.service.SensitiveWordService;
import com.example.venue_reservation_service.vo.QueryVO;
import com.example.venue_reservation_service.vo.Result;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.time.LocalDateTime;
import java.util.Optional;
/**
*
@ -29,9 +30,15 @@ public class SensitiveWordServiceImpl extends ServiceImpl<SensitiveWordMapper, S
*
*/
@Override
public Result getSensitiveWords(PageDTO dto) {
public Result getSensitiveWords(WordDTO dto) {
Page<SensitiveWord> page = new Page<>(dto.getCurrent(), dto.getSize());
page = page(page, null);
LambdaQueryWrapper<SensitiveWord> wrapper = new LambdaQueryWrapper<>();
Integer level = dto.getLevel();
if(level != 0){
wrapper.eq(SensitiveWord::getLevel, level);
}
wrapper.orderByDesc(SensitiveWord::getUpdateTime);
page = page(page, wrapper);
QueryVO<SensitiveWord> vo = new QueryVO<>();
vo.setList(page.getRecords());
vo.setTotal(page.getTotal());
@ -42,39 +49,37 @@ public class SensitiveWordServiceImpl extends ServiceImpl<SensitiveWordMapper, S
*
*/
@Override
public Result addSensitiveWord(SensitiveWordDTO sensitiveWordDTO) {
public Result addSensitiveWord(SensitiveWordDTO dto) {
// 去空格后判断是否重复
String word = sensitiveWordDTO.getWord().trim();
String word = dto.getWord().trim();
if (count(new LambdaQueryWrapper<SensitiveWord>().eq(SensitiveWord::getWord, word)) > 0) {
return Result.fail().message("该敏感词已存在");
}
SensitiveWord sensitiveWord = new SensitiveWord();
SensitiveWord sensitiveWord = BeanUtil.copyProperties(dto, SensitiveWord.class);
sensitiveWord.setWord(word);
sensitiveWord.setLevel(sensitiveWordDTO.getLevel());
sensitiveWord.setStatus("0"); // 默认不启用
sensitiveWord.setStatus(0); // 默认不启用
sensitiveWord.setCreateTime(LocalDateTime.now());
sensitiveWord.setUpdateTime(LocalDateTime.now());
save(sensitiveWord);
return Result.ok().message("添加成功");
}
/**
*
*/
@Override
public Result updateSensitiveWord(Integer id, SensitiveWordDTO sensitiveWordDTO) {
SensitiveWord sensitiveWord = getById(id);
if (sensitiveWord == null) {
return Result.fail().message("未找到对应敏感词");
public Result updateSensitiveWord(SensitiveWord word) {
if(Optional.ofNullable(word).isEmpty() || Optional.ofNullable(word.getId()).isEmpty()){
return Result.fail().message("敏感词记录不存在");
}
sensitiveWord.setWord(sensitiveWordDTO.getWord().trim());
sensitiveWord.setLevel(sensitiveWordDTO.getLevel());
updateById(sensitiveWord);
SensitiveWord origin = getById(word.getId());
if(!origin.getWord().equals(word.getWord())){
// 修改了敏感词内容
if (count(new LambdaQueryWrapper<SensitiveWord>().eq(SensitiveWord::getWord, word.getWord())) > 0) {
return Result.fail().message("该敏感词已存在");
}
}
updateById(word);
return Result.ok().message("修改成功");
}
@ -83,15 +88,28 @@ public class SensitiveWordServiceImpl extends ServiceImpl<SensitiveWordMapper, S
*/
@Override
public Result removeSensitiveWord(Integer id) {
if (!exists(id)) {
return Result.fail().message("未找到对应敏感词");
SensitiveWord word = getById(id);
if(Optional.ofNullable(word).isEmpty()){
return Result.fail().message("未查询到相关敏感词信息");
}
if (word.getStatus() == 1) {
return Result.fail().message("该敏感词已启用,请先进行禁用");
}
removeById(id);
return Result.ok().message("删除成功");
}
// 辅助方法:检查是否存在
private boolean exists(Integer id) {
return count(new LambdaQueryWrapper<SensitiveWord>().eq(SensitiveWord::getId, id)) > 0;
@Override
public Result set(Integer id) {
SensitiveWord word = getById(id);
if(Optional.ofNullable(word).isEmpty()){
return Result.fail().message("未查询到相关敏感词信息");
}
Integer status = word.getStatus();
word.setStatus(status == 1 ? 0 : 1);
updateById(word);
return Result.ok().message("设置成功");
}
}

@ -4,6 +4,7 @@ import cn.hutool.core.lang.UUID;
import cn.hutool.jwt.JWTUtil;
import com.auth0.jwt.JWT;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@ -21,6 +22,7 @@ import com.github.yulichang.wrapper.MPJLambdaWrapper;
import jakarta.annotation.Resource;
import org.apache.commons.io.FilenameUtils;
import org.checkerframework.checker.units.qual.A;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
@ -118,7 +120,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User>
public Result adminLogin(AdminDTO dto) {
String account = dto.getAccount();
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(User::getUsername, account);
wrapper.eq(User::getAccount, account);
User user = getOne(wrapper);
if (getOne(wrapper) == null) {
return Result.fail().message("管理员账号不存在");
@ -165,7 +167,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User>
// TODO 校验手机号是否合法
// 1. 手机号未被他人使用
// 2. 符合国家标准
user.setUserPhone(userInfo.getPhone());
user.setUserPhone(userInfo.getUserPhone());
user.setEmail(userInfo.getEmail());
user.setUpdateTime(LocalDateTime.now());
updateById(user);

@ -1,22 +0,0 @@
package com.example.venue_reservation_service.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.venue_reservation_service.domain.Word;
import com.example.venue_reservation_service.service.WordService;
import com.example.venue_reservation_service.mapper.WordMapper;
import org.springframework.stereotype.Service;
/**
* @author 31586
* @description venue_word()Service
* @createDate 2025-06-03 15:00:23
*/
@Service
public class WordServiceImpl extends ServiceImpl<WordMapper, Word>
implements WordService{
}

@ -28,7 +28,6 @@ public class ScheduleUtil {
System.out.println("指定的执行时间已过,任务不会被安排执行。");
return;
}
taskScheduler.schedule(task, executionDateObj);
}
}

@ -2,17 +2,19 @@
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.venue_reservation_service.mapper.WordMapper">
<mapper namespace="com.example.venue_reservation_service.mapper.SensitiveWordMapper">
<resultMap id="BaseResultMap" type="com.example.venue_reservation_service.domain.Word">
<resultMap id="BaseResultMap" type="com.example.venue_reservation_service.domain.SensitiveWord">
<id property="id" column="id" jdbcType="INTEGER"/>
<result property="word" column="word" jdbcType="VARCHAR"/>
<result property="level" column="level" jdbcType="CHAR"/>
<result property="status" column="status" jdbcType="CHAR"/>
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
<result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
</resultMap>
<sql id="Base_Column_List">
id,word,level,
create_time
id,word,level,status,
create_time,update_time
</sql>
</mapper>

@ -3,6 +3,7 @@ package com.example.venue_reservation_service;
import cn.hutool.core.lang.UUID;
import com.example.venue_reservation_service.controller.UserController;
import com.example.venue_reservation_service.dto.AdminDTO;
import com.example.venue_reservation_service.filter.SensitiveFilter;
import com.example.venue_reservation_service.utils.MD5Util;
import com.example.venue_reservation_service.vo.Result;
import jakarta.annotation.Resource;
@ -28,6 +29,22 @@ class VenueReservationServiceApplicationTests {
void contextLoads() throws Exception {
}
public static void main(String[] args) {
// 1. 初始化敏感词库
List<String> sensitiveWords = Arrays.asList("赌博", "毒品", "色情");
// 2. 构建过滤器
SensitiveFilter filter = new SensitiveFilter();
filter.buildTrie(sensitiveWords);
// 3. 测试文本过滤
String input = "远离赌博,拒绝毒品,健康上网!";
String output = filter.filter(input);
System.out.println("原始文本: " + input);
System.out.println("过滤结果: " + output);
// 输出:远离***,拒绝***,健康上网!
}
}
Loading…
Cancel
Save