Je suis incapable d'extraire l'utilisateur actuellement connecté dans Spring Security OAuth2. Mon objectif est d'extraire l'utilisateur lorsque l'événement create sur l'entité ClientSuggestion est déclenché et de le conserver dans la base de données.Comment obtenir les détails d'un utilisateur authentifié dans Spring Security OAuth2
Employee.java
@Entity
@Table(name = "er_employee")
public class Employee implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "username", unique = true)
@NotNull
@Size(max = 10)
private String username;
@Column(name = "password_hash")
@NotNull
@Size(min = 8, max = 512)
private String password;
@Column(name = "email_verification_token")
@Size(max = 512)
private String emailVerificationToken;
@Column(name = "password_reset_token")
@Size(max = 512)
private String passwordResetToken;
@Column(name = "active")
@NotNull
private boolean active;
@Column(name = "is_deleted")
@NotNull
private boolean deleted;
@Column(name = "date_of_creation")
@Temporal(TemporalType.TIMESTAMP)
@NotNull
private Date dateOfCreation;
@OneToMany(mappedBy = "employee")
private List<ClientSuggestion> clientSuggestions;
//Constructors
//Getters ans setters
}
ClientSuggestion.java
@Entity
@Table(name = "er_suggestion")
public class ClientSuggestion implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "content", unique = true)
@NotNull
@Size(max = 200)
private String suggestion;
@ManyToOne
@JoinColumn(name = "employee_id")
private Employee employee;
//Constructors
//Getters ans setters
}
EmployeeRepository.java
public interface EmployeeRepository extends CrudRepository<Employee, Long> {
ClientSuggestionRepository .java
public interface ClientSuggestionRepository extends CrudRepository<ClientSuggestion, Long> {
}
Le gestionnaire d'événements
@Component
@RepositoryEventHandler(ClientSuggestion.class)
public class ClientSuggestionEventHandler {
Employee employee= (Employee) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
@HandleBeforeCreate
public void handleClientSuggestionBeforeCreate(ClientSuggestion cs) {
cs.setDeleted(false);
cs.setActive(true);
cs.setPasswordResetToken(Encryptor.generateHash(cs.getPassword, 512));
cs.setEmployee(employee);
}
}
Le haricot, ClientSuggestionEventHandler, est enregistrée dans une classe de configuration. Lorsque j'ai essayé d'exécuter le projet, l'exception NullPointerException est levée. Je souhaite savoir comment obtenir l'employé actuellement connecté. Je suis nouveau à Spring Security OAuth2. Merci.
Avez-vous la liste 'init privée <> ClientSuggestion de clientSuggestions,' dans vos codes? –
Peut-être que vous pouvez essayer de mettre 'SecurityContextHolder.getContext(). GetAuthentication(). GetPrincipal()' dans 'handleClientSuggestionBeforeCreate' – varren
@varren merci. Ça a marché. Merci beaucoup. – byteHunt3r