Как мне вывести сообщение "пользователь заблокирован" на странице логина в java spring security?
Всем привет. Мне нужно выводить сообщение на форме логина, если пользователь имеет статус BANNED. Я думал брать данные из инпутов, с помощью метода пост, но spring security берёт данные из них первой, а затем обнуляет их. Можно ли как-то их до этого перехватить или есть другой способ получше? Если можно, то с примером, пожалуйста
Контроллер авторизации AuthController.java
@Controller
@RequestMapping("/auth")
public class AuthController {
private final UserRepository userRepository;
@Autowired
public AuthController(UserRepository userRepository) {
this.userRepository = userRepository;
}
protected PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder(12);
}
@GetMapping("/login")
public String getLoginPage(Model model,
@RequestParam(value = "error", required = false) String error,
@RequestParam(value = "logout", required = false) String logout) {
if (checkAuth()) {
return "redirect:/index";
}
if (error != null) {
model.addAttribute("error", "Неправильное имя пользователя или пароль!");
}
if (logout != null) {
model.addAttribute("logout", "Вы вышли!");
}
return "login";
}
private boolean checkAuth() {
return SecurityContextHolder.getContext().getAuthentication().getPrincipal() instanceof User;
}
}
Форма логина login.html
<body align="center">
<form method="post" action="/auth/login">
<h2>Вход</h2>
<div class="text-danger" th:text="${error}">...</div>
<div th:text="${logout}">...</div>
<p>
<input type="text" id="username" name="username" placeholder="E-mail" required>
</p>
<p>
<input type="password" id="password" name="password" placeholder="Пароль" required>
</p>
<button class="dropbtn" type="submit">Войти</button>
</form>
<a href="/auth/registration">Зарегистрироваться</a>
</body>
Класс User.java
@Data
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "email")
private String email;
@Column(name = "password")
private String password;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
@Enumerated(value = EnumType.STRING)
@Column(name = "role")
private Role role;
@Enumerated(value = EnumType.STRING)
@Column(name = "status")
private Status status;
Ссылка на гитхаб: https://github.com/aposternak35/to-do-list-master
Ответы (1 шт):
В общем всё оказалось куда проще. В SecurityConfig начал вызывать пост метод через .failureForwardUrl, вместо .failureUrl и сообщения стали нормально выводиться, если кому интересно решение, ссылка на гит: https://github.com/aposternak35/to-do-list-master . Там кривая приложенька туду лист и авторизация с аутефикацией, в качестве БД подключал MySQL.