2015-05-29 3 views
0

до сих пор я использовал области безопасности для аутентификации и авторизации пользователей. Тем не менее, я хотел бы перейти к структуре Spring Security, желательно не использовать другие части Spring Framework. Мне удалось настроить аутентификацию на основе httpBasic в памяти, которая отлично работает.Настроить Spring Security с помощью EJB

Теперь я хотел бы создать пользовательский UserDetailsService, реализующий мою собственную авторизацию. My UserDetailsService-Реализация - это автономный 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; 
    } 
} 

EDIT:

Я изменил свое UserDetailsServiceImpl от @Stateless к @Service и Autowired его в SecurityConfig. Кроме того, я аннотировал SecurityConfig с

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

так, чтобы он мог найти реализацию. Однако проблема IST инъекционного мой Stateless службы в UserDetailsService вызывает следующую ошибку:

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), и вы можете вводить его в SecurityConfig с @Autowired private UserDetailsImpl userDetailsImpl и, наконец, зарегистрировать его в вашем AuthenticationManagerBuilder с auth.userDetailsService(userDetailsImpl).

В случае, если вы не хотите использовать @Autowired инъекции по какой-то причине, вы можете вручную создать новый экземпляр UserDetailsImpl

+0

Да, что работает, но не мой фактический problem.As только пытаюсь внедрить в EJB Я получаю следующую ошибку: никакой квалификационный компонент типа [SecurityService], найденный для зависимости: ожидается как минимум 1 компонент, который квалифицируется как кандидат на автоподключение для этой зависимости – Henry

+0

Я отредактировал свое сообщение с дополнительной информацией. Спасибо, пока! – Henry

+0

Да, это не сработает, вы не можете смешать весну и управляемые EJB бобы. Возможно, этот вопрос поможет вам, если вы не найдете решение уже http://stackoverflow.com/questions/12963405/injecting-ejb-3-into-spring-bean – Kajo

Смежные вопросы