auto-login after registration

master
Dmitry Isaenko 2023-12-30 15:01:19 +03:00
parent ed9bac4d4e
commit 78ddbffb7b
3 changed files with 25 additions and 4 deletions

View File

@ -9,11 +9,12 @@ import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.validation.Valid;
import lombok.extern.slf4j.Slf4j;
import ru.redrise.marinesco.User;
import ru.redrise.marinesco.data.RolesRepository;
import ru.redrise.marinesco.data.UserRepository;
import ru.redrise.marinesco.User;
@Slf4j
@Controller
@ -22,11 +23,16 @@ public class RegistrationController {
private UserRepository userRepo;
private RolesRepository rolesRepo;
private PasswordEncoder passwordEncoder;
private HttpServletRequest request;
public RegistrationController(UserRepository userRepo, RolesRepository rolesRepo, PasswordEncoder passwordEncoder) {
public RegistrationController(UserRepository userRepo,
RolesRepository rolesRepo,
PasswordEncoder passwordEncoder,
HttpServletRequest request) {
this.userRepo = userRepo;
this.rolesRepo = rolesRepo;
this.passwordEncoder = passwordEncoder;
this.request = request;
}
@ModelAttribute(name = "registrationForm")
@ -41,7 +47,7 @@ public class RegistrationController {
@PostMapping
public String postMethodName(@Valid RegistrationForm registerForm, Errors errors, Model model) {
if (registerForm.isPasswordsNotEqual()){
if (registerForm.isPasswordsNotEqual()) {
model.addAttribute("passwordsMismatch", "Passwords must be the same.");
return "registration";
}
@ -51,6 +57,9 @@ public class RegistrationController {
User user = userRepo.save(registerForm.toUser(passwordEncoder, rolesRepo));
log.info("Added user {} {} {}", user.getId(), user.getUsername(), user.getDisplayname());
if (registerForm.auth(request))
return "redirect:/";
return "redirect:/login";
}
}

View File

@ -2,6 +2,8 @@ package ru.redrise.marinesco.security;
import org.springframework.security.crypto.password.PasswordEncoder;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
@ -36,4 +38,14 @@ public class RegistrationForm {
public boolean isPasswordsNotEqual(){
return ! password.equals(passwordConfirm);
}
public boolean auth(HttpServletRequest request) {
try{
request.login(username, password);
return true;
}
catch(Exception e){
return false;
}
}
}

View File

@ -49,7 +49,7 @@ public class SecurityConfig {
.requestMatchers(mvc.pattern("/jquery.js")).permitAll()
.requestMatchers(mvc.pattern("/styles/**")).permitAll()
.requestMatchers(mvc.pattern("/images/*")).permitAll()
.requestMatchers(mvc.pattern("/register")).permitAll()
.requestMatchers(mvc.pattern("/register")).anonymous()
.requestMatchers(mvc.pattern("/login")).anonymous()
.requestMatchers(mvc.pattern("/error")).permitAll()
.requestMatchers(PathRequest.toH2Console()).permitAll()