Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package com.zyd.blog.controller;

import com.github.pagehelper.PageInfo;
import com.zyd.blog.business.annotation.BussinessLog;
import com.zyd.blog.business.entity.SensitiveWord;
import com.zyd.blog.business.enums.ResponseStatus;
import com.zyd.blog.business.service.BizSensitiveWordService;
import com.zyd.blog.business.vo.SensitiveWordConditionVO;
import com.zyd.blog.framework.object.PageResult;
import com.zyd.blog.framework.object.ResponseVO;
import com.zyd.blog.util.ResultUtil;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/sensitive/word")
public class RestSensitiveWordController {

@Autowired
private BizSensitiveWordService sensitiveWordService;

@RequiresPermissions("sensitive:words")
@PostMapping("/list")
public PageResult list(SensitiveWordConditionVO vo) {
PageInfo<SensitiveWord> pageInfo = sensitiveWordService.findPageBreakByCondition(vo);
return ResultUtil.tablePage(pageInfo);
}

@RequiresPermissions("sensitive:word:add")
@PostMapping(value = "/add")
@BussinessLog("添加敏感词")
public ResponseVO add(SensitiveWord sensitiveWord) {
if (StringUtils.isEmpty(sensitiveWord.getWord())) {
return ResultUtil.error("敏感词不能为空");
}
sensitiveWordService.insert(sensitiveWord);
return ResultUtil.success("成功");
}

@RequiresPermissions("sensitive:word:edit")
@PostMapping("/edit")
@BussinessLog("编辑敏感词")
public ResponseVO edit(SensitiveWord sensitiveWord) {
if (StringUtils.isEmpty(sensitiveWord.getWord())) {
return ResultUtil.error("敏感词不能为空");
}
sensitiveWordService.updateSelective(sensitiveWord);
return ResultUtil.success(ResponseStatus.SUCCESS);
}

@RequiresPermissions("sensitive:word:delete")
@PostMapping("/remove")
@BussinessLog("删除敏感词")
public ResponseVO remove(Long[] ids) {
if (null == ids) {
return ResultUtil.error("请至少选择一条记录");
}
for (Long id : ids) {
sensitiveWordService.removeByPrimaryKey(id);
}
return ResultUtil.success("成功删除 [" + ids.length + "] 条敏感词");
}

@RequiresPermissions("sensitive:words")
@PostMapping("/get/{id}")
@BussinessLog("获取敏感词详情")
public ResponseVO get(@PathVariable Long id) {
return ResultUtil.success(null, sensitiveWordService.getByPrimaryKey(id));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
package com.zyd.blog.business.entity;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.zyd.blog.persistence.beans.BizSensitiveWord;
import java.util.Date;

public class SensitiveWord {
private BizSensitiveWord bizSensitiveWord;
private String matchTypeDesc;
private String statusDesc;

public SensitiveWord() {
this.bizSensitiveWord = new BizSensitiveWord();
}

public SensitiveWord(BizSensitiveWord bizSensitiveWord) {
this.bizSensitiveWord = bizSensitiveWord;
}

@JsonIgnore
public BizSensitiveWord getBizSensitiveWord() {
return this.bizSensitiveWord;
}

// 委托所有字段访问到 bizSensitiveWord
public Long getId() {
return bizSensitiveWord.getId();
}

public void setId(Long id) {
bizSensitiveWord.setId(id);
}

public String getWord() {
return bizSensitiveWord.getWord();
}

public void setWord(String word) {
bizSensitiveWord.setWord(word);
}

public String getMatchType() {
return bizSensitiveWord.getMatchType();
}

public void setMatchType(String matchType) {
bizSensitiveWord.setMatchType(matchType);
}

public Integer getStatus() {
return bizSensitiveWord.getStatus();
}

public void setStatus(Integer status) {
bizSensitiveWord.setStatus(status);
}

public String getRemark() {
return bizSensitiveWord.getRemark();
}

public void setRemark(String remark) {
bizSensitiveWord.setRemark(remark);
}

public Date getCreateTime() {
return bizSensitiveWord.getCreateTime();
}

public void setCreateTime(Date createTime) {
bizSensitiveWord.setCreateTime(createTime);
}

public Date getUpdateTime() {
return bizSensitiveWord.getUpdateTime();
}

public void setUpdateTime(Date updateTime) {
bizSensitiveWord.setUpdateTime(updateTime);
}

// 扩展字段
public String getMatchTypeDesc() {
return matchTypeDesc;
}

public void setMatchTypeDesc(String matchTypeDesc) {
this.matchTypeDesc = matchTypeDesc;
}

public String getStatusDesc() {
return statusDesc;
}

public void setStatusDesc(String statusDesc) {
this.statusDesc = statusDesc;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.zyd.blog.business.service;

import com.github.pagehelper.PageInfo;
import com.zyd.blog.business.entity.SensitiveWord;
import com.zyd.blog.business.vo.SensitiveWordConditionVO;
import com.zyd.blog.framework.object.AbstractService;

import java.util.List;

public interface BizSensitiveWordService extends AbstractService<SensitiveWord, Long> {
PageInfo<SensitiveWord> findPageBreakByCondition(SensitiveWordConditionVO vo);
List<SensitiveWord> findAllEnabled();
List<String> detectSensitiveWords(String content);
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import com.zyd.blog.business.enums.ConfigKeyEnum;
import com.zyd.blog.business.enums.TemplateKeyEnum;
import com.zyd.blog.business.service.BizCommentService;
import com.zyd.blog.business.service.BizSensitiveWordService;
import com.zyd.blog.business.service.MailService;
import com.zyd.blog.business.service.SysConfigService;
import com.zyd.blog.business.vo.CommentConditionVO;
Expand Down Expand Up @@ -62,6 +63,9 @@ public class BizCommentServiceImpl implements BizCommentService {
@Autowired
private SysConfigService configService;

// 添加这一行
@Autowired
private BizSensitiveWordService sensitiveWordService;
/**
* 分页查询
*
Expand Down Expand Up @@ -187,14 +191,43 @@ public Comment comment(Comment comment) throws ZhydCommentException {
// set当前评论者的位置信息
this.setCurrentLocation(comment);

// 敏感词检测
this.checkSensitiveWords(comment);

// 保存
this.insert(comment);

// 发送邮件通知
this.sendEmail(comment);
return comment;
}
/**
* 敏感词检测
*/
private void checkSensitiveWords(Comment comment) {
SysConfig enableConfig = configService.getByKey("sensitive.word.enable");
if (enableConfig == null || !"1".equals(enableConfig.getConfigValue())) {
return;
}

List<String> hitWords = sensitiveWordService.detectSensitiveWords(comment.getContent());
if (CollectionUtils.isEmpty(hitWords)) {
return;
}

SysConfig strategyConfig = configService.getByKey("sensitive.word.strategy");
String strategy = strategyConfig != null ? strategyConfig.getConfigValue() : "pending";

if ("reject".equals(strategy)) {
comment.setStatus(CommentStatusEnum.REJECT.toString());
comment.setRemark("包含敏感词:" + String.join(", ", hitWords));
} else {
comment.setStatus(CommentStatusEnum.VERIFYING.toString());
comment.setRemark("包含敏感词,待审核:" + String.join(", ", hitWords));
}

log.info("评论包含敏感词:{},处理策略:{}", hitWords, strategy);
}
/**
* 过滤评论内容
*
Expand Down
Loading