• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Spring Security /login i ?error

VPS Starter Arubacloud
0 głosów
445 wizyt
pytanie zadane 21 sierpnia 2020 w Java przez Szyszka Gaduła (3,490 p.)

Witam. Istnieje jakaś możliwość, żeby po błędnej próbie logowania pod "/login" nie przekierowywało do localhost:8080/login?error ? Mam własne komunikaty dotyczące nieudanej próby logowania, jednak nie wyświetlają wydaje mi się, przez właśnie ten ?error. Tak też zrobić nie mogę:

       @Override
       public void configure(WebSecurity webSecurity) throws Exception {
              webSecurity.ignoring().antMatchers("/login");
       }

Bo wtedy po zalogowaniu spring security "nie widzi" mojej roli. Jednak wtedy powiadomienia są. Czy da się to zrobić?

1 odpowiedź

0 głosów
odpowiedź 21 sierpnia 2020 przez Wiciorny Ekspert (269,120 p.)
a jak masz napisaną obsługę w sytuacji wystąpienia błędu ? :) i jak ją wywołujesz.
komentarz 21 sierpnia 2020 przez Szyszka Gaduła (3,490 p.)
package pl.szyszka.login;

import javax.persistence.EntityManager;
import javax.persistence.Query;

import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import lombok.RequiredArgsConstructor;
import pl.szyszka.users.User;
import pl.szyszka.users.UserRepository;

@Controller
@RequestMapping("/login")
@RequiredArgsConstructor
public class LoginController {

       PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();

       private final UserRepository userRepository;
       private final EntityManager entityManager;

       @GetMapping
       public String loginForm(Model model) {
              model.addAttribute("user", new User());
              return "login";
       }

       @PostMapping
       public String login(User user, Model model, String redirect) {
              Query query = entityManager.createNativeQuery("SELECT PASSWORD FROM USERS WHERE USERNAME = :username");
              query.setParameter("username", user.getUsername());
              if (!user.getUsername().equals("")) {
                     if (userRepository.takeAllNames().toString().indexOf(user.getUsername()) == -1) {
                            model.addAttribute("loginResponse", "Błędna nazwa użytkownika");
                     } else if (!passwordEncoder.matches(user.getPassword(), query.getSingleResult().toString())) {
                            model.addAttribute("loginResponse", "Błędne hasło");
                     } else if (userRepository.takeAllNames().toString().indexOf(user.getUsername()) != -1
                                   && passwordEncoder.matches(user.getPassword(), query.getSingleResult().toString())) {
                            redirect = "redirect:/home";
                     }
              } else {
                     model.addAttribute("loginResponse", "Podaj nazwe użytkownika");
              }
              return redirect;
       }
}

O tak jakoś

komentarz 21 sierpnia 2020 przez Wiciorny Ekspert (269,120 p.)
no właśnie mapowanie masz na login i zwracam response na login, a nie na error
komentarz 21 sierpnia 2020 przez Szyszka Gaduła (3,490 p.)
Czyli to nie przez dodanie ?error ? Dlaczego tak sie dzieje? Może po błędzie przekierowywuje na ten login od nowa i dlatego nie widać tych tekstów po błędnej próbie logowania? Jeśli tak, to da się to jakoś "wyłączyć' lub całkowicie zlikwidować?
komentarz 22 sierpnia 2020 przez Szyszka Gaduła (3,490 p.)

Obczaiłem jakąś klase AuthenticationFailrueHandler. Zrobiłem coś takiego;

package pl.szyszka;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.security.core.AuthenticationException;
import org.springframework.security.web.authentication.AuthenticationFailureHandler;

public class CustomFailrueHandler implements AuthenticationFailureHandler {

       @Override
       public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response,
                     AuthenticationException exception) throws IOException, ServletException {
       }
}

Jak mogę tutaj robić nic? Po PostMapping na loginPage("/login") wyświetla się biała pusta strona.

Podobne pytania

0 głosów
1 odpowiedź 152 wizyt
pytanie zadane 18 sierpnia 2020 w Java przez Szyszka Gaduła (3,490 p.)
0 głosów
1 odpowiedź 133 wizyt
pytanie zadane 14 sierpnia 2020 w Java przez Szyszka Gaduła (3,490 p.)
0 głosów
1 odpowiedź 124 wizyt
pytanie zadane 27 sierpnia 2020 w Java przez Szyszka Gaduła (3,490 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...