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

Spring Security /login i ?error

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
0 głosów
742 wizyt
pytanie zadane 21 sierpnia 2020 w Java przez Szyszka Gaduła (3,510 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 (281,250 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,510 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 (281,250 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,510 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,510 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ź 280 wizyt
pytanie zadane 18 sierpnia 2020 w Java przez Szyszka Gaduła (3,510 p.)
0 głosów
1 odpowiedź 166 wizyt
pytanie zadane 14 sierpnia 2020 w Java przez Szyszka Gaduła (3,510 p.)
0 głosów
1 odpowiedź 181 wizyt
pytanie zadane 27 sierpnia 2020 w Java przez Szyszka Gaduła (3,510 p.)

93,430 zapytań

142,427 odpowiedzi

322,652 komentarzy

62,794 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

...