Hibernate命名查询和Spring Data SQL注入

时间:2015-09-03 20:27:36

标签: hibernate jpa spring-data spring-data-jpa named-query

我想在我的应用中添加自动完成功能。对于此功能,我使用了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中使用它。 感谢。

1 个答案:

答案 0 :(得分:0)

这不是SQL注入。正因为如此:

userRepository.userSuggest(userInpoutData + "%");

所以你得到:

%%

试试这个:

if (!userInpoutData.isEmpty() && !userInpoutData.equals("%") {
    userRepository.userSuggest(userInpoutData + "%");
}