Я хочу добавить автозаполнение для поиска в моем приложении. Для этой функции я использовал NamedQuery («userSuggest»). В JpaRepository я определяю метод («userSuggest») с одним параметром. Вот мой код:Hibernate Named Query and Spring Data SQL injection
@Entity
@NamedQueries({
@NamedQuery(name = "User.userSuggest", query = "select u from User u where u.userName like :userName") })
public class User implements java.io.Serializable {
private Integer userId;
private String userName;
setter and getter ...
}
и
@Repository("userRepository")
public interface UserRepository extends JpaRepository<User, Integer> {
List<Gene> userSuggest(@Param("userName") String userName);
}
Я называю этот метод ввода пользователем передача данных + знак процента в качестве параметра:
userRepository.userSuggest(userInpoutData + "%");
Теперь проблема: когда пользователь проход «%» (userInpoutData = «%») метод возвращает весь существующий пользователь в базе данных. Как я могу предотвратить эту инъекцию SQL? Я знаю, что использование entityManager.createNamedQuery (например, How To Fix SQL Injection: JPA) решает эту проблему, но я не знаю, как ее использовать с Spring JpaRepository. Спасибо.
Я предполагаю, что это SQL-инъекция так, чтобы решить эту проблему, я должен быть черешок подстановочные. благодаря –