0

Spring Security OAuth2で現在ログインしているユーザーを抽出できません。私の目標は、ClientSuggestionエンティティの作成イベントがトリガーされたときにユーザーを抽出し、それをデータベースに保持することです。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> { 
} 

イベントハンドラ

@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); 
    } 
} 

豆、ClientSuggestionEventHandlerは、コンフィギュレーション・クラスに登録されています。プロジェクトを実行しようとすると、NullPointerException例外がスローされます。現在ログに記録されている従業員を取得する方法を知りたい。 私はSpring Security OAuth2の新機能です。ありがとう。 Employee.java

+0

あなたは 'プライベートリスト clientSuggestionsを初期化しました使用しています。あなたのコードでは、'? –

+1

おそらく 'SecurityContextHolder.getContext()。getAuthentication()。getPrincipal()'を 'handleClientSuggestionBeforeCreate'の中に入れてみてください。 – varren

+0

@varrenありがとう。出来た。 Merci beaucoup。 – byteHunt3r

答えて

1

org.springframework.security.core.userdetails.UserDetailsは、クラス

Employee.java

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

を実装し、その後、Employee employee= (Employee) SecurityContextHolder.getContext().getAuthentication().getPrincipal();

+0

すでにUserDetailsとUserDetailsサービスが実装されていました。セキュリティとOauth2が機能しました。 oncreateイベントが(ClientSuggestionタイプの)トリガーされたときに、現在ログインしている従業員を抽出したかっただけです。コードは正常に動作します。追加されました - > Employee employee = employeeRepository.findByUsername(SecurityContextHolder.getContext()。getAuthentication()。getName()); @HandleBeforeCreateにpublic void handleClientSuggestionBeforeCreate {...} – byteHunt3r

関連する問題