sensitive-word icon indicating copy to clipboard operation
sensitive-word copied to clipboard

指定一个词不是敏感词,但是WordDenys.system()包含该敏感词,导致我这边敏感词校验还是认为这是敏感词

Open AlanFin opened this issue 3 years ago • 11 comments

/**
 * 现在的情况是我想使用WordDenys.system()里面的敏感词汇,但是里面的部分我想去掉,比如WordDenys.system()里面包含“五星红旗”敏感词,我想
 * 将“五星红旗”设置为非敏感词,我就自己实现了IWordAllow类allow()中的方法,我将‘’五星红旗‘’写在这个方法里面初始化,可是初始化后我去校验“五
 * 星红旗”仍然为敏感词
 */
@Bean
public SensitiveWordBs sensitiveWordBs() {
    return SensitiveWordBs.newInstance()
        .wordDeny(WordDenys.chains(WordDenys.system(), myDdWordDeny))
        .wordAllow(WordAllows.chains(WordAllows.system(), myDdWordAllow))
        // 各种其他配置
        .init();
}

AlanFin avatar Jul 26 '22 11:07 AlanFin

看下这个回复吧,这也太坑了!https://github.com/houbb/sensitive-word/issues/20

ft0907 avatar Jul 27 '22 01:07 ft0907

看下这个回复吧,这也太坑了!#20 1、他这个不一样吧,他的的初始化后用wordBs 校验是否包含敏感词,校验存在后又使用SensitiveWordHelper去查询所有敏感词,他都不是使用同一个去校验的; 2、我的是初始化后其他地方直接注入 @Autowired private SensitiveWordBs sensitiveWordBs;然后统一使用sensitiveWordBs校验的还是会失败;

AlanFin avatar Jul 27 '22 01:07 AlanFin

我和一样,通过spring 注入的就是不行,按正常来说应该是属于一个bean,但是它死活就是不行 尝试用一个静态变量去接收,然后init、使用都用这个静态变量去操作。估计可以

ft0907 avatar Jul 27 '22 02:07 ft0907

你去看下我刚刚上传的sensitive-word-admin这个demo吧,好像是可以,估计是我前面敏感词设置的不对,比如我设置的"安门"未非敏感词,但是打"天安门"这三个字会匹配未敏感词

AlanFin avatar Jul 27 '22 02:07 AlanFin

spring 整合可以阅读下:

https://mp.weixin.qq.com/s/rQo75cfMU_OEbTJa0JGMGg

houbb avatar Jul 27 '22 02:07 houbb

spring 整合可以阅读下:

https://mp.weixin.qq.com/s/rQo75cfMU_OEbTJa0JGMGg

已经ok了,thank you

AlanFin avatar Jul 27 '22 02:07 AlanFin

你确定你的代码可以,没有问题?下面是我的代码,但是一样的还是不行,永远返回false!

@RequiredArgsConstructor
public class SensitiveWordConfig {

    @Nonnull
    private final WordAllowImpl wordAllowImpl;
    @Nonnull
    private final WordDenyImpl wordDenyImpl;

    /**
     * 初始化
     *
     * @return 初始化
     */
    @Bean
    public SensitiveWordBs sensitiveWordBs() {
        return SensitiveWordBs.newInstance()
            .wordAllow(WordAllows.chains(WordAllows.system(), wordAllowImpl))
            .wordDeny(WordDenys.chains(WordDenys.system(), wordDenyImpl))
            .init();
    }

}

@Service
@RequiredArgsConstructor
public class WordDenyImpl implements IWordDeny {

    @Override
    public List<String> deny() {
        return Collections.singletonList("你好");
    }

}

// 这里是一个接口类
@Override
    public void createForWordDeny() {
        wordDenyImpl.deny();
        sensitiveWordBs.init();
        System.out.println(sensitiveWordBs.contains("你好"));//永远是false

    }

ft0907 avatar Jul 27 '22 06:07 ft0907

你确定你的代码可以,没有问题?下面是我的代码,但是一样的还是不行,永远返回false! `@Configuration @RequiredArgsConstructor public class SensitiveWordConfig {

@Nonnull
private final WordAllowImpl wordAllowImpl;
@Nonnull
private final WordDenyImpl wordDenyImpl;

/**
 * 初始化
 *
 * @return 初始化
 */
@Bean
public SensitiveWordBs sensitiveWordBs() {
    return SensitiveWordBs.newInstance()
        .wordAllow(WordAllows.chains(WordAllows.system(), wordAllowImpl))
        .wordDeny(WordDenys.chains(WordDenys.system(), wordDenyImpl))
        .init();
}

}`

`@Service @RequiredArgsConstructor public class WordDenyImpl implements IWordDeny {

@Override
public List<String> deny() {
    return Collections.singletonList("你好");
}

}`

    public void createForWordDeny() {
        wordDenyImpl.deny();
        sensitiveWordBs.init();
        System.out.println(sensitiveWordBs.contains("你好"));

    }```

你拉下我的demo来跑下,数据库连接改下,脚本也在里面 https://github.com/AlanFin/sensitive-word-admin.git

AlanFin avatar Jul 27 '22 06:07 AlanFin

代码本身只是最基本的对象创建,和 spring 关系不大。 看一下是不是使用问题

发自我的iPhone

------------------ 原始邮件 ------------------ 发件人: join001 @.> 发送时间: 2022年7月27日 15:02 收件人: houbb/sensitive-word @.> 抄送: 老马啸西风 @.>, Comment @.> 主题: Re: [houbb/sensitive-word] 指定一个词不是敏感词,但是WordDenys.system()包含该敏感词,导致我这边敏感词校验还是认为这是敏感词 (Issue #22)

@.***注入才行,构造函数注入就不行!这作者要改进下,应该是上下文获取方式不太对!

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>

houbb avatar Jul 27 '22 08:07 houbb

代码本身只是最基本的对象创建,和 spring 关系不大。 看一下是不是使用问题 发自我的iPhone ------------------ 原始邮件 ------------------ 发件人: join001 @.> 发送时间: 2022年7月27日 15:02 收件人: houbb/sensitive-word @.> 抄送: 老马啸西风 @.>, Comment @.> 主题: Re: [houbb/sensitive-word] 指定一个词不是敏感词,但是WordDenys.system()包含该敏感词,导致我这边敏感词校验还是认为这是敏感词 (Issue #22) @.注入才行,构造函数注入就不行!这作者要改进下,应该是上下文获取方式不太对! — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.>

找到问题,是因为没有引入数据库实现!具体修改的代码如下

    @Nonnull
    private final SensitiveWordRepository sensitiveWordRepository; 

@Override
public List<String> deny() {
    return sensitiveWordRepository.findAll(); // 这里配置数据库读取值
}

public void createForWordDeny() {
       // wordDenyImpl.deny(); //这行代码也不需要,就可以了
        sensitiveWordBs.init();
        System.out.println(sensitiveWordBs.contains("你好"));
    }

ft0907 avatar Jul 27 '22 09:07 ft0907

@houbb 源代码文件SensitiveWordMap.java文件中的System.out.println能否去掉啊?

ft0907 avatar Jul 28 '22 07:07 ft0907