2016-08-26 2 views
0

Я пытался аутентифицировать свое обслуживание весной. Для этого я использую фильтр какпользовательский логин с поддержкой JPA и весной

Это конфигурация безопасности, которую я использовал. В этой конфигурации я фильтрую все запросы и разрешаю все путем аутентификации. Для аутентификации у меня есть страница входа. В форме входа я использую «имя пользователя» для электронной почты и «пароль» для пароля для имен атрибутов соответственно.

public class LoginAuthenticate extends WebSecurityConfigurerAdapter{ 

    @Autowired 
    @Qualifier("userDetailsService") 
    MyUserDetailService userDetailsService;  

    @Autowired 
    @Override 
    public void configure(AuthenticationManagerBuilder auth) throws Exception { 
     auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder()); 
     System.out.println("reaching"); 
    }   

    @Override 
    protected void configure(HttpSecurity http) throws Exception{ 
     http.authorizeRequests() 
     .antMatchers("/resources/**").permitAll() 
     .anyRequest().authenticated() 
     .and() 
     .formLogin() 
      .loginPage("/login") 
      .usernameParameter("username") 
      .passwordParameter("password") 
      .defaultSuccessUrl("/success") 
      .failureUrl("/") 
      .permitAll() 
      .and() 
     .logout() 
      .permitAll().and().csrf().disable(); 
    } 
    @Bean 
    public PasswordEncoder passwordEncoder(){ 
     PasswordEncoder encoder = new BCryptPasswordEncoder(); 
     return encoder; 
    } 

Это моя структура программы

Structure of program

И для реализации UserDEtailService я сделал следующее

Это мой UserDetailsService который я перекрытая, я autowired хранилище, чтобы получить электронную почту адрес и пароль из базы данных [используя адрес электронной почты как имя пользователя], а затем создали пользовательский объект userdetails с именем пользователя и паролем и вернули этот объект. Когда использование вводит имя пользователя и пароль на странице входа в систему, я должен иметь возможность аутентифицироваться с помощью деталей с данными, вытащенными из базы данных, такими как адрес электронной почты и пароль пользователя, которые должны совпадать с адресом электронной почты и паролем, полученным из db. Но проблема это я не мог сгореть метод AUTHENTICATE в конфигурации системы безопасности пружинной:

@Service("userDetailsService") 
public class MyUserDetailService implements UserDetailsService{ 
@Autowired 
IUsers userrepo; 

     @Override 
     public UserDetails loadUserByUsername(String username) 
       throws UsernameNotFoundException { 
      User user = userrepo.finduserByUserName(username); 
      if (user == null) { 
       return null; 
      } 
      List<GrantedAuthority> auth = AuthorityUtils 
        .commaSeparatedStringToAuthorityList("ROLE_USER"); 
      if (username.equals("admin")) { 
       auth = AuthorityUtils 
         .commaSeparatedStringToAuthorityList("ROLE_ADMIN"); 
      } 
      String password = user.getLoginPassword(); 
      String Email = user.getEmailAddress(); 
      System.out.println(password+ " "+ Email); 
      return new org.springframework.security.core.userdetails.User(Email,password,auth); 
} 
} 

Но моя функция аутентификации не оценки пользователя!

Может кто-нибудь помочь мне, что здесь не так. Для отладки ошибок нет. Я утешился, если дошел до функции аутентификации, но не достиг. Я пробовал всевозможные вещи в Интернете по этому настраиваемому логину с JPA, но мои усилия не принесли ничего полезного.

ответ

0

В классе LoginAuthenticate:
удалить @Autowired Перед void configure(AuthenticationManagerBuilder auth),
добавить аннотацию для этого класса

@Configuration  
@EnableWebSecurity 


В классе MyUserDetailService.loadUserByUsername:
изменения

if (user == null) { 
     return null; 
} 

в

if (user == null) { 
     throw new UsernameNotFoundException ("User not found"); 
} 
+1

Но это не поможет мне, потому что я уже это сделал. Я не включил его здесь, чтобы сделать его коротким. Хотя второе предложение «я возьму его». благодаря – venkatamangina