Автоматический вход после успешной регистрации не работает весной - PullRequest
0 голосов
/ 06 июля 2018

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

@RequestMapping(value = "/registration", method = RequestMethod.POST)
public String registration(@ModelAttribute("user") User user, BindingResult bindingResult, Model model) {
    userValidator.validate(user, bindingResult);

    if (bindingResult.hasErrors()) {
        return "registration";          
    }

    userService.createRegistration(user);

    securityService.autologin(user.getUsername(), user.getPassword());

    return "redirect:/dashboard";        
}


public void autologin(String username, String password) {
    logger.debug("starting autologin process");
    UserDetails userDetails = userDetailsService.loadUserByUsername(username);

    UsernamePasswordAuthenticationToken usernamePasswordAuthenticationToken = new UsernamePasswordAuthenticationToken(userDetails, password, userDetails.getAuthorities());        

    authenticationManager.authenticate(usernamePasswordAuthenticationToken);

    if (usernamePasswordAuthenticationToken.isAuthenticated()) {
        SecurityContextHolder.getContext().setAuthentication(usernamePasswordAuthenticationToken);
        logger.debug(String.format("Auto login %s successfully!", username));
    }
    else {
        logger.debug(String.format("Auto login %s failed!", username));
    }
}

После успешной регистрации приведенный ниже регистратор работает хорошо, но вместо перенаправления на dashborad, Spring Security перенаправляет пользователя на страницу входа.

logger.debug(String.format("Auto login %s successfully!", username));

Вот моя весенняя конфигурация безопасности:

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

    <security:http-basic/>

    <security:csrf disabled="true" />

    <security:session-management invalid-session-url="/login.htm" />

    <security:intercept-url pattern="/dashboard*" access="hasRole('ROLE_USER')" />
    <security:intercept-url pattern="/**" access="hasAnyRole('ROLE_USER','ROLE_USER')" />       
    <security:intercept-url pattern="/registration*" access="permitAll" />              

    <security:remember-me remember-me-cookie="rvm-track-rm" remember-me-parameter="remember-me" token-repository-ref="tokenRepository"
        token-validity-seconds="864000" key="rvm-track-web-html" user-service-ref="userDetailsServiceImpl"/>

    <security:custom-filter ref="requestContextFilter" before="FORM_LOGIN_FILTER"/>

    <security:form-login login-page="/login.htm" login-processing-url="/j_spring_security_check" authentication-failure-url="/login.htm?error=1" default-target-url="/dashboard" />      

    <security:logout logout-url="/logout.htm" logout-success-url="/login.htm" />
</security:http>
...