Я хочу, чтобы мой пользователь перенаправлялся в другой пользовательский интерфейс в зависимости от его роли.
Я пробовал отправка ответа от 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("/");
}
}
}
Код: Выделить всё
.formLogin((formLogin) -> formLogin
.successHandler(customAuthenticationSuccessHandler)
.permitAll()
.loginPage("http://localhost:3000/login"))
Поэтому мой вопрос: рекомендуется ли делать это на внутреннем интерфейсе, и если да, то как?Я не нашел ни одного простого руководства по использованию Spring Boot и React.
Подробнее здесь: https://stackoverflow.com/questions/792 ... urity6-and