我的Spring REST程序是使用Json Web Tokens(JWT)的Stephen Zerhusen演示程序的輕微擴展,它工作正常 - 至今爲止。我添加了一個Option對象,並且我可以使用一個Option類(@Entity)和一個OptionRepository接口(擴展JpaRepository)來GET,PUT和POST在Spring Rest中,如何覆蓋GET和PUT調用?
我現在試圖但是失敗,將返回的數據限制爲只是登錄用戶有權享有什麼。舉個例子,假設我登錄的用戶僅有權選項值1,3,和5
- 如果我有一個像GET /選項我不應該返回選項值服務電話2或4
- 如果我有一個像GET/option/2這樣的服務調用,我應該返回一個HTTP 404結果。
據我所知,一旦用戶登錄,我可以通過主體對象引用獲取他們的用戶信息。 Such a solution was offered in this previous stackoverflow question,其他網頁也提供類似的解決方案。
我的直接問題是要找到哪裏可以影響/選項的GET和PUT行爲。以下是我添加到現有工作演示中的所有內容。首先是定義類的實體。
@Entity
@Table(name="choice")
public class Option implements Serializable {
@Id
@Column(name="id")
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id = Utilities.INVALID_ID;
@Column(name="value", length=50, nullable=false)
private String value;
@Column(name="name", length=100, nullable=false)
private String name;
public Long getId() { return this.id; }
public void setId(Long id) { this.id = id; }
public String getValue() { return this.value; }
public void setValue(String value) { this.value = value; }
public String getName() { return this.name; }
public void setName(String name) { this.name = name; }
}
現在JpaRepository接口擴展:
@RepositoryRestResource(collectionResourceRel="option", path="option")
public interface OptionRepository extends JpaRepository<Option, Long> {
}
我只加這兩個文件的程序和GET,PUT和POST的工作。順便說一句,事實證明,如果我註釋掉@RepositoryRestResource語句,調用/ option/1將返回HTTP 404.一些文檔表明它不是必需的,但我想它確實是。
現在過濾輸出。讓我們假裝通過讓服務器始終返回Option(id = 5)來進行過濾。我這樣做的:
@RepositoryRestResource(collectionResourceRel="option", path="option")
public interface OptionRepository extends JpaRepository<Option, Long> {
@RequestMapping(path = "/option/{id}", method = RequestMethod.GET)
@Query("from Option o where o.id = 5")
public Iterable<Option> getById(@PathVariable("id") Long id);
}
當我運行該服務器,並做GET /選項/ 1等我回來......選項1,不選5.不使用@Query。
什麼是影響GET,PUT等所需的魔法?
謝謝,
傑羅姆。
不要忘記接受/ upvote答案,如果它幫助你..) – Cepr0