Как перенаправить пользователя при успешном входе в систему с помощью Spring Boot (SpringSecurity6) и React.jsJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как перенаправить пользователя при успешном входе в систему с помощью Spring Boot (SpringSecurity6) и React.js

Сообщение Anonymous »

У меня возникли проблемы с пониманием того, где мне следует реализовать логику перенаправления.
Я хочу, чтобы мой пользователь перенаправлялся в другой пользовательский интерфейс в зависимости от его роли.
Я пробовал отправка ответа от BE к FE, а затем извлечение роли пользователя и перенаправление следующим образом():
Frontend

Код: Выделить всё

const handleSubmit = (event) => {
event.preventDefault();
axios.post("http://localhost:8080/auth/login", authenticateUser).then((response) => {
response.data.roles.map(role =>  {
if(role.name === 'ADMIN') {
navigate('/admin');
}
if(role.name === 'USER') {
navigate('/');
}
})
})
}
Бэкенд-контроллер

Код: Выделить всё

    @PostMapping("/login")
public ResponseEntity authenticate(@RequestBody LoginUserDto loginUserDto) {
System.out.println("Entered /login endpoint: ");

User authenticatedUser = authenticationService.authenticate(loginUserDto);
String jwtToken = jwtService.generateToken(authenticatedUser);
LoginResponse loginResponse = new LoginResponse();
loginResponse.setToken(jwtToken);
loginResponse.setExpiresIn(jwtService.getExpirationTime());

Optional optionalUser =   userRepository.findByEmail(loginUserDto.getEmail());
optionalUser.get().getRoles().forEach(role -> loginResponse.getRoles().add(role));

return ResponseEntity.ok(loginResponse);
}
класс ответа

Код: Выделить всё

@Getter
@Setter
public class LoginResponse {
private String token;
private long expiresIn;
private Set roles = new HashSet();
}
Но потом я прочитал, что логику перенаправления не следует выполнять во внешнем интерфейсе, потому что кто-то может легко манипулировать, а это означает, что мое веб-приложение может быть использовано в злонамеренных целях? >
Я также пробовал создать customAuthenticationSuccessHandler

Код: Выделить всё

@Component
public class CustomAuthenticationSuccessHandler implements AuthenticationSuccessHandler {
@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
System.out.println("onAuthenticationSuccess request: " + request);

Set roles = AuthorityUtils.authorityListToSet(authentication.getAuthorities());

if (roles.contains("ADMIN")) {
response.sendRedirect("/admin");
} else if (roles.contains("USER")) {
response.sendRedirect("/");
} else {
response.sendRedirect("/");
}
}
}
и затем включение его в SecurityFilterChain

Код: Выделить всё

                .formLogin((formLogin) -> formLogin
.successHandler(customAuthenticationSuccessHandler)
.permitAll()
.loginPage("http://localhost:3000/login"))
но это не обнаруживается внешним интерфейсом, как я ожидал.
Поэтому мой вопрос: рекомендуется ли делать это на внутреннем интерфейсе, и если да, то как?Я не нашел ни одного простого руководства по использованию Spring Boot и React.

Подробнее здесь: https://stackoverflow.com/questions/792 ... urity6-and
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»