【问题标题】:Error creating bean with name 'securityConfiguration': Unsatisfied dependency expressed through field 'userDetailsService'创建名为“securityConfiguration”的 bean 时出错:通过字段“userDetailsS​​ervice”表达的不满足的依赖关系
【发布时间】:2018-04-16 19:35:50
【问题描述】:

我正在尝试创建一个 Spring Boot 应用程序,它使用 Spring Security 和 OAuth2 通过数据库进行身份验证。我正在尝试关注此存储库 (https://github.com/TechPrimers/spring-security-db-example) 的 GitHub 示例,现在遇到此错误。

释义 StackTrace :

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'securityConfiguration': Unsatisfied dependency expressed through field 'userDetailsService'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userDetailsDervice': Unsatisfied dependency expressed through field 'usersRepository'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'usersRepository': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Failed to create query for method public abstract java.util.Optional com.user.path.to.repository.UsersRepository.findByName(java.lang.String)! No property name found for type AccountUser!

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userDetailsDervice': Unsatisfied dependency expressed through field 'usersRepository'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'usersRepository': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Failed to create query for method public abstract java.util.Optional com.user.path.to.repository.UsersRepository.findByName(java.lang.String)! No property name found for type AccountUser!

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'usersRepository': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Failed to create query for method public abstract java.util.Optional com.user.path.to.repository.UsersRepository.findByName(java.lang.String)! No property name found for type AccountUser!

Caused by: java.lang.IllegalArgumentException: Failed to create query for method public abstract java.util.Optional com.user.path.to.repository.UsersRepository.findByName(java.lang.String)! No property name found for type AccountUser!

Caused by: org.springframework.data.mapping.PropertyReferenceException: No property name found for type AccountUser!

这是我的课程:

CustomUserDetailsS​​ervice

  @Service("userDetailsDervice")
  public class CustomUserDetailsService implements UserDetailsService {

  @Autowired
  private UsersRepository usersRepository;


  @Override
  public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
    Optional<AccountUser> optionalUsers = usersRepository.findByName(username);

    optionalUsers
            .orElseThrow(() -> new UsernameNotFoundException("Username not found"));
    return optionalUsers
            .map(CustomUserDetails::new).get();
  }
}

UsersRepository

@Repository
public interface UsersRepository extends JpaRepository<AccountUser, Integer> {
    Optional<AccountUser> findByName(String username);
}

帐户用户

@Entity
@Table(name = "User")
public class AccountUser {

@Column(name = "title")
private String title;

@Column(name = "firstname")
private String firstname;

@Column(name = "lastname")
private String lastName;

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "email")
private String email;

@Column(name = "password")
private String password;

@Column(name = "modified")
private Date modified;

@Column(name = "accessed")
private Date accessed;

/* ... getters and setters ....*/

【问题讨论】:

    标签: java spring spring-security oauth-2.0 spring-jdbc


    【解决方案1】:
    @Repository
    public interface UsersRepository extends JpaRepository<AccountUser, Integer> {
        Optional<AccountUser> findByName(String username);
    }
    

    替换为下面的

    @Repository
    public interface UsersRepository extends JpaRepository<AccountUser, Integer> {
        Optional<AccountUser> findByLastName(String username);
    }
    

    您没有 Name 作为实体的一部分,JPA 无法找到属性 “名字”

    您需要订购

    @Repository 公共接口 UsersRepository 扩展 JpaRepository { 可选 findByLastNameOrderByAccessedDesc(字符串用户名); }

    在这里您将找到 jpa 查询的示例 https://docs.spring.io/spring-data/jpa/docs/1.5.0.RELEASE/reference/html/jpa.repositories.html 具体在本节表 2.3 下。方法名称中支持的关键字

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-07
      • 2021-08-14
      • 2019-05-28
      • 2021-03-01
      • 2020-04-04
      相关资源
      最近更新 更多