spring security a wyłuskanie danych o userze

Odpowiedz Nowy wątek
2015-01-07 12:46
0

jesli loguje sie jakims konkretnym username i password z bazy ktore odpowiadaja konkretnemu userowi to po zalogowaniu jak na przyklad wyluskac i wyswietlic powiedzmy e-mail tego konkretnego uzytkownika? Chodzi mi ze kazdy user po zalogowaniu ma zobaczyc na ekranie na przyklad swoj adres e-mail ktory podawal przy rejestracji. Jest on zapisany w bazie, kazdy user ma swojego maila ale jak go wyluskac zeby wyswietlic go na ekranie?

edytowany 1x, ostatnio: marlukk, 2015-01-07 12:47
user.getEmail(); - karolinaa 2015-01-07 14:18
ale to co musi byc parametrem metody kontrolera zebym mogl tam tego uzyc? - marlukk 2015-01-07 14:39

Pozostało 580 znaków

2015-01-07 16:07
0

Musisz zrobic mniej wiecej tak:

  1. potrzebujesz ID uzytkownika albo jego hasło/username. Wedlug tego bedziesz szukał w bazie entity, ktore wyciagniesz zeby miec email.
  2. Robisz zapytanie do bazy i szukasz wedlug tego co masz (według ID, loginu, hasła)
  3. po tym zapytaniu otrzymasz entity np. User
  4. robisz tak jak napisała @karolinaa czyli np.
    
    //od poczatku, powiedzmy, ze masz username uzytkownika
    String username = "jakisUsername";

User user = repository.findByUsername(username); //albo z entityManagera, jakiś service, zależy jaki framework itp, ale idea taka sama - pobrac usera

String email = user.getEmail();

//robisz coś z emailem


jak coś pisz :P

Pozostało 580 znaków

2015-01-07 17:45
0

Ja robiłem to w następujący sposób:

W controlerze używałem czegoś takiego:


Authentication auth = SecurityContextHolder.getContext().getAuthentication();
String username = auth.getName();
User loggedUser = userService.findByUsername(username);
String email = loggedUser.getEmail();

I później ten email dodajesz do modelu. Oczywiście id usera to był jego username.

edytowany 2x, ostatnio: pulkownik123, 2015-01-07 17:46

Pozostało 580 znaków

2015-01-08 08:27
Biały Szczur
0

A czy przypadkiem to Ci od razu nie zwraca usera w którego kontekście wywołana została metoda?

User loggedUser = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal()

Zawsze można też stworzyć sobie ControllerAdvice, i przekazywać takiego usera od razu do ModelAttribute kontrolera.

Faktycznie to od razu zwróci nam Usera. - pulkownik123 2015-01-08 11:16
oo to nawet nie wiedziałem, sprawdze :D - azalut 2015-01-10 18:26

Pozostało 580 znaków

2015-01-09 08:58
0

Jezeli dobrze pamietam, to w parametrach metody konstruktora mozesz sobie od razu zazyczyc argumentu o tozsamosci.

@RequestMapping(...)
public String test(Principal principal) {
}

Pozostało 580 znaków

2015-01-09 10:55
0

Można zrobić coś takiego:

@ControllerAdvice
public class UserControllerAdvice {

    @ModelAttribute
    public User currentUser(Authentication authentication) {
        if (null != authentication){
            return (User) authentication.getPrincipal();
        }
        return null;
    }
}

Potem tylko w parametrach kontrolera dopisujesz sobie: @ModelAttribute User user i gotowe.

Pozostało 580 znaków

2015-01-10 13:12
0

ok probuje robic tak jak sugerujecie ale mam problem bo w DAO robie metode:

@Override
    public String getEmployeeStatus(String username) {
        EmployeeEntity employee = (EmployeeEntity) sessionFactory.getCurrentSession().load(
                EmployeeEntity.class, username);
        return employee.getEmail();
    } 

i nie moge tak wywolac po usernamie, w innej metodzie wyciagam z sessionfactory po id i jest ok a jak robie tak jak powyzej to wyrzuca wyjatek:


type Exception report

message Request processing failed; nested exception is org.hibernate.TypeMismatchException: Provided id of the wrong type for class com.student.recruitment.app.entity.EmployeeEntity. Expected: class java.lang.Integer, got class java.lang.String

description The server encountered an internal error that prevented it from fulfilling this request.

exception 

Pozostało 580 znaków

2015-01-10 14:20
0

Ponieważ metoda load jako drugi parametr przyjmuje integer a nie String. Musisz samemu napisać metodę z zapytaniem wyciągającą użytkownika po nazwie.

i gdzie mam ja najlepiej napisac? - marlukk 2015-01-10 14:27
W swoim dao. - olek1 2015-01-10 14:30
ale jak sformulowac query zeby dalo mi wynik taki jaki chce? - marlukk 2015-01-10 14:33

Pozostało 580 znaków

2015-01-10 14:51
0

cos takiego?

sessionFactory.getCurrentSession().createQuery("from EmployeeEntity where username=username")

jak to dokladnie zrobic?

Pozostało 580 znaków

2015-01-10 15:41
0

Wpisz sobie w google Spring CRUD example i tam będziesz miał przykłady.
Powinno to wyglądać mniej więcej tak jak niżej pokazałem. Nie wiem czy to dokładnie zadziała bo z głowy piszę, więc to ma raczej charakter poglądowy. Musisz to sam dopasować do swojej aplikacji.

    public User findByUserName(String username) {

        User user = null;

        Query query = sessionFactory.getCurrentSession()
            .createQuery("from EmployeeEntity where username = :username");
        query.setParameter("username", username);
        user = query.getSingleResult();
        return user;
    }

Ogólnie lepiej używać JPA zamiast tego Hibernatowego API.

edytowany 5x, ostatnio: olek1, 2015-01-10 15:44
ale ja nie chce zeby ta metoda zwracala mi user tylko maila tego usera w postaci String. Czyli Stringa. - marlukk 2015-01-10 16:01
wydaje mi się, że rzucasz się na głęboką wodę, nie masz za bardzo pojęcia co robisz. Może zacznij od poznania dokładnie javy? - NoZi 2015-01-10 16:40
tzn zle sformulowalem pytanie, znam raczej podstawy ale chodzi mi o dobranie sie za pomoca query do tego usera ktory sie zalogowal. myslalem ze uda sie to zrobic metoda load i byloby latwo ale faktycznie nie przyjmuje ona parametru Stringowego. Masz pomysl jak mi pomoc? - marlukk 2015-01-10 16:46

Pozostało 580 znaków

2015-01-10 17:11
0

@olek1, u ciebie ta klasa Query to z jakiej zaleznosci pochodzi? bo nie wiem skad zaimportowac.

ogolnie to mam teraz problem nastepujacy: mam username danego goscia i nie wiem jak za pomoca tej informacji wyciagnac co to za gosc czyli cala encje wywolac i na niej operowac np. metoda .getEmail. Przejrzalem w dokumantacji https://docs.jboss.org/hibern[...]/api/org/hibernate/Query.html dostepne metody i nie widze tam takiej ktora by mi w tym pomogla. Kolega @olek1 ma na mysli zeby korzystac przy tym z JPA ale wolalbym to zrobic metodami hibernate'a. Da sie to zrobic?

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0