복붙노트

[SPRING] JHipster에서 현재 로그인 한 사용자를 얻는 중

SPRING

JHipster에서 현재 로그인 한 사용자를 얻는 중

jhipster 응용 프로그램을 구축 중입니다. 현재 로그인 한 사용자를 기반으로 개체 목록을 얻으려고합니다. 현재 로그인 한 사용자가 현재 사용자의 블로그를 얻는 방법을 설명하는 jipster 블로그 데모와 같은 온라인 간단한 예가 몇 가지 있습니다. 그리고 저는 이것을 모방하고 싶었습니다. 민주당 원 안에 repo 방법이있다 :

@Query("select blog from Blog blog where blog.user.login = ?#{principal.username}")
List<Blog> findByUserIsCurrentUser();

나는 다음과 같이 이것을 모방하려했다.

@Query("select userWorkoutTemplate from WorkoutTemplate workoutTemplate where workoutTemplate.userDemographic.user.login = ?#{principal.username}")
List<WorkoutTemplateDTO> findByUserIsCurrentUser();

하지만 내 IDE 가이 오류를 throw합니다 :

최대 절전 모드 쿼리에 너무 익숙하지 않지만 매개 변수가 내 IDE에서 오류가있는 것 같습니다. 결국 매개 변수를 어딘가에 구성해야합니까? DTO 개체로 일반 jhipster 4를 사용하고 있습니다.

관련 엔티티는 다음과 같습니다.

User.java

@Entity
@Table(name = "jhi_user")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class User extends AbstractAuditingEntity implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
@SequenceGenerator(name = "sequenceGenerator")
private Long id;

@NotNull
@Pattern(regexp = Constants.LOGIN_REGEX)
@Size(min = 1, max = 50)
@Column(length = 50, unique = true, nullable = false)
private String login;

@JsonIgnore
@NotNull
@Size(min = 60, max = 60)
@Column(name = "password_hash",length = 60)
private String password;

@Size(max = 50)
@Column(name = "first_name", length = 50)
private String firstName;

@Size(max = 50)
@Column(name = "last_name", length = 50)
private String lastName;

@Email
@Size(max = 100)
@Column(length = 100, unique = true)
private String email;

@NotNull
@Column(nullable = false)
private boolean activated = false;

@Size(min = 2, max = 5)
@Column(name = "lang_key", length = 5)
private String langKey;

@Size(max = 256)
@Column(name = "image_url", length = 256)
private String imageUrl;

@Size(max = 20)
@Column(name = "activation_key", length = 20)
@JsonIgnore
private String activationKey;

@Size(max = 20)
@Column(name = "reset_key", length = 20)
private String resetKey;

@Column(name = "reset_date")
private ZonedDateTime resetDate = null;

@JsonIgnore
@ManyToMany
@JoinTable(
    name = "jhi_user_authority",
    joinColumns = {@JoinColumn(name = "user_id", referencedColumnName = "id")},
    inverseJoinColumns = {@JoinColumn(name = "authority_name", referencedColumnName = "name")})
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@BatchSize(size = 20)
private Set<Authority> authorities = new HashSet<>();
....

UserDemographic.java

@Entity
@Table(name = "user_demographic")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class UserDemographic implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
@SequenceGenerator(name = "sequenceGenerator")
private Long id;

@NotNull
@Column(name = "created_on", nullable = false)
private LocalDate createdOn;

@NotNull
@Column(name = "last_login", nullable = false)
private LocalDate lastLogin;

@Enumerated(EnumType.STRING)
@Column(name = "gender")
private Gender gender;

@NotNull
@Column(name = "date_of_birth", nullable = false)
private LocalDate dateOfBirth;

@Column(name = "height")
private Float height;

@NotNull
@Enumerated(EnumType.STRING)
@Column(name = "unit_of_measure", nullable = false)
private UnitOfMeasure unitOfMeasure;

@OneToOne(optional = false)
@NotNull
@JoinColumn(unique = true)
private User user;

@ManyToMany
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@JoinTable(name = "user_demographic_gym",
           joinColumns = @JoinColumn(name="user_demographics_id", referencedColumnName="id"),
           inverseJoinColumns = @JoinColumn(name="gyms_id", referencedColumnName="id"))
private Set<Gym> gyms = new HashSet<>();

@OneToMany(mappedBy = "userDemographic")
@JsonIgnore
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
private Set<UserWeight> userWeights = new HashSet<>();

@OneToMany(mappedBy = "userDemographic")
@JsonIgnore
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
private Set<WorkoutTemplate> workoutTemplates = new HashSet<>();

@OneToMany(mappedBy = "userDemographic")
@JsonIgnore
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
private Set<UserWorkoutTemplate> userWorkoutTemplates = new HashSet<>();

@ManyToOne(optional = false)
@NotNull
private SkillLevel skillLevel;

UserWorkoutTemplate.java

@Entity
@Table(name = "user_workout_template")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class UserWorkoutTemplate implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
@SequenceGenerator(name = "sequenceGenerator")
private Long id;

@NotNull
@Column(name = "created_on", nullable = false)
private LocalDate createdOn;

@NotNull
@Column(name = "last_updated", nullable = false)
private LocalDate lastUpdated;

@Column(name = "notes")
private String notes;

@ManyToOne(optional = false)
@NotNull
private UserDemographic userDemographic;

@ManyToOne
private WorkoutTemplate workoutTemplate;

@OneToMany(mappedBy = "userWorkoutTemplate", fetch = FetchType.EAGER)
@JsonIgnore
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
private Set<UserWorkoutInstance> userWorkoutInstances = new HashSet<>();

해결법

  1. ==============================

    1.SecurityUtils에서 현재 로그인 한 사용자 ID를 가져올 수 있습니다. SecurityUtils.getCurrentUserLogin ()은 현재 로그인 한 사용자의 로그인을 제공합니다. 이 로그인을 사용하여 db에서 사용자 엔티티를 가져옵니다. (findOneByLogin)

    SecurityUtils에서 현재 로그인 한 사용자 ID를 가져올 수 있습니다. SecurityUtils.getCurrentUserLogin ()은 현재 로그인 한 사용자의 로그인을 제공합니다. 이 로그인을 사용하여 db에서 사용자 엔티티를 가져옵니다. (findOneByLogin)

  2. ==============================

    2.현재 가장 좋은 대답은 JHipster에서 제공하는 내장 UserService를 사용하는 것입니다. SecurityUtils.getCurrentUserLogin ()을 두 번 호출하는 것을 반복하지 않아도됩니다 (한 번 한 번 UserService - 한 번 구현). 사용법은 다음과 같습니다.

    현재 가장 좋은 대답은 JHipster에서 제공하는 내장 UserService를 사용하는 것입니다. SecurityUtils.getCurrentUserLogin ()을 두 번 호출하는 것을 반복하지 않아도됩니다 (한 번 한 번 UserService - 한 번 구현). 사용법은 다음과 같습니다.

    final Optional<User> isUser = userService.getUserWithAuthorities();
    if(!isUser.isPresent()) {
       log.error("User is not logged in");
       return new Shinything()
    }
    
    final User user = isUser.get();
    // continue with the user
    
  3. ==============================

    3.userService.getUserWithAuthorities (). get ();에서 User를 가져올 수 있습니다.

    userService.getUserWithAuthorities (). get ();에서 User를 가져올 수 있습니다.

  4. from https://stackoverflow.com/questions/42942282/getting-the-current-logged-in-user-in-jhipster by cc-by-sa and MIT license