看板 java 關於我們 聯絡資訊
: ※ 發信站: 批踢踢實業坊(ptt.cc) : ◆ From: 123.193.201.124 : → cyclone350:前面Order的例子是參考王者歸來的書 03/13 22:46 : → qrtt1:為什麼不檢查 order user == current user 就好? 03/14 08:22 : → cyclone350:我想問的就是如何有效果的達到這件事 03/14 08:58 : → qrtt1:session, token, https !? 03/14 09:32 q大所提的算是很實際的已知條件 前篇文章一開始有提及說,我們可以在每次set前都檢查User資料 current user資料包含從Session拿... 從https拿... 或是從DB撈值判斷, anyway,這種很實際的說法被我省略掉了, 因為不論如何,這種作法都必須在set前做檢查。 在DynamicProxy作法裡,set必須多傳一個參數進去,如何把參數傳進去 當然是可透過技術上的方式,例如在set前透過session抓到current user 抓到後再呼叫 setProductName("theName",user)。 應該說我要問的的確跟技術有點關係,但我想達到的目標比較像是設計方法 讓我分派下去的PG可以著重在商業邏輯撰寫,而不是在邏輯撰寫中夾雜 許多權限的分派,或記憶體控管之類等等.... 也就是問問看是否有更AOP的作法 其中JSR250我說"可以理解",意思是使用@RolesAllowed("ROLE_ADMIN") 背後做法可以去整個 applicationContext 或 webContainer 去拿到 current user 如何拿當然包刮 session, https, db ... 之類的 但是這個值是死的,我只能判斷 current user 是不是等於 ROLE_ADMIN 想要動態的方式如下 例如像是這樣 public class order { @Owner private String orderUser; private String productName; @AllowByOwner public void setOrderUser(String orderUser) { this.orderUser = orderUser; } @AllowByOwner private void setProductName(String productName) { this.productName = productName } } 可是這樣子要如何在背後程式實作,我是沒有想法的... 我可以從各種方式抓到 current user... 但是我不知道如何用哪種方式抓到 order user... 我也不確定透過反射機制是否可以達到這樣的做法 雖然我訂了 @Owner 介面,但是不知道如何實作 也許我沒理解q大所要回答的意思 主要還是在問更彈性的設計來達到security的效果。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.218.64.133
qrtt1:order 建立時,會記錄下 order 與 user 對應關係。這樣就有 03/14 10:50
cyclone350:http://ppt.cc/Sqil 這是spring對@RolesAllowed的實作 03/14 10:51
qrtt1:查出 order owner 的方法了。檢查二者是否一致,是怕 owner 03/14 10:51
qrtt1:把它的 url 給人(或被偷了)。做 token 驗證也可以防不合法 03/14 10:52
qrtt1:的存取。不過,用 aop 或 filter 能做到查核操作 flow 03/14 10:53
qrtt1:是不是屬於正常的情況。 03/14 10:53
qrtt1:當然,可能我想太簡單,你想太複雜 :P 所以,搭不上線 orz 03/14 10:54
cyclone350:我想我理解q大的意思了。我再去研究spring security 03/14 23:38
cyclone350:有沒有功能符合這種需求。 03/14 23:40
qrtt1:ps. 我只是一般而論,俺沒用 spring security 的經驗qq 03/15 10:00
kiwatami:同意q大 session + user-order的mapping物件就可以解決 03/29 22:51