0

春のセキュリティに基づいてカスタム認証を実装しようとしています。config.xmlは次のとおりです。

<global-method-security pre-post-annotations="enabled" />
    <http use-expressions="true">
        <form-login login-page="/wellcome/" login-processing-url="/login" default-target-url="/" 
            username-parameter="email" password-parameter="password" />
        <remember-me key="skyhandling" token-validity-seconds="-1" />
        <logout invalidate-session="true" logout-success-url="/" logout-url="/logout"/>
        <intercept-url pattern="/administration/**" access="authenticated"/>
        <intercept-url pattern="/wellcome/" access="permitAll"/>
        <intercept-url pattern="/login" access="permitAll"/>
        <intercept-url pattern="/css/**" access="permitAll"/>
        <intercept-url pattern="/images/**" access="permitAll"/>
        <intercept-url pattern="/javascript/**" access="permitAll"/>
    </http>
    <beans:bean id="authenticationProvider"
        class="org.springframework.security.authentication.dao.DaoAuthenticationProvider">
        <beans:property name="userDetailsService" ref="userDetailsService"/>
    </beans:bean>
    <beans:bean id="authenticationManager"
        class="org.springframework.security.authentication.ProviderManager">
        <beans:property name="providers">
            <beans:list>
                <beans:ref local="authenticationProvider" />
            </beans:list>
        </beans:property>
    </beans:bean>
    <beans:bean class="com.test.service.UserDetailsExtendedService" id="userDetailsService" />
    <beans:bean class="org.springframework.security.authentication.encoding.ShaPasswordEncoder" 
        id="passwordEncoder" />
    <authentication-manager>
        <authentication-provider user-service-ref="userDetailsService">
            <password-encoder ref="passwordEncoder" />
        </authentication-provider>
    </authentication-manager>

ユーザー詳細サービス:

@Service("userDetailsService")
@SuppressWarnings("deprecation")
public class UserDetailsExtendedService implements UserDetailsService {
    @Autowired
    private UsersDAO dao;

    /**
     * 
     * @param user
     * @return
     */
    private User prepare(com.test.User user) {
        boolean enabled = user.getState().equals(UserState.Active);

        Collection<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
        for (UserRole r: user.getRoles()) {
          authorities.add(new GrantedAuthorityImpl(r.getName()));
        }

        return new UserDetailsExtended(user.getEmail(), user.getPassword(), user.getNickname(), enabled,
            enabled, enabled, enabled, authorities);
    }

    /**
     * 
     * @param email
     * @return
     */
    @Transactional(readOnly = true)
    public User loadUserByUsername(final String email) 
            throws UsernameNotFoundException, DataAccessException {
        com.test.User user = dao.getByEmail(email);
        if (user == null)
            throw new UsernameNotFoundException(email);

        return prepare(user);
    }
}

すべてが正常に動作します。しかし、私が追加すると

@Autowired 
private UserDetailsExtendedService useDetailsService;

Controllerクラスに入ると、アプリケーションは次のように失敗し始めます。

org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.test.service.UserDetailsExtendedService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

私が逃したものは?ありがとうございました

UPD#1:

 <context:annotation-config />
    <context:component-scan base-package="com.test.service" />
    <bean id="usersDao" class="com.test.dao.UsersDAO" />
    <bean id="eventsLogDao" class="com.test.dao.EventsLogDAO" />
    <bean id="employeesDao" class="com.test.dao.EmployeesDAO" />
    <bean id="dictionariesDao" class="com.test.dao.DictionariesDAO" />
4

2 に答える 2

0

@Service を値「userDetailsS​​ervice」で修飾しているため、@Autowired が

@Autowired
private UserDetailsExtendedService userDetailsService;

現在、変数名に r がありません -> useDetailsS​​ervice

于 2012-08-07T19:35:11.480 に答える
0

構成には がありますcom.ejl.skyhandling.service.UserDetailsExtendedServiceが、Beancom.test.service.UserDetailsExtendedServiceでは明らかに別のタイプにアクセスしようとしています。

インポートを確認してください。

于 2012-08-07T11:20:45.137 に答える