2015-08-12 2 views
0

Я пытаюсь создать автоматический вход, когда пользователь успешно зарегистрированный в.Auto Войти после успешной регистрации не работает

Это Methode внутри контроллера, но не отображается второй logger.info(auth.toString());.

@RequestMapping(value = "/createaccount",method = RequestMethod.POST) 
public String createAccount(@ModelAttribute User user,BindingResult result){ 

    if (result.hasErrors()){ 

     return "newaccount"; 
    } 

    if(usersService.exists(user.getEmail())){ 
     result.rejectValue("email","DuplicateKey.user.email"); 
     logger.info("caught duplicate email"); 
     return "newaccount"; 
    } 

    user.setAuthority("ROLE_USER"); 
    user.setEnabled(true); 
    usersService.create(user); 


    // perform login authentication 
    try { 
     UserDetails userDetails = userDetailsSvc.loadUserByUsername(user.getEmail()); 
     logger.info(userDetails); 
     logger.info(userDetails.getAuthorities()); 
     UsernamePasswordAuthenticationToken auth = new UsernamePasswordAuthenticationToken(userDetails, user.getPassword(), userDetails.getAuthorities()); 

     logger.info(auth.toString()); 

     authMgr.authenticate(auth); 

     logger.info(auth.toString()); 

     // redirect into secured main page if authentication successful 
     if(auth.isAuthenticated()) { 
      logger.info("auth isAuthenticated"); 
      SecurityContextHolder.getContext().setAuthentication(auth); 
      return "userlogin"; 
     } 
    } catch (Exception e) { 
     logger.debug("Problem authenticating user" + user.getEmail(), e); 
    } 

    return "accountcreated"; 
} 

Это мой инфокодов:

2015-08-12 14:11:20 [http-apr-8080-exec-1] INFO LoginController:112 - [email protected]: Username: xax; Password: [PROTECTED]; Enabled: true; AccountNonExpired: true; credentialsNonExpired: true; AccountNonLocked: true; Granted Authorities: ROLE_USER 
2015-08-12 14:11:20 [http-apr-8080-exec-1] INFO LoginController:113 - [ROLE_USER] 
2015-08-12 14:11:20 [http-apr-8080-exec-1] INFO LoginController:116 - org.springframew[email protected]441d0272: Principal: [email protected]: Username: xax; Password: [PROTECTED]; Enabled: true; AccountNonExpired: true; credentialsNonExpired: true; AccountNonLocked: true; Granted Authorities: ROLE_USER; Credentials: [PROTECTED]; Authenticated: true; Details: null; Granted Authorities: ROLE_USER 
2015-08-12 14:11:20 [http-apr-8080-exec-1] INFO TestFilter:25 - /createaccount 

Редактировать

Это мое решение:

@RequestMapping(value = "/createaccount",method = RequestMethod.POST) 
public String createAccount(@ModelAttribute User user,BindingResult result){ 

    if (result.hasErrors()){ 

     return "newaccount"; 
    } 

    if(usersService.exists(user.getEmail())){ 
     result.rejectValue("email","DuplicateKey.user.email"); 
     logger.info("caught duplicate email"); 
     return "newaccount"; 
    } 

    user.setAuthority("ROLE_USER"); 
    user.setEnabled(true); 
    usersService.create(user); 




    // perform login authentication 
    try { 
     UserDetails userDetails = userDetailsSvc.loadUserByUsername(user.getEmail()); 
     logger.info(userDetails); 
     logger.info(userDetails.getAuthorities()); 
     UsernamePasswordAuthenticationToken auth = new UsernamePasswordAuthenticationToken(userDetails, user.getPassword(), userDetails.getAuthorities()); 


     // redirect into secured main page if authentication successful 
     if(auth.isAuthenticated()) { 
      logger.info("auth isAuthenticated"); 
      SecurityContextHolder.getContext().setAuthentication(auth); 
      return "userlogin"; 
     } 
    } catch (Exception e) { 
     logger.debug("Problem authenticating user" + user.getEmail(), e); 
    } 

    return "accountcreated"; 
} 

Как вы заметили, я удалил authMgr.authenticate (авт) Я думаю, что это больше не нужно весной 4. И теперь пользователи автоматически регистрируются после заполнения регистрационной формы. , пожалуйста, исправьте меня, если я ошибаюсь.

+0

Можете вы добавить свой файл конфигурации безопасности весны, пожалуйста? – fabballe

ответ

0

Попробуйте проверить подлинность пользователя таким образом:

// Below method gets Person object from DB 
Person person1 = this.personService.findPersonByUsername(useremail); 
     Collection<GrantedAuthority> authorities = new ArrayList<>(); 
// add the role in below line 
     authorities.add(new SimpleGrantedAuthority("ROLE_USER")); 
     Authentication authentication = new UsernamePasswordAuthenticationToken(person1, null, authorities); 
     SecurityContextHolder.getContext().setAuthentication(authentication); 

дайте мне знать, если это работает.

+0

Это тоже не работает. У меня нет класса personService. Также я уже дал пользователю роль при входе в db. У вас есть другие предложения? – Greg

+0

Вам не нужно иметь класс обслуживания людей, просто используйте любой метод, который вы используете, чтобы получить пользователя от БД, и попробуйте его. Измените роль, в которой вы настроили. –

+0

У меня есть работа с удалением authMgr.authenticate (auth); Он вызывает следующую ошибку: AuthenticationProvider не найден. Но по какой-то причине мне это не нужно. Я использую весну 4. Я рад, что это сработало. Но вы можете объяснить, почему? – Greg

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