2014-03-29 3 views
1

Мне нужно автозарегистрироваться после успешной регистрации пользователя. Мне нужно перенаправить домашнюю страницу. Но в моем коде она не перенаправляется на конкретную страницу. После регистрации она по-прежнему загружает логин стр.Авто логин после успешной регистрации весной mvc

мой контроллер Регистрация:

@Controller 
public class LoginController 
{ 
    @Inject 
    RequestCache requestCache; 

    @Inject @Named("am") 
    protected AuthenticationManager authenticationManager; 

    @RequestMapping(value = "/userCreate", method = RequestMethod.POST) 
    public String getuseradd(Model model, HttpServletRequest request) 
    { 
     logger.debug("In getuseradd"); 
     logger.debug("User add "+request.getParameter("firstName")); 
     String firstName = request.getParameter("firstName"); 
     String lastName = request.getParameter("lastName"); 
     String email = request.getParameter("email"); 
     String password = request.getParameter("password"); 

     try{ 
      if(userService.searchRecords("Email", email).size()> 0) 
      { 
       return "redirect:/login"; 
      } 
      else{ 
       Users user = new Users(); 

       user.setFirstName(firstName); 
       user.setLastName(lastName); 
       user.setUserStatus("Active"); 
       user.setEmail(email); 
       user.setIsFacilitator(false); 
       user.setPassword(password); 
       user.setLanguageID(4L); 
       userService.create(user, creatorID); 
       Long userId = user.getUserID(); 
       UserRoleXREF userRoleXREF = new UserRoleXREF(); 
       userRoleXREF.setUserID(userId); 
       userRoleXREF.setUserRoleID(4L); 
       userRoleXREF.setComment(firstName); 
       userRoleXREFService.create(userRoleXREF, creatorID); 
       logger.debug("User role XREF created"); 
       authenticateUserAndSetSession(user, request); 
      } 
     } 

     catch(AmmachiServerException ex) 
     { 

      logger.debug("AmmachiServerException: " + ex.getMessage()); 
     } 
     return "redirect:/home"; 
    } 
} 
private void authenticateUserAndSetSession(Users user, 
      HttpServletRequest request) 
    { 
     logger.debug("Authentication session"+user.getEmail()+""+user.getPassword()); 
     UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(
       user.getEmail(), user.getPassword()); 

     // generate session if one doesn't exist 
     request.getSession(); 

     token.setDetails(new WebAuthenticationDetails(request)); 
     Authentication authenticatedUser = authenticationManager.authenticate(token); 

     SecurityContextHolder.getContext().setAuthentication(authenticatedUser); 
    } 

и мой securitycontext.xml

<http auto-config="true" use-expressions="true"> 

     <intercept-url pattern="/login" access="permitAll"/> 
     <intercept-url pattern="/userCreate" access="IS_AUTHENTICATED_ANONYMOUSLY"/> 
     <intercept-url pattern="/loginfailed" access="permitAll" /> 
     <intercept-url pattern="/**" access="isAuthenticated()" /> 
     <form-login login-page="/login" always-use-default-target="false" default-target-url="/home" authentication-failure-url="/loginfailed" /> 

     <logout logout-success-url="/logout" invalidate-session="true" delete-cookies="JSESSIONID" /> 


     <session-management> 
      <concurrency-control max-sessions="10000" error-if-maximum-exceeded="false" /> 
     </session-management> 


    </http> 

    <authentication-manager alias = "am"> 
     <authentication-provider user-service-ref="loginValidator"> 
      <password-encoder hash="md5"> 
       <salt-source user-property="username"/> 
      </password-encoder> 
     </authentication-provider> 
    </authentication-manager> 

Не могли бы вы помочь любому решить эту

ответ

2

Ваш UsernamePasswordAuthenticationToken не прошел проверку подлинности, следовательно, вы будете перенаправлены страница авторизации. UsernamePasswordAuthenticationToken конструктор вы назвали:

public UsernamePasswordAuthenticationToken(Object principal, Object credentials) { 
     super(null); 
     this.principal = principal; 
     this.credentials = credentials; 
     setAuthenticated(false); 
    } 

Вы должны создать UsernamePasswordAuthenticationToken с перечисляет власть следующим образом:

UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(
       user.getEmail(), user.getPassword(), AuthorityUtils.NO_AUTHORITIES); 

Вам не нужно использовать какие-либо роли в вашей конфигурации безопасности, так пустой список власти является достаточно.

Сейчас этот UsernamePasswordAuthenticationToken аутентификация:

public UsernamePasswordAuthenticationToken(Object principal, Object credentials, Collection<? extends GrantedAuthority> authorities) { 
     super(authorities); 
     this.principal = principal; 
     this.credentials = credentials; 
     super.setAuthenticated(true); // must use super, as we override 
    } 

Вы должны быть перенаправлены на главную страницу.

Орган власти является частью весенней безопасности и находится здесь org.springframework.security.core.authority.AuthorityUtils

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