0

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.

+0

Avez-vous la liste 'init privée <> ClientSuggestion de clientSuggestions,' dans vos codes? –

+1

Peut-être que vous pouvez essayer de mettre 'SecurityContextHolder.getContext(). GetAuthentication(). GetPrincipal()' dans 'handleClientSuggestionBeforeCreate' – varren

+0

@varren merci. Ça a marché. Merci beaucoup. – byteHunt3r

Répondre

1

Dans Employee.java mettre en œuvre org.springframework.security.core.userdetails.UserDetails classe

Employee.java

@Entity 
@Table(name = "er_employee") 
public class Employee implements Serializable, UserDetails { 

Et puis utilisez Employee employee= (Employee) SecurityContextHolder.getContext().getAuthentication().getPrincipal();

+0

Avait déjà implémenté le service UserDetails et UserDetails. Sécurité et Oauth2 ont travaillé. Je voulais juste extraire l'employé actuellement connecté lorsqu'un événement oncreate est déclenché (de type ClientSuggestion). Le code fonctionne bien. Juste ajouté -> Employee employé = employeeRepository.findByUsername (SecurityContextHolder.getContext(). GetAuthentication(). GetName()); à @HandleBeforeCreate public void handleClientSuggestionBeforeCreate {...} – byteHunt3r