Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 忘记密码实现spring安全性_Java_Spring_Hibernate_Spring Mvc_Spring Boot - Fatal编程技术网

Java 忘记密码实现spring安全性

Java 忘记密码实现spring安全性,java,spring,hibernate,spring-mvc,spring-boot,Java,Spring,Hibernate,Spring Mvc,Spring Boot,我正在尝试使用spring security实现“忘记密码”字段。但有一个错误,我试图解决,但找不到解决办法。我了解到,JpaRepository执行一些批处理和CRUD操作。Myuser.javamodel类具有所有字段(..email,resetToken) UserRepositoryDao: @Repository("userRepository") public interface UserRepositoryForgetPassword extends JpaRepository&l

我正在尝试使用spring security实现“忘记密码”字段。但有一个错误,我试图解决,但找不到解决办法。我了解到,JpaRepository执行一些批处理和CRUD操作。My
user.java
model类具有所有字段(..email,resetToken)

UserRepositoryDao:

@Repository("userRepository")
public interface UserRepositoryForgetPassword extends JpaRepository<User, Long>{

     Optional<User> findByEmail(String email);
     Optional<User> findByResetToken(String resetToken);

}
public interface UserServiceForgetPassword {

    public Optional<User> findUserByEmail(String email);

    public Optional<User> findUserByResetToken(String resetToken);

    public void save(User user);
}
@Service("userServiceForgetPassword")
public class UserServiceForgetPasswordImpl implements UserServiceForgetPassword {

    @Autowired
    UserRepositoryForgetPassword userRepositoryForgetPassword;

    @Override
    @Transactional
    public Optional<User> findUserByEmail(String email) {
        return userRepositoryForgetPassword.findByEmail(email);
    }

    @Override
    @Transactional
    public Optional<User> findUserByResetToken(String resetToken) {
        return userRepositoryForgetPassword.findByResetToken(resetToken);
    }

    @Override
    @Transactional
    public void save(User user) {
        userRepositoryForgetPassword.save(user);
    }
}
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'fogetPasswordController': Unsatisfied dependency expressed through field 'userServiceForgetPassword'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userServiceForgetPassword': Unsatisfied dependency expressed through field 'userRepositoryForgetPassword'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.pulseBeatMaster.dao.UserRepositoryForgetPassword' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    @RestController
    public class FogetPasswordController {

        @Autowired
        UserServiceForgetPassword userServiceForgetPassword;

        @Autowired
        EmailServiceForgetPassword emailServiceForgetPassword;

        @Autowired
        private BCryptPasswordEncoder bCryptPasswordEncoder;


        //Do the stuffs

}
控制器:

@Repository("userRepository")
public interface UserRepositoryForgetPassword extends JpaRepository<User, Long>{

     Optional<User> findByEmail(String email);
     Optional<User> findByResetToken(String resetToken);

}
public interface UserServiceForgetPassword {

    public Optional<User> findUserByEmail(String email);

    public Optional<User> findUserByResetToken(String resetToken);

    public void save(User user);
}
@Service("userServiceForgetPassword")
public class UserServiceForgetPasswordImpl implements UserServiceForgetPassword {

    @Autowired
    UserRepositoryForgetPassword userRepositoryForgetPassword;

    @Override
    @Transactional
    public Optional<User> findUserByEmail(String email) {
        return userRepositoryForgetPassword.findByEmail(email);
    }

    @Override
    @Transactional
    public Optional<User> findUserByResetToken(String resetToken) {
        return userRepositoryForgetPassword.findByResetToken(resetToken);
    }

    @Override
    @Transactional
    public void save(User user) {
        userRepositoryForgetPassword.save(user);
    }
}
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'fogetPasswordController': Unsatisfied dependency expressed through field 'userServiceForgetPassword'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userServiceForgetPassword': Unsatisfied dependency expressed through field 'userRepositoryForgetPassword'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.pulseBeatMaster.dao.UserRepositoryForgetPassword' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    @RestController
    public class FogetPasswordController {

        @Autowired
        UserServiceForgetPassword userServiceForgetPassword;

        @Autowired
        EmailServiceForgetPassword emailServiceForgetPassword;

        @Autowired
        private BCryptPasswordEncoder bCryptPasswordEncoder;


        //Do the stuffs

}
我希望扩展
JpaRepository
时出错

已编辑


您需要在
UserRepositoryForgetPassword
界面上使用
@Repository
。并在
ApplicationContext.xml
文件配置中添加
@EnableJpaRepositories(basePackages={“com.demo.test.repository”})
以扫描存储库类,并在
ApplicationContext.xml
文件中使用
扫描基本包和类注释。

您需要

  • 通过使用
    @EnableJpaRepositories
    注释
    ApplicationContextConfig
    类来启用Spring数据JPA
  • 配置Spring Data JPA为我们的存储库接口创建实现时扫描的
    基本包
因此,请在您的配置文件(
ApplicationContextConfig
)中添加:


请检查下面的配置类。正如M.Denium所建议的,您不必直接与SessionFactory合作。JPA基于EntityManager的概念工作。我已经做了必要的更改,以使其通过java配置工作。如果您使用的是spring boot,则可以使用application.properties执行大部分配置

    @Configuration
    @PropertySource(value = { "classpath:application.properties" })
    @EnableJpaRepositories(basePackages = "com.pulseBeatMaster.dao", entityManagerFactoryRef = "myEntityManagerFactory", transactionManagerRef = "myTransactionManager")
    public class ApplicationContextConfig {

        // To get properties from application.properties
        // Import @PropertySource(value = { "classpath:application.properties" })
        // Have to use environment.getRequiredProperty();

        @Autowired
        private Environment environment;

        @Bean(name = "dataSource")
        public DataSource getDataSource() {
            BasicDataSource dataSource = new BasicDataSource();
            dataSource.setDriverClassName(environment.getRequiredProperty("jdbc.driverClassName"));
            dataSource.setUrl(environment.getRequiredProperty("jdbc.url"));
            dataSource.setUsername(environment.getRequiredProperty("jdbc.username"));
            dataSource.setPassword(environment.getRequiredProperty("jdbc.password"));

            // normally
            // dataSource.setDriverClassName("com.mysql.jdbc.Driver");

            return dataSource;
        }

        private Properties getHibernateProperties() {
            Properties properties = new Properties();
            properties.put("hibernate.dialect", environment.getRequiredProperty("hibernate.dialect"));
            properties.put("hibernate.show_sql", environment.getRequiredProperty("hibernate.show_sql"));
            properties.put("hibernate.format_sql", environment.getRequiredProperty("hibernate.format_sql"));
            properties.put("hibernate.id.new_generator_mappings",
                    environment.getRequiredProperty("hibernate.new_generator_mappings"));
            properties.put("current_session_context_class", "org.springframework.orm.hibernate5.SpringSessionContext");
            return properties;
        }

        @Autowired
        @Bean(name = "transactionManager")
        public HibernateTransactionManager getTransactionManager(SessionFactory sessionFactory) {
            HibernateTransactionManager transactionManager = new HibernateTransactionManager(sessionFactory);
            return transactionManager;
        }

        @Primary
        @Bean(name="myEntityManagerFactory")
        public LocalContainerEntityManagerFactoryBean myEntityManagerFactory() throws ClassNotFoundException {
            final LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();

            entityManagerFactoryBean.setDataSource(getDataSource());
            // mention packae scan your classes annotated as @Entity
            entityManagerFactoryBean.setPackagesToScan(new String[] { "com.pulseBeatMaster.model" });
            entityManagerFactoryBean.setPersistenceProviderClass(HibernatePersistenceProvider.class);

            final HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
            vendorAdapter.setShowSql(true);
            entityManagerFactoryBean.setJpaVendorAdapter(vendorAdapter);
            entityManagerFactoryBean.setJpaProperties(getHibernateProperties());

            entityManagerFactoryBean.afterPropertiesSet();
            entityManagerFactoryBean.setLoadTimeWeaver(new InstrumentationLoadTimeWeaver());

            return entityManagerFactoryBean;
        }

        @Primary
        @Bean(name = "myTransactionManager")
        public PlatformTransactionManager myTransactionManager() {
            final JpaTransactionManager transactionManager = new JpaTransactionManager();
            try {
                transactionManager.setEntityManagerFactory(myEntityManagerFactory().getObject());
                transactionManager.setDataSource(getDataSource());
                transactionManager.setJpaDialect(new HibernateJpaDialect());
                transactionManager.setJpaProperties(getHibernateProperties());
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
            return transactionManager;
        }

        @Bean
        public PersistenceExceptionTranslationPostProcessor exceptionTranslation() {
            return new PersistenceExceptionTranslationPostProcessor();
        }

        @Bean
        public HibernateExceptionTranslator hibernateExceptionTranslator() {
            return new HibernateExceptionTranslator();
        }

        @Bean
        public JavaMailSender getMailSender() {
            JavaMailSenderImpl mailSender = new JavaMailSenderImpl();

            // Using gmail
            mailSender.setHost(environment.getRequiredProperty("mailSender.host"));
            mailSender.setPort(587);
            mailSender.setUsername(environment.getRequiredProperty("mailSender.username"));
            mailSender.setPassword(environment.getRequiredProperty("mailSender.password"));

            Properties javaMailProperties = new Properties();
            javaMailProperties.put("mail.smtp.starttls.enable", "true");

            javaMailProperties.put("mail.smtp.auth", "true");
            javaMailProperties.put("mail.transport.protocol", "smtp");
            javaMailProperties.put("mail.debug", "true");// Prints out everything on
                                                            // screen

            mailSender.setJavaMailProperties(javaMailProperties);
            return mailSender;
        }

    }
要通过spring引导属性进行最小配置,只需检查以下内容
教程。

看起来您通常不会扫描存储库界面。我们需要查看您的JPA/Spring数据配置。@chrylis我注入了Spring启动程序数据JPA依赖项,并继续上面的编码。显示您的配置class@SangamBelose我在“编辑”中发布了我的配置类para您不需要SessionFactory
之类的东西,因为Spring boot已经为您配置了JPA
EntityManagerFactory
。删除所有本机hibernate资源。这基本上适用于
数据源
只要使用适当的
spring.DataSource.*
属性,您也可以删除它。现在,关于您的异常,请确保Spring Boot主类位于根包中。因此,它涵盖了扫描的所有子包,在您的情况下,
com.pulseBeatMaster
。他使用的是Spring Boot,当检测到时,它会自动启用Spring数据JPA。您不需要显式地启用它。也不需要向界面添加
@Repository
。还有XML文件中的注释吗?你如何看待这种情况?