2014-12-16 6 views
3

Я пытаюсь создать прототип приложения Java EE с использованием различных фреймворков. Все работает отлично, за исключением уровня безопасности. Я решил использовать Spring Security с настройкой Spring.Конфигурация службы безопасности Spring

Код выглядит так:

Spring Security Config

@Configuration 
@EnableWebMvcSecurity 
public class SecurityConfig extends WebSecurityConfigurerAdapter 
{ 
    @Autowired 
    private MyUserDetailsService userDetailsService; 

    @Override 
    protected UserDetailsService userDetailsService() { 
     return this.userDetailsService; 
    } 

    @Override 
    public void configure(WebSecurity web) throws Exception { 
     web 
     .ignoring() 
     .antMatchers("/resources/**"); 
    } 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http 
     .formLogin() 
     .loginPage("/login") 
     .loginProcessingUrl("/login/authenticate") 
     .failureUrl("/login?error=bad_credentials") 
     .and() 
     .logout() 
     .logoutUrl("/signout") 
     .deleteCookies("JSESSIONID") 
     .and() 
     .authorizeRequests() 
     .antMatchers("/admin/**").hasRole("ADMIN") 
     .antMatchers("/**").permitAll() 
     .and() 
     .csrf(); 
    } 
} 

Деталь пользователя Обслуживание

@Service("myUserDetailsService") 
public class MyUserDetailsService implements UserDetailsService 
{ 
    public static final Logger log = Logger.getLogger(MyUserDetailsService.class); 

    public MyUserDetailsService() { 
    } 

    @Autowired 
    private UserDao userDao; 

    @Override 
    public UserDetails loadUserByUsername(String userName) throws UsernameNotFoundException { 
     final User user = getSystemUser(userName); 
     final List<GrantedAuthority> authorities = getUserAuthorities(user); 
     return buildUserForAuthentication(user, authorities); 
    } 

    private User buildUserForAuthentication(User user, List<GrantedAuthority> authorities) { 
     //... 
    } 

    private User getSystemUser(String alias) { 
     //... 
    } 

    private List<GrantedAuthority> getUserAuthorities(User user) { 
     //... 
     return null; 
    } 
} 

Что я ожидаю этот код, чтобы сделать то, что, когда /login/authenticate достигается с пользователем & pass params, базовый код пружины вызывает мою службу пользователя, но этого никогда не происходит.

Что мне не хватает?

Я использую spring-security 3.2.3.RELEASE.

ответ

2

Вы должны зарегистрировать свой собственный UserDetailsService с аутентификацией,

@Override 
protected void registerAuthentication(AuthenticationManagerBuilder auth) 
     throws Exception { 
    auth.userDetailsService(this.userDetailsService); 
} 

для 3.2.3 конфиг должен быть

@Autowired 
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { 
    auth.userDetailsService(this.userDetailsService); 
} 
+1

кажется Тар, что метод (registerAuthentication (AuthenticationManagerBuilder авторизация)) не является частью WebSecurityConfigurerAdapter. Какой класс вы продлеваете? –

+1

Я пропустил версию, которую вы упомянули в пользователе, я считаю, что для 3.2.3 config должен быть @Autowired \t public void configureGlobal (AuthenticationManagerBuilder auth) throws Exception {, я отредактирую в вопросе –

+1

Вы абсолютно прав! В то же время я googled, и я нашел в журнале изменений для этой версии, что метод был переименован. Я переписал свой код, и теперь он работает! Большое спасибо за вашу помощь! С уважением. –

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