我想在我的应用中添加自动完成功能。对于此功能,我使用了NamedQuery(“userSuggest”)。在JpaRepository中,我使用一个参数定义了一个方法(“userSuggest”)。 这是我的代码:
@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中使用它。 感谢。
答案 0 :(得分:0)
这不是SQL注入。正因为如此:
userRepository.userSuggest(userInpoutData + "%");
所以你得到:
%%
试试这个:
if (!userInpoutData.isEmpty() && !userInpoutData.equals("%") {
userRepository.userSuggest(userInpoutData + "%");
}