Giải pháp kiểm tra từ nhạy cảm trong ứng dụng Java

Có thể xây dựng chức năng kiểm tra từ nhạy cảm như một dịch vụ dùng chung, hỗ trợ linh hoạt và dễ tích hợp vào nhiều hệ thống.

1. Thư viện cần thiết

<dependency>
    <groupId>com.github.houbb</groupId>
    <artifactId>sensitive-word</artifactId>
    <version>0.17.0</version>
</dependency>

2. Cấu hình khởi tạo bộ lọc

@Configuration
public class SensitiveFilterConfig {

    @Resource
    private CustomAllowList customAllowList;

    @Resource
    private CustomDenyList customDenyList;

    @Bean
    public SensitiveWordBs wordFilter() {
        return SensitiveWordBs.newInstance()
                .ignoreCase(true)
                .ignoreWidth(true)
                .ignoreNumStyle(true)
                .ignoreChineseStyle(true)
                .ignoreEnglishStyle(true)
                .ignoreRepeat(true)
                .enableWordCheck(true)
                .enableNumCheck(true)
                .charIgnore(SensitiveWordCharIgnores.specialChars())
                .wordDeny(WordDenys.chains(WordDenys.defaults(), customDenyList))
                .wordAllow(WordAllows.chains(WordAllows.defaults(), customAllowList))
                .init();
    }
}

3. Cấu hình danh sách cho phép và cấm

Các danh sách này có thể được cập nhật động từ cơ sở dữ liệu để phản ánh thay đổi theo thời gian thực.

@Component
public class CustomAllowList implements IWordAllow {

    @Resource
    private WordRepository wordRepo;

    @Override
    public List<String> allow() {
        WordQuery query = new WordQuery();
        query.setDeletedFlag(0);
        query.setCategory(2); // Loại: cho phép

        return wordRepo.find(query).stream()
                       .map(Word::getContent)
                       .collect(Collectors.toList());
    }
}
@Component
public class CustomDenyList implements IWordDeny {

    @Resource
    private WordRepository wordRepo;

    @Override
    public List<String> deny() {
        WordQuery query = new WordQuery();
        query.setDeletedFlag(0);
        query.setCategory(1); // Loại: cấm

        return wordRepo.find(query).stream()
                       .map(Word::getContent)
                       .collect(Collectors.toList());
    }
}

4. Cách sử dụng trong code

boolean hasSensitive = wordFilter.contains(inputText); // Kiểm tra xem văn bản có chứa từ nhạy cảm không

wordFilter.init(); // Khởi tạo lại bộ lọc khi cần làm mới danh sách từ

5. Cấu trúc bảng cơ sở dữ liệu

CREATE TABLE sensitive_word (
    id INT UNSIGNED AUTO_INCREMENT COMMENT 'Khóa chính tự tăng',
    content VARCHAR(128) NOT NULL COMMENT 'Từ khóa',
    category TINYINT NULL COMMENT 'Loại: 1=cấm, 2=cho phép',
    tags VARCHAR(200) NULL COMMENT 'Nhãn phân loại',
    deleted_flag TINYINT DEFAULT 0 COMMENT 'Trạng thái xóa: 0=đang dùng, 1=đã xóa',
    remark VARCHAR(200) DEFAULT '' NOT NULL COMMENT 'Ghi chú',
    created_by BIGINT NULL COMMENT 'Người tạo',
    updated_by BIGINT NULL COMMENT 'Người cập nhật',
    created_at DATETIME NULL COMMENT 'Thời gian tạo',
    updated_at DATETIME NULL COMMENT 'Thời gian cập nhật',
    UNIQUE uk_content (content) COMMENT 'Chỉ mục duy nhất theo nội dung',
    PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Bảng lưu trữ từ nhạy cảm';

Thẻ: sensitive-word Java spring-boot database-filter realtime-update

Đăng vào ngày 26 tháng 6 lúc 08:05