@FunctionalInterface public interface ForbiddenWordProvider
CsvWordForbid
による禁止語彙のチェックを行う際の語彙を提供するためのインタフェースです。
語彙を別ファイルやDBから取得する時などサービスクラスとして実装します。
基本的な使い方は、 CsvWordForbid
のJavaDocを参照してください。
フィールドごとにリソースを切り替えたい場合は、メソッドの引数FieldAccessor
で判定を行います。
また、独自のパラメータを渡したい時は、独自のアノテーションを作成し、それをフィールドに付与して、
引数FieldAccessor
から取得して判定します。
// 読み込むリソースを定義されているフィールドやクラスで分ける場合
public class FileForbiddenWordProvider implements ForbiddenWordProvider {
@Override
public Collection<String> getForbiddenWords(final FieldAccessor field) {
final String path;
if(field.getDeclaredClass().equals(AdminCsv.class)) {
path = "forbbidden_word_admin.txt";
} else {
path = "forbbidden_word.txt";
}
try {
return Files.readAllLines(new File(path).toPath(), Charset.forName("UTF-8"));
} catch (IOException e) {
throw new RuntimeException("fail reading the forbidden words file.", e);
}
}
}
Spring Frameworkと連携している場合は、プロバイダクラスをSpringBeanとして登録しておくことでインジェクションされます。
また、メソッドgetForbiddenWords(FieldAccessor)
は、定義したフィールド単位に呼ばれるため、
多数のフィールドで定義していると何度も呼ばれ、効率が悪くなる場合があります。
このようなときは、Spring Framework 3.1から追加された Cache Abstraction(キャッシュの抽象化)機能を使うと改善できます。
// SpringBeanとして登録する場合。
@Service
@Transactional
public class ForbiddenWordProviderImpl implements ForbiddenWordProvider {
// リポジトリのインジェクション
@Autowired
private ForbiddenWordRepository forbiddenWordRepository;
@Override
public Collection<String> getForbiddenWords(final FieldAccessor field) {
final Role role;
if(field.getDeclaredClass().equals(AdminCsv.class)) {
role = Role.admin;
} else {
role = Role.normal;
}
return loadWords(role).stream()
.map(dto -> dto.getWord())
.collect(Collectors.toList());
}
// リポジトリから取得した内容をキャッシュする。
// 引数 role をキーにして、区別する。
@Transactional(readOnly = true)
@Cacheable(cacheNames="forbbidenWords", key="#role")
public List<WordDto> loadWords(Role role) {
if(role.euals(Role.admin)) {
return forbiddenWordRepository.findByRole(role);
} else {
return forbiddenWordRepository.findAll();
}
}
}
修飾子とタイプ | メソッドと説明 |
---|---|
Collection<String> |
getForbiddenWords(FieldAccessor field)
語彙の一覧を取得します。
|
Collection<String> getForbiddenWords(FieldAccessor field)
field
- フィールド情報。フィールドによって取得するリソースを切り替える際に利用します。Copyright © 2022 mygreen. All rights reserved.