Spring Security Login
Здравейте,
имам въпрос относно Spring Security. Така както го разбирам, с конфигуирацията, която беше показана на лекцията, нямаме достъп до post заявката, която правим за логин на даден юзър - спринг си прави магиите отзад и връща UserDetails, не можем да сложим @PostMapping анотация в контролера и да оперираме със сесията или каквото и да е. В контролерите имаме достъп до Principal, който държи само username.
Конкретно въпросът ми е как при логин да запазя в сесията (или другаде) друга информация от юзъра, която се държи в ентитито - например кога се е регистрирал, рождена дата или друго? Да кажем, че искам в navbar-а, след успешен login, да се изписва Hello, {fullName}, което го няма в Principal и трябва да правя нова завка към базата.
Искаш да кажеш, че като кастна Principal -> (User), ще мога да му достъпя другите полета на ентитито? Например дата на регистрация, пълното име и т.н.
Едит: Тествах го и работи!
Точно така. И в thymeleaf и в контролера ще работи правилно.
За да не отварям нова тема, ще пиша тук.
След успешна регистрация или логин със Spring Social Facebook, с thymeleaf вече не мога да достъпя всички полета на юзъра чрез:
Предполагам, че е заради начина за логин, където ръчно сетваме autherntication token и го подаваме на SecurityContextHolder-a. Само предположения, но спря да работи както се очаква.
EDIT: "Дебъгнах" какво пази #authentication.getPrincipal(), като просто го сложих в th:text в хедъра и се оказва, че в случая с BasicUser се принтира адреса в паметта на обекта и името на класа, докато при логин с ФБ (горния метод loginUser(SocialUser socialUser)), се изписва само username-а като чист String. Реших, че проблема е от вида на аутентикацията, потърсих друга, която да не е UsernamePasswordAuthenticationToken, но не намерих с един анонимен клас си реших въпроса:
Много е грозно и силно ме съмнява това да е правилния начин, та ако може някой да даде съвет.