2015-05-29 14 views
0

配置Spring Security直到現在,我一直在使用安全領域來驗證和授權用戶。 但是,我想切換到Spring Security框架,最好不要使用Spring框架的其他任何部分。 我設法設置了一個httpBasic內存中驗證,它工作正常。使用EJB

現在我想創建一個自定義UserDetailsS​​ervice實現我自己的授權。 我的UserDetailsS​​ervice-Implementation是一個無狀態的EJB,我無法注入到SecurityConfig中,出現錯誤 我該怎麼做才能使它工作?

謝謝!

這是迄今爲止我唯一的配置:

public class SecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer { 

    public SecurityWebApplicationInitializer() { 
     super(SecurityConfig.class); 
    } 
} 

@EnableWebSecurity 
public class SecurityConfig extends WebSecurityConfigurerAdapter { 

    @Autowired 
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { 

     auth 
      .inMemoryAuthentication() 
       .withUser("user").password("password").roles("USER"); 
    } 

    protected void configure(HttpSecurity http) throws Exception { 
     http 
      .authorizeRequests() 
       .anyRequest().authenticated() 
       .and() 
      .httpBasic();   
    } 
} 

@Stateless 
public class UserDetailsImpl implements UserDetailsService { 

    @Override 
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { 
     //No Implementation yet 
     return null; 
    } 
} 

編輯:

我改變了我的UserDetailsS​​erviceImpl從@Stateless到@Service和自動裝配Autowired它SecurityConfig。此外,我註釋了SecurityConfig與

@Configuration 
@ComponentScan(basePackageClasses = {UserDetailsServiceImpl.class}) 

以便它可以找到實現。 然而,問題IST注入我的狀態服務到UserDetailsS​​ervice中引起以下錯誤:

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [de.tobias.carsharing.security.SecurityService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@javax.ejb.EJB(name=, lookup=, description=, beanName=, beanInterface=class java.lang.Object, mappedName=)} 

回答

1

什麼是你所得到的錯誤?

您可以在UserDetailsImpl@Stateless改變註釋@Service(包:org.springframework.stereotype.Service),你可以用@Autowired private UserDetailsImpl userDetailsImpl注入它SecurityConfig終於在AuthenticationManagerBuilderauth.userDetailsService(userDetailsImpl)註冊。

如果你不想使用@Autowired注射出於某種原因,你可以手動創建的UserDetailsImpl

+0

是啊,那工作新實例,但很快就不是我的實際problem.As爲試圖注入一個EJB我得到以下錯誤:沒有發現依賴性的[SecurityService]類型的合格bean:期望至少1個符合此依賴關係自動裝填候選資格的bean – Henry

+0

我編輯了我的帖子並提供了更多附加信息。非常感謝! – Henry

+0

是的,這是行不通的,你不能像這樣混合使用Spring和EJB管理的bean。也許這個問題會幫助你,如果你還沒有找到解決方案已經http://stackoverflow.com/questions/12963405/injecting-ejb-3-into-spring-bean – Kajo