2012-08-07 194 views
0

我试图实现基于spring安全性的自定义授权。 以下是config.xml文件:春季安全:Autowired userDetailsS​​ervice

<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; 

到控制器类中的一个应用开始失败:

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" /> 
+0

在哪些文件没有你配置自动扫描?配置中的 – 2012-08-07 11:09:21

+0

。请参阅UPD#1 – nKognito 2012-08-07 11:12:33

+0

这只是一个示例..其他服务可以正常工作,Autowired,userDetailsS​​ervice是唯一一个失败的..但在弹簧安全性方面工作正常 – nKognito 2012-08-07 11:17:26

回答

0

在你的配置你有你的豆一com.ejl.skyhandling.service.UserDetailsExtendedService但 您试图访问com.test.service.UserDetailsExtendedService这显然是另一种类型。

请检查您的进口。

+0

我修正了它,这是例如 – nKognito 2012-08-07 11:21:25

0

既然你与价值“的UserDetailsS​​ervice”合格@Service确保@Autowired是

@Autowired 
private UserDetailsExtendedService userDetailsService; 

您目前缺少在变量名中的r - > useDetailsS​​ervice

+0

它不起作用。仍然得到'由于:org.springframework.beans.factory.BeanCreationException:无法自动装载字段:com.hello.services.auth.UserManagementService com.hello.configuration.security.SecurityConfig.userDetailsS​​ervice;嵌套异常是*。*。*。factory.NoSuchBeanDefinitionException:找不到符合条件的[com.hello.services.auth.UserManagementService]类型的符合条件bean:期望至少1个符合此依赖关系自动装配候选资格的bean。 ' – 89n3ur0n 2015-04-17 06:42:08

相关问题