簡體   English   中英

沒有使用hibernate和Spring MVC定義名為'myUserDetailsS​​ervice'的bean

[英]No bean named 'myUserDetailsService' is defined Spring Security with hibernate and Spring MVC

我正在遵循本教程,但是我需要在沒有hbm.xml文件的情況下進行查詢,而是使用dao和service層。 我已經使用休眠為user和user_roles表生成了模型。 我還創建了dao和服務層。

問題是我收到一條錯誤消息,提示未定義名為“ myUserDetailsS​​ervice”的bean。 我知道我必須創建一個bean,但是我不知道該怎么做。

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'myUserDetailsService' is defined
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:641)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1159)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:282)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:328)
    ... 93 more

我已經將整個項目上傳到了github。 任何幫助/建議都非常重要。

https://github.com/kunal7L/Spring-MVC-Security-Hibernate

我的豆子:

 <bean id="userDao" class="com.mkyong.users.dao.UserDaoImpl">
        <property name="sessionFactory" ref="hibernate4AnnotatedSessionFactory" />
    </bean>
    <bean id="userService" class="com.mkyong.users.service.UserServiceImpl">
        <property name="userDao" ref="userDao"></property>
    </bean>

<!--    <bean id="myUserDetailsService" class="com.mkyong.users.service.MyUserDetailsService"> -->
<!--        <property name="userDao" ref="userDao" /> -->
<!--    </bean> -->

完整的MyUserDetailsS​​ervice類:

公共類MyUserDetailsS​​ervice實現UserDetailsS​​ervice {

private UserService userservice;

@Override
public UserDetails loadUserByUsername(final String username) throws UsernameNotFoundException {

    // Programmatic transaction management
    /*
    return transactionTemplate.execute(new TransactionCallback<UserDetails>() {

        public UserDetails doInTransaction(TransactionStatus status) {
            com.mkyong.users.model.User user = userDao.findByUserName(username);
            List<GrantedAuthority> authorities = buildUserAuthority(user.getUserRole());

            return buildUserForAuthentication(user, authorities);
        }

    });*/

    Users user = userservice.findByUserName(username);
    List<GrantedAuthority> authorities = buildUserAuthority(user.getUserRoleses());

    return buildUserForAuthentication(user, authorities);


}

// Converts com.mkyong.users.model.User user to
// org.springframework.security.core.userdetails.User
private User buildUserForAuthentication(Users user, List<GrantedAuthority> authorities) {
    return new User(user.getUsername(), user.getPassword(), user.isEnabled(), true, true, true, authorities);
}

private List<GrantedAuthority> buildUserAuthority(Set<UserRoles> userRoles) {

    Set<GrantedAuthority> setAuths = new HashSet<GrantedAuthority>();

    // Build user's authorities
    for (UserRoles userRole : userRoles) {
        setAuths.add(new SimpleGrantedAuthority(userRole.getRole()));
    }

    List<GrantedAuthority> Result = new ArrayList<GrantedAuthority>(setAuths);

    return Result;
}

}

錯誤非常清楚:

沒有定義名為“ myUserDetailsS​​ervice”的Bean

在文件spring-security.xml中,您引用了一個名為myUserDetailsS​​ervice的bean:

<authentication-manager>
    <authentication-provider user-service-ref="myUserDetailsService" >
        <password-encoder hash="bcrypt" />    
    </authentication-provider>
</authentication-manager>

但是,您已經注釋掉了spring-database.xml中定義該服務的部分

<!--    <bean id="myUserDetailsService" class="com.mkyong.users.service.MyUserDetailsService"> -->
<!--        <property name="userDao" ref="userDao" /> -->
<!--    </bean> -->

這就是為什么會發生錯誤

我通過理解霍隆的邏輯解決了這個問題。 我知道我缺少一個豆子,但我只是不知道在其中引用什么。 所以我用谷歌搜索它,發現MyUserDetailsS​​ervice在UserDetailsS​​ervice上實現,后者是Spring Security的一部分。 因此,剩下要做的就是添加沒有屬性的bean。

<bean id="myUserDetailsService" class="com.mkyong.users.service.MyUserDetailsService" >

    </bean>

很有可能您的Dao對象存在問題,我不確定您如何設置,但是如果使用批注,則必須配置persistanceance.xml並將其放在META-INF文件夾中,並且需要使應用程序上下文已知關於此鏈接,此鏈接將幫助您更好地了解您的問題http://www.journaldev.com/3531/spring-mvc-hibernate-mysql-integration-crud-example-tutorial僅查找Hibernate數據源配置以及如何使用它在您的刀層中。

<beans:bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close">
        <beans:property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <beans:property name="url"
            value="jdbc:mysql://localhost:3306/TestDB" />
        <beans:property name="username" value="pankaj" />
        <beans:property name="password" value="pankaj123" />
    </beans:bean>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM