Как получить все данные текущего пользователя в контроллере? - PullRequest
0 голосов
/ 31 марта 2020

Мне нужно взять все данные текущего пользователя, который вошел в систему, и отправить их в формате JSON в маршрут "/ home". Я искал, как это сделать, но ничего .. Я обнаружил, что могу взять только имя пользователя и полномочия там . Может ли кто-нибудь помочь мне справиться с этим? Спасибо всем.

Есть мой AuthController. java

    // Getting all user data
    @RequestMapping(value = "/home", method = RequestMethod.GET)
    public String getUsersDataById(Principal principal) {
        return principal.getName();
    }

Есть мой UserRepository

import com.example.demo.Models.Users;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.Optional;

public interface UserRepository extends JpaRepository<Users, Integer> {
    Optional<Users> findByUsername(String username);
}

Есть мои сервисы: MyUserDetails. java

public class MyUserDetails implements UserDetails {
    private String username;
    private String password;
    private String firstname;
    private String lastname;
    private String email;
    private String last_login_date;
    private String registration_date;
    private String last_login_ip;
    private Integer balance;
    private Integer status;
    private String brith_date;
    private List<GrantedAuthority> authorities;
    private boolean active;

    public MyUserDetails(Users user) {
        this.username = user.getUsername();
        this.password = user.getPassword();
        this.authorities = Arrays.stream(user.getRoles().split(","))
                .map(SimpleGrantedAuthority::new)
                .collect(Collectors.toList());
        this.active = user.isActive();
    }

    public MyUserDetails(String username, String firstname, String lastname, String email, String last_login_date, String registration_date, String last_login_ip, Integer balance, Integer status, String brith_date) {
        this.username = username;
        this.firstname = firstname;
        this.lastname = lastname;
        this.email = email;
        this.last_login_date = last_login_date;
        this.registration_date = registration_date;
        this.last_login_ip = last_login_ip;
        this.balance = balance;
        this.status = status;
        this.brith_date = brith_date;
    }

    public MyUserDetails() {
    }
//  and Override methods by default..

MyUserDetailsService

@Service
public class MyUserDetailsService implements UserDetailsService {
    @Autowired
    private UserRepository userRepository;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        Optional<Users> user = userRepository.findByUsername(username);

        user.orElseThrow(() -> new UsernameNotFoundException("Not found: " + username));

        return user.map(MyUserDetails::new).get();
    }
}

Есть пользователей. java со столбцами из таблицы и геттерами и сеттерами без конструктора

@Entity
@Table(name = "users")
public class Users {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;
    private String username;
    ...
    /// etc..

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }
    ...
    // etc..

1 Ответ

1 голос
/ 31 марта 2020

Аннотируйте ваш метод с помощью @AuthenticationPrincipal и используйте UserDetails.

    @RequestMapping(value = "/home", method = RequestMethod.GET)
    public Userdetails getUsersDataById(@AuthenticationPrincipal UserDetails userDetails) {


        return userDetails;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...