2016-04-27 49 views
3

我有一個用戶對象的存儲庫,我想揭露從CRUD庫複製簽名刪除:春數據倉庫休息不會暴露刪除

public interface UserRepository extends Repository<User, String>{ 
    @RestResource(exported = false) 
    User findOne(String username); 

    @PreAuthorize("hasRole('ROLE_USERS_READ')") 
    List<User> findAll(); 

    @PreAuthorize("hasRole('ROLE_USERS_WRITE')") 
    User save(User user); 

    @PreAuthorize("hasRole('ROLE_USERS_WRITE')") 
    void delete(String username); 

    @PreAuthorize("hasRole('ROLE_USERS_WRITE')") 
    void delete(User user); 
} 

保存用戶正常工作:

Request URL:http://localhost:8080/api/users 
Request Method:POST 
Status Code:201 Created 

但是,當我嘗試刪除用戶,我得到HTTP 405錯誤,從我的理解是指刪除方法不暴露:

Request URL:http://localhost:8080/api/users/testUser3 
Request Method:DELETE 
Status Code:405 Method Not Allowed 

當我使用CrudRepository進行刪除調用時,它可以工作。 任何幫助或建議,將不勝感激。

謝謝, 伊

回答

3

我發現病因: ŤfindOne(ID編號)和空隙的刪除(ID編號)以某種方式相連接。 當我從findOne中刪除@RestResource(exported = false)註釋時,刪除開始工作。 似乎對我來說是一個錯誤,或者是無證的行爲。

我沒有公開findOne,因爲我的服務器使用它進行身份驗證,所以我無法用@PreAuthorize對它進行註釋。 我最終什麼事做的是增加一個單獨的方法服務器:

@PreAuthorize("hasRole('ROLE_USERS_READ')") 
User findOne(String username); 

@RestResource(exported = false) 
User getUserByUsername(String username); 

希望這可以幫助別人。

+0

它的工作原理,感謝您的建議 –