[SPRING] JHipster에서 현재 로그인 한 사용자를 얻는 중
SPRINGJHipster에서 현재 로그인 한 사용자를 얻는 중
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.SecurityUtils에서 현재 로그인 한 사용자 ID를 가져올 수 있습니다. SecurityUtils.getCurrentUserLogin ()은 현재 로그인 한 사용자의 로그인을 제공합니다. 이 로그인을 사용하여 db에서 사용자 엔티티를 가져옵니다. (findOneByLogin)
SecurityUtils에서 현재 로그인 한 사용자 ID를 가져올 수 있습니다. SecurityUtils.getCurrentUserLogin ()은 현재 로그인 한 사용자의 로그인을 제공합니다. 이 로그인을 사용하여 db에서 사용자 엔티티를 가져옵니다. (findOneByLogin)
-
==============================
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.userService.getUserWithAuthorities (). get ();에서 User를 가져올 수 있습니다.
userService.getUserWithAuthorities (). get ();에서 User를 가져올 수 있습니다.
from https://stackoverflow.com/questions/42942282/getting-the-current-logged-in-user-in-jhipster by cc-by-sa and MIT license