隨筆 - 175  文章 - 202  trackbacks - 0
          <2012年11月>
          28293031123
          45678910
          11121314151617
          18192021222324
          2526272829301
          2345678

          第一個(gè)Blog,記錄哈哈的生活

          常用鏈接

          留言簿(16)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          收藏夾

          Java links

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          @import url(http://www.aygfsteel.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);

          二進(jìn)海底,龍宮那邊新多出一個(gè)海螺,進(jìn)去就是龍宮密道,里面有DOMO組員楊志豪,把他弄走,就在原地來(lái)回跑,會(huì)定期出現(xiàn)一大魚一大蝦,毆之,每次法寶加40點(diǎn)。我在這里練藍(lán)格怪衣,這個(gè)每用一次也加5點(diǎn)。
          posted @ 2014-05-10 21:21 哈哈的日子 閱讀(494) | 評(píng)論 (0)編輯 收藏
          等到符鬼很餓(能喂2個(gè)東西的時(shí)候),找到兩個(gè)相同的喂食物,比如2個(gè)獅子精【有一個(gè)“獅子吼”技能】,設(shè)此時(shí)的符鬼有一個(gè)技能是“強(qiáng)音波”,點(diǎn)擊“獅子吼”兩次,符鬼的那個(gè)技能就變成了“無(wú)” !@import url(http://www.aygfsteel.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);

          為了成功,保存好,多來(lái)幾次!
          posted @ 2014-05-05 21:43 哈哈的日子 閱讀(433) | 評(píng)論 (0)編輯 收藏
          @import url(http://www.aygfsteel.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css); 在月河村的客棧,一直向右,到不能再右,向下一步,然后再點(diǎn)寶物就可以了。
          posted @ 2014-05-05 21:34 哈哈的日子 閱讀(502) | 評(píng)論 (0)編輯 收藏
          人成熟與不成熟跟年齡沒(méi)有關(guān)系。人成熟不成熟,就是你能不能站在對(duì)方的角度去看待事物,就是能不能把我的世界變成你的世界。這個(gè)社會(huì)有很多的成年人,還沒(méi)有脫離幼稚的行為。一點(diǎn)小事情就跟別人爭(zhēng)來(lái)爭(zhēng)去。
                人不成熟的第一個(gè)特征:就是立即要回報(bào)。
                他不懂得只有春天播種,秋天才會(huì)收獲。很多人在做任何事情的時(shí)候,剛剛付出一點(diǎn)點(diǎn),馬上就要得到回報(bào)。(學(xué)鋼琴,學(xué)英語(yǔ)等等,剛開始就覺(jué)得難,發(fā)現(xiàn)不行,立即就要放棄。)很多人做生意,開始沒(méi)有什么成績(jī),就想著要放棄,有的人一個(gè)月放棄,有的人三個(gè)月放棄,有的人半年放棄,有的人一年放棄,我不明白人們?yōu)槭裁摧p易放棄,但是我知道,放棄是一種習(xí)慣,一種典型失敗者的習(xí)慣。所以說(shuō)你要有眼光,要看得更遠(yuǎn)一些,眼光是用來(lái)看未來(lái)的!
                對(duì)在生活中有放棄習(xí)慣的人,有一句話一定要送給你:"成功者永不放棄,放棄者永不成功"。那為什么很多的人做事容易放棄呢?美國(guó)著名成功學(xué)大師拿破侖希爾說(shuō)過(guò):
          窮人有兩個(gè)非常典型的心態(tài):
          1、永遠(yuǎn)對(duì)機(jī)會(huì)說(shuō):"不";
          2、總想"一夜暴富"。
                今天你把什么機(jī)會(huì)都放到他的面前,他都會(huì)說(shuō)"不"。就是今天你開飯店很成功,你把你開飯店的成功經(jīng)驗(yàn),發(fā)自內(nèi)心的告訴你的親朋好友,讓他們也去開飯店,你能保證他們每個(gè)人都會(huì)開飯店嗎?是不是照樣有人不干。
                所以這是窮人一個(gè)非常典型的心態(tài),他會(huì)說(shuō):"你行,我可不行!"。一夜暴富的表現(xiàn)在于,你跟他說(shuō)任何的生意,他的第一個(gè)問(wèn)題就是"掙不掙錢",你說(shuō)"掙錢",他馬上就問(wèn)第二個(gè)問(wèn)題"容易不容易",你說(shuō)"容易",這時(shí)他跟著就問(wèn)第三個(gè)問(wèn)題"快不快",你說(shuō)"快"!這時(shí)他就說(shuō)"好,我做!"呵呵,你看,他就這么的幼稚!
                大家想一想,在這個(gè)世界上有沒(méi)有一種:"又掙錢,又容易,又快的",沒(méi)有的,即使有也輪不到我們啊,所以說(shuō)在生活中,我們一定要懂得付出。那為什么你要付出呢?因?yàn)槟闶菫榱俗非竽愕膲?mèng)想而付出的,人就是為了希望和夢(mèng)想活著的,如果一個(gè)人沒(méi)有夢(mèng)想,沒(méi)有追求的話,那一輩子也就沒(méi)有什么意義了!
                在生活中你想獲得什么,你就得先付出什么。你想獲得時(shí)間,你就得先付出時(shí)間,你想獲得金錢,你得先付出金錢。你想得到愛(ài)好,你得先犧牲愛(ài)好。你想和家人有更多的時(shí)間在一起,你先得和家人少在一起。
          但是,有一點(diǎn)是明確的,你在這個(gè)項(xiàng)目中的付出,將會(huì)得到加倍的回報(bào)。就象一粒種子,你把它種下去以后,然后澆水,施肥,鋤草,殺蟲。最后你收獲的是不是幾十倍,上百倍的回報(bào)。
                在生活中,你一定要懂得付出,你不要那么急功近利,馬上想得到回報(bào),天下沒(méi)有白吃的午餐,你輕輕松松是不可能成功的。
          一定要懂得先付出!
          人不成熟的第二個(gè)特征:就是不自律。
          不自律的主要表現(xiàn)在哪里呢?
          一、不愿改變自己:
                你要改變自己的思考方式和行為模式。你要改變你的壞習(xí)慣。其實(shí),人與人之間能力是沒(méi)有多大區(qū)別,區(qū)別在于思考方式的不同。一件事情的發(fā)生,你去問(wèn)成功者和失敗者,他們的回答是不一樣的,甚至是相違背的。
                我們今天的不成功是因?yàn)槲覀兊乃伎挤绞讲怀晒ΑR粋€(gè)好的公式是:當(dāng)你種植一個(gè)思考的種子,你就會(huì)有行動(dòng)的收獲,當(dāng)你把行動(dòng)種植下去,你會(huì)有習(xí)慣的收獲,當(dāng)你再把習(xí)慣種植下去,你就會(huì)有個(gè)性的收獲,當(dāng)你再把個(gè)性種植下去,就會(huì)決定你的命運(yùn)。
                但是如果你種植的是一個(gè)失敗的種子,你得到的一定是失敗,如果你種植的是一個(gè)成功的種子,那么你就一定會(huì)成功。
          很多人有很多的壞習(xí)慣,如:看電視,打麻將,喝酒,泡舞廳,他們也知道這樣的習(xí)慣不好,但是他們?yōu)槭裁床辉敢飧淖兡兀恳驗(yàn)楹芏嗳藢幵溉淌苣切┎缓玫纳罘绞剑膊辉敢馊淌芨淖儙?lái)的痛苦
          二、愿意背后議論別人:
                如果在生活中,你喜歡議論別人的話,有一天一定會(huì)傳回去,中國(guó)有一句古話,論人是非者,定是是非人
          三、消極,抱怨:
                你在生活中喜歡那些人呢?是那些整天愁眉苦臉,整天抱怨這個(gè)抱怨哪個(gè)的人,還是喜歡那些整天開開心心的人。如果你在生活中是那些抱怨的,消極的人的話,你一定要改變你性格中的缺陷。如果你不改變的話,你是很難適應(yīng)這個(gè)社會(huì)的。你也是很難和別人合作的。
                生活當(dāng)中你要知道,你怎樣對(duì)待生活,生活也會(huì)怎樣對(duì)待你,你怎樣對(duì)待別人,別人也會(huì)怎樣對(duì)待你。所以你不要消極,抱怨。你要積極,永遠(yuǎn)的積極下去,就是那句話:成功者永不抱怨,抱怨者永不成功
          人不成熟的第三個(gè)特征:經(jīng)常被情緒所左右。
          一個(gè)人成功與否,取決于五個(gè)因素:
          學(xué)會(huì)控制情緒
          健康的身體
          良好的人際關(guān)系
          時(shí)間管理
          財(cái)務(wù)管理
                如果你想成功,一定要學(xué)會(huì)管理好這五個(gè)因素,為什么把情緒放在第一位呢?把健康放在第二位呢?是因?yàn)槿绻阍購(gòu)?qiáng)的身體,如果你情緒不好,就會(huì)影響到你的身體,現(xiàn)在一個(gè)人要成功20%靠的是智商,80%靠的是情商,所以你要控制好你的情緒,情緒對(duì)人的影響是非常大的。人與人之間,不要為了一點(diǎn)點(diǎn)小事情,就暴跳如雷,這樣是不好的。
          所以在生活中,你要養(yǎng)成什么樣的心態(tài)呢?你要養(yǎng)成"三不","三多":

          不批評(píng)、不抱怨、不指責(zé);

          多鼓勵(lì)、多表?yè)P(yáng)、多贊美。

                你就會(huì)成為一個(gè)受社會(huì)大眾歡迎的人。如果你想讓你的伙伴更加的優(yōu)秀,很簡(jiǎn)單,永遠(yuǎn)的激勵(lì)和贊美他們。
                即使他們的確有毛病,那應(yīng)該怎么辦呢?這時(shí)是不是應(yīng)該給他們建議,在生活中你會(huì)發(fā)現(xiàn)有這樣一個(gè)現(xiàn)象,有人給別人建議的時(shí)候,別人能夠接受,但是有建議的時(shí)候別人就會(huì)生氣。其實(shí)建議的方式是最重要的,就是"三明治"贊美,建議,再贊美!
          想一想,你一天贊美了幾個(gè)人,有的人可能以為贊美就是吹捧,就是拍馬屁。贊美和吹捧是有區(qū)別的,贊美有四個(gè)特點(diǎn):
          1、是真誠(chéng)的
          2、是發(fā)自內(nèi)心的
          3、被大眾所接受的
          4、無(wú)私的
                如果你帶有很強(qiáng)的目的性去贊美,那就是拍馬屁。當(dāng)你贊美別人時(shí)候,你要大聲的說(shuō)出來(lái),當(dāng)你想批評(píng)別人的時(shí)候,一定要咬住你的舌頭!
                人不成熟的第四個(gè)特征:不愿學(xué)習(xí),自以為是,沒(méi)有歸零心態(tài)。
                其實(shí)人和動(dòng)物之間有很多的相似之處,動(dòng)物的自我保護(hù)意識(shí)比人更強(qiáng)(嬰兒與小豬)但是,人和動(dòng)物最大的區(qū)別在于,人會(huì)學(xué)習(xí),人會(huì)思考。人是要不斷學(xué)習(xí)的,你千萬(wàn)不要把你的天賦潛能給埋沒(méi)了,一定要學(xué)習(xí),一定要有一個(gè)空杯的心態(tài)。我們象誰(shuí)去學(xué)習(xí)呢?就是直接向成功人士學(xué)習(xí)!
                你要永遠(yuǎn)學(xué)習(xí)積極正面的東西,不看,不聽那些消極,負(fù)面的東西。一旦你吸收了那些有毒的思想,它會(huì)腐蝕你的心靈和人生    的。在這個(gè)知識(shí)經(jīng)濟(jì)的時(shí)代里,學(xué)習(xí)是你通向未來(lái)的唯一護(hù)照。在這樣一個(gè)速度,變化,危機(jī)的時(shí)代,你只有不斷的學(xué)習(xí)你才不會(huì)被這個(gè)時(shí)代所拋棄,一定要有學(xué)習(xí),歸零的心態(tài)。去看每一個(gè)人的優(yōu)點(diǎn),"三人行,必有我?guī)熞玻ⅲ?/div>
          人不成熟的第五個(gè)特征:做事情不靠信念,靠人言。
                我們說(shuō)相信是起點(diǎn),堅(jiān)持是終點(diǎn)。很多人做事不靠信念,喜歡聽別人怎么說(shuō)。對(duì)自己所做的事業(yè),沒(méi)有100%的信心,相信和信念是兩個(gè)不同的概念,相信是看得見(jiàn)的,信念是看不見(jiàn)的。
                信念是人類的一種態(tài)度,但是很多的人他們做事,不靠信念的,而是要聽別人怎么說(shuō),你要登上山峰,要問(wèn)那些爬到山頂?shù)娜耍f(wàn)不能問(wèn)沒(méi)有爬過(guò)山的人。
                這里不是說(shuō)別人的建議不要去聽,你可以去參考,但是你要記住,你來(lái)做這個(gè)生意是為了實(shí)現(xiàn)你的夢(mèng)想,實(shí)現(xiàn)你自己的價(jià)值。其他的人是不會(huì)關(guān)心你的夢(mèng)想的,只有你自己關(guān)心你自己的夢(mèng)想,只有你自己關(guān)心你自己能否真正的成功。這才是最重要的!
          只要你的選擇是正確的,永遠(yuǎn)不要在乎別人怎么說(shuō),以上的人不成熟的五個(gè)特征,你們自己去對(duì)照,那一個(gè)特征是你有的,你一定要在最短的時(shí)間里改正,只要你相信你自己能夠戰(zhàn)勝自己的不成熟,你就會(huì)逐漸的成長(zhǎng),成熟起來(lái),你就會(huì)得到你想要的那種生活。你就會(huì)實(shí)現(xiàn)你時(shí)間自由、財(cái)務(wù)自由、精神自由的人生夢(mèng)想! 
          posted @ 2013-11-20 16:17 哈哈的日子 閱讀(241) | 評(píng)論 (0)編輯 收藏

          設(shè)置了 scanPeriod 之后,過(guò)了好長(zhǎng)時(shí)間,都不生效,后來(lái) debug 代碼。發(fā)現(xiàn)了下面這段。

            private volatile long mask = 0xF;
          @Override
          public FilterReply decide(Marker marker, Logger logger, Level level,
          String format, Object[] params, Throwable t) {
          if (!isStarted()) {
          return FilterReply.NEUTRAL;
          }
          // for performance reasons, skip change detection (MASK-1) times out of MASK.
          // Only once every MASK calls is change detection code executed
          // Note that MASK is a variable itself.
          if (((invocationCounter++) & mask) != mask) {
          return FilterReply.NEUTRAL;
          }
          long now = System.currentTimeMillis();
          synchronized (configurationWatchList) {
          updateMaskIfNecessary(now);
          if (changeDetected(now)) {
          // Even though reconfiguration involves resetting the loggerContext,
          // which clears the list of turbo filters including this instance, it is
          // still possible for this instance to be subsequently invoked by another
          // thread if it was already executing when the context was reset.
          disableSubsequentReconfiguration();
          detachReconfigurationToNewThread();
          }
          }
          return FilterReply.NEUTRAL;
          }
          

          這行 if (((invocationCounter++) & mask) != mask) { mask = 0xf,其實(shí)要每循環(huán) 0xf 次,也就是 15 次,才會(huì)去 check 一次是否要更新,也就是說(shuō),不管過(guò)了多久,如果沒(méi)到這 15 次,也不會(huì)去檢查是否更新配置。
          也就是說(shuō),我多打幾次 log,配置文件就生效了。

          @import url(http://www.aygfsteel.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
          posted @ 2013-11-12 14:25 哈哈的日子 閱讀(1617) | 評(píng)論 (0)編輯 收藏

          spring security(下簡(jiǎn)寫為 ss)控制的安全主要有兩方面,Web 和 Method Call,這兩個(gè)方面的權(quán)限控制有比較多的相通的設(shè)計(jì),也有一些特別的功能。比如 Method Call 可以做 After Invocation 控制,而 Web 可以做 Ip 地址控制。

          這里面有兩個(gè)最基本的概念:authentication manager 和 access decision manager,前者控制認(rèn)證,后都控制鑒權(quán)。
          1. 在 ss 的認(rèn)證系統(tǒng)中,默認(rèn)的實(shí)現(xiàn)幫助我們提供了三個(gè)概念,用戶(user),角色(authority,一般存 role)和組(group),三者的關(guān)系是,組、角色與用戶都是多對(duì)多關(guān)系,組和角色間沒(méi)關(guān)系,默認(rèn)是不啟用組的。后續(xù),在 Acl 權(quán)限管理中,可以看到角色之間,是可以有包含(樹形?)關(guān)系的。
          2. 在 ss 的鑒權(quán)系統(tǒng)中,明顯會(huì)比認(rèn)證復(fù)雜得多。有 AccessDecisionManager, AccessDecisionVoter(前置), AfterInvocationProvider(后置), RoleHierarchy, SidRetrievalStrategy, LookupStrategy, PermissionGrantingStrategy, SecurityExpressionHandler, AclService, MutableAclService, AclCache 概念過(guò)多了,要一個(gè)一個(gè)解釋
          a) 中心是 AccessDecisionManager,主要負(fù)責(zé) AccessDecisionVoter 的管理,默認(rèn)提供了3種實(shí)現(xiàn):1. AffirmativeBased 如果有任何一個(gè)投票器允許訪問(wèn),請(qǐng)求將被立刻允許,而不管之前可能有的拒絕決定。2. ConsensusBased 多數(shù)票(允許或拒絕)決定了結(jié)果,平局的投票 和空票(全是棄權(quán)的)的結(jié)果是可配置的。3. UnanimousBased 所有的投票器必須全是允許的,否則訪問(wèn)將 被拒絕。
          AccessDecisionManager 在用于 Web 和 Method Call 兩種情況下,可能是不一致的,因?yàn)楣δ芤膊灰恢隆?br /> b) Method Call 除了使用 AccessDecisionManager 進(jìn)行權(quán)限判斷外,還可以增加 AfterInvocationProvider 來(lái)進(jìn)行出口數(shù)據(jù)的判斷,默認(rèn)提供了 3 種。
          1) PostInvocationAdviceProvider: 需要提供一個(gè) PostInvocationAuthorizationAdvice,默認(rèn)實(shí)現(xiàn)只有一個(gè),就是 ExpressionBasedPostInvocationAdvice,可以通過(guò) spel 來(lái)進(jìn)行權(quán)限判斷。注意 ExpressionBasedPostInvocationAdvice 中需要提供一個(gè) MethodSecurityExpressionHandler,能夠創(chuàng)建出一個(gè) MethodSecurityExpressionOperations,放到 spel context 中,供 spel function 調(diào)用,這樣的方式,在后續(xù)很常見(jiàn)。
          2) AclEntryAfterInvocationProvider 和 AclEntryAfterInvocationCollectionFilteringProvider : 這兩種都差不多,主要依賴 AclService, ObjectIdentityRetrievalStrategy, SidRetrievalStrategy 來(lái)配合,檢查返回值的權(quán)限。Collection 版本的,可以把無(wú)權(quán)限的數(shù)據(jù)去掉,只留下有權(quán)限的數(shù)據(jù)。
          c) RoleHierarchy 提供了角色之間的關(guān)系,提供了兩個(gè)實(shí)現(xiàn),一個(gè)是沒(méi)關(guān)系的,直接把 user 的 role 返回,另外一個(gè)是有繼承關(guān)系的。繼承關(guān)系實(shí)現(xiàn)挺有意思的,能夠處理多級(jí)的 include 關(guān)系,比較好用。
          RoleHierarchy 的使用比較復(fù)雜,會(huì)被 AccessDecisionVoter, SidRetrievalStrategy, SecurityExpressionHandler 用到,SecurityExpressionHandler 又會(huì)被 AccessDecisionVoter 用到,所以還是有點(diǎn)兒混亂。
          具體的說(shuō) SecurityExpressionHandler 會(huì)用到 PermissionEvaluator 和 RoleHierarchy,PermissionEvaluator 的一個(gè)實(shí)現(xiàn) AclPermissionEvaluator 會(huì)用到 SidRetrievalStrategy。
          d) SidRetrievalStrategy 和 RoleHierarchy 的功能比較接近,比 RoleHierarchy 高一個(gè)抽象層次,功能上也有所區(qū)別,是從一個(gè) authentication 拿到所有相關(guān)的 Sid(包括 Role(GrantedAuthoritySid) 和 User(PrincipalSid)),而 RoleHierarchy 只包括了 Role(GrantedAuthoritySid)的繼承關(guān)系。
          e) LookupStrategy 通過(guò) ObjectIdentity 和 Sid 把相關(guān)的 Acl 查詢出來(lái)。可以在 LookupStrategy 擴(kuò)展 Acl 和 Ace 的功能,比如在 Ace 上面加上時(shí)間的條件限制,就需要自己定義 LookupStrategy,把時(shí)間條件從數(shù)據(jù)庫(kù)查詢出來(lái),并放到自定義的 Ace 當(dāng)中。
          但這件事情非常麻煩,因?yàn)槟J(rèn)實(shí)現(xiàn)的 BasicLookupStrategy 是個(gè) Final 的類,所以只能自己直接實(shí)現(xiàn)接口,無(wú)法使用現(xiàn)有的功能。
          LookupStrategy 會(huì)生成 Acl,而最終的權(quán)限驗(yàn)證是由 Acl 完成的,如果想驗(yàn)證帶時(shí)間條件的 Ace,需要給 Acl 設(shè)置自定義的帶有檢查時(shí)間功能的 PermissionGrantingStrategy,實(shí)際上,這個(gè) PermissionGrantingStrategy 會(huì)首先設(shè)置給 LookupStrategy,LookupStrategy 在創(chuàng)建 Acl 的時(shí)候,再放到 Acl 中去。
          f) SecurityExpressionHandler 能夠執(zhí)行 spel,得到是否可以訪問(wèn)的結(jié)果,它的子類都是繼承自 AbstractSecurityExpressionHandler 的,有一個(gè)非常重要的方法是 SecurityExpressionOperations createSecurityExpressionRoot(Authentication authentication, T invocation),創(chuàng)建一個(gè) SecurityExpressionOperations 放到 EvaluationContext 中去,提供 spel 中執(zhí)行的方法實(shí)現(xiàn)。比如 SecurityExpressionOperations 的一個(gè)抽象實(shí)現(xiàn) SecurityExpressionRoot 中,就包含了大量的權(quán)限驗(yàn)證方法,如 hasRole, hasPermission 等常用的功能。
          g) AclService, MutableAclService, AclCache 概念比較簡(jiǎn)單,AclService 是通過(guò) LookupStrategy 查詢 Acl,自已可以查詢 ObjectIdentity 的父子關(guān)聯(lián)關(guān)系,MutableAclService 提供了修改的能力,AclCache 為 AclService 提供緩存,默認(rèn)的實(shí)現(xiàn)了一個(gè) EhCacheBasedAclCache。
          3. ss 的鑒權(quán)模型 Sid, ObjectIdentity, Acl, Ace, Permission
          a) Sid: 是中心,所有的授權(quán)會(huì)關(guān)聯(lián)在 Sid 上面,Sid 和之前的 Role Base Permission 會(huì)有些相同的地方,但也明顯不同,Sid 默認(rèn)實(shí)現(xiàn)情況下,分為 GrantedAuthoritySid 和 PrincipalSid,其實(shí)就是 Role 和 User,通過(guò) SidRetrievalStrategy 拿到一個(gè) Authentication 的 Sid。
          b) ObjectIdentity: 可以理解成 Resource,就是可訪問(wèn)的目標(biāo)資源,有 id 和 type 兩個(gè)字段,默認(rèn)實(shí)現(xiàn)的 ObjectIdentityImpl 會(huì)直接調(diào)用目標(biāo) domainObject 的 getClass 和 getId 方法拿到兩個(gè)參數(shù)。在 PermissionEvaluator, AfterInvocationProvider 中,會(huì)用到 ObjectIdentityRetrievalStrategy 和 ObjectIdentityGenerator,ObjectIdentityRetrievalStrategy 會(huì)根據(jù) domainObject 拿到 ObjectIdentity,然后使用 Acl 進(jìn)行鑒權(quán),ObjectIdentityGenerator 會(huì)在系統(tǒng)提供的不是 domainObject,而是 type, id 的時(shí)候,拿到 ObjectIdentity,然后進(jìn)行 Acl 鑒權(quán),這兩個(gè)接口有一個(gè)共同的實(shí)現(xiàn) ObjectIdentityRetrievalStrategyImpl,如果需要在 ObjectIdentity 進(jìn)行新的抽象,需要用新的實(shí)現(xiàn),到得不同的 ObjectIdentity,比如將業(yè)務(wù)對(duì)象分類鑒權(quán)這樣的需求。
          c) Acl, 每個(gè) ObjectIdentity 最多對(duì)應(yīng)一條 Acl,Acl 中包含了很多,包括 parental,說(shuō)明 Acl 是有繼承關(guān)系的?其實(shí)不是,呵呵,是 ObjectIdentity 有繼承關(guān)系而已。有一個(gè) ObjectIdentity,有很多 Sid,還有一個(gè)叫做 Owner 的 Sid,有從 LookupStrategy 傳過(guò)來(lái)的 PermissionGrantingStrategy,進(jìn)行實(shí)際的鑒權(quán),還有 AclAuthorizationStrategy 檢查有沒(méi)有權(quán)限進(jìn)行 Acl security check。實(shí)現(xiàn)時(shí)間條件檢查,就擴(kuò)展 PermissionGrantingStrategy。
          為什么沒(méi)有 RoleHierarchy 或是 SidRetrievalStrategy 存在呢?是因?yàn)檎{(diào)用 Acl 進(jìn)行權(quán)限檢查之前,已經(jīng)把相關(guān)的 Sid 得到了,再給 Acl 的。
          d) Ace, Permission: Ace 存儲(chǔ) Sid, Permission,提供給 Acl 鑒權(quán)用。增加時(shí)間條件的話,最基本的,就是要在 Ace 中,增加時(shí)間條件字段。Permission 是用二進(jìn)制存儲(chǔ)的,但默認(rèn)實(shí)現(xiàn)的數(shù)據(jù)庫(kù)存儲(chǔ)并不是,是一個(gè)一條,存在數(shù)據(jù)庫(kù)里面的。

          好吧,概念還是非常多的,不過(guò)鑒于權(quán)限控制本身就是個(gè)復(fù)雜的話題,ss 這些設(shè)計(jì)的我覺(jué)得已經(jīng)非常好,也基本夠用了。

          @import url(http://www.aygfsteel.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
          posted @ 2013-11-12 14:25 哈哈的日子 閱讀(661) | 評(píng)論 (0)編輯 收藏
          Security.setProperty("ssl.SocketFactory.provider", "com.datayes.cloud.util.TrustAllSSLSocketFactory");
          package com.datayes.cloud.util;

          import javax.net.ssl.SSLContext;
          import javax.net.ssl.SSLSocketFactory;
          import javax.net.ssl.TrustManager;
          import javax.net.ssl.X509TrustManager;
          import java.io.IOException;
          import java.net.InetAddress;
          import java.net.Socket;
          import java.security.KeyManagementException;
          import java.security.KeyStoreException;
          import java.security.NoSuchAlgorithmException;
          import java.security.UnrecoverableKeyException;
          import java.security.cert.CertificateException;
          import java.security.cert.X509Certificate;

          public class TrustAllSSLSocketFactory extends SSLSocketFactory {
              SSLContext sslContext = SSLContext.getInstance("TLS");

              public TrustAllSSLSocketFactory() throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException {
                  TrustManager tm = new X509TrustManager() {
                      public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
                      }

                      public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
                      }

                      public X509Certificate[] getAcceptedIssuers() {
                          return null;
                      }
                  };
                  sslContext.init(nullnew TrustManager[]{tm}, null);
              }

              @Override
              public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException {
                  return sslContext.getSocketFactory().createSocket(socket, host, port, autoClose);
              }


              @Override
              public Socket createSocket(String host, int port) throws IOException {
                  return sslContext.getSocketFactory().createSocket(host, port);
              }

              @Override
              public Socket createSocket(String host, int port, InetAddress localHost, int localPort) throws IOException {
                  return sslContext.getSocketFactory().createSocket(host, port, localHost, localPort);
              }

              @Override
              public Socket createSocket(InetAddress host, int port) throws IOException {
                  return sslContext.getSocketFactory().createSocket(host, port);
              }

              @Override
              public Socket createSocket(InetAddress address, int port, InetAddress localAddress, int localPort) throws IOException {
                  return sslContext.getSocketFactory().createSocket(address, port, localAddress, localPort);
              }

              @Override
              public Socket createSocket() throws IOException {
                  return sslContext.getSocketFactory().createSocket();
              }

              @Override
              public String[] getDefaultCipherSuites() {
                  return new String[0];
              }

              @Override
              public String[] getSupportedCipherSuites() {
                  return new String[0];
              }
          }
          posted @ 2013-09-10 12:30 哈哈的日子 閱讀(1593) | 評(píng)論 (0)編輯 收藏
          主要是遇到的一些問(wèn)題吧,順便感謝一下幫助了我的人。安裝之前,聽說(shuō)安裝正式環(huán)境的 OpenStack 挺麻煩的,所以,出發(fā)點(diǎn)就是安裝一個(gè)能測(cè)試使用的 Dev 環(huán)境就可以了,不求全,時(shí)間緊張,能用就行。所以,定位到 devstack(http://devstack.org),一鍵安裝 OpenStack

          問(wèn)題
          1. 想用 CentOS 來(lái)著,沒(méi)原因,習(xí)慣了,后來(lái)發(fā)現(xiàn),devstack 默認(rèn)支持 ubuntu,為了簡(jiǎn)單,改用 ubuntu
          2. 安裝過(guò)程中,需要大量的網(wǎng)絡(luò)下載,網(wǎng)速如果不快,挺急人的。
          3. 安裝到 stack.sh 的 191 行,會(huì)報(bào)錯(cuò) [ERROR] ./stack.sh:191 g-api did not start,這個(gè)問(wèn)題折騰了我好久,最后按照 https://answers.launchpad.net/glance/+question/231020 辦法解決了,非常感謝 Marc PINHEDE (pinhede-marc) ,但在 https://bugs.launchpad.net/devstack/+bug/1119428 里,有人說(shuō)只要修改 /etc/default/locale LANG="POSIX",就可以了,其實(shí)我兩個(gè)都改了,也不知道是哪個(gè)產(chǎn)生了作用。但,第一種方法,需要安裝到一半,失敗了,才會(huì)有提到的 /opt/stack/glance/glance/notifier/notify_kombu.py 文件,但第二種方法,剛開始就可以嘗試,所以我如果下次安裝的話,會(huì)先把第二種配置修改好,如果安裝失敗了,再使用第一種方法繼續(xù)。


          posted @ 2013-08-06 10:19 哈哈的日子 閱讀(626) | 評(píng)論 (0)編輯 收藏
          在 compile hadoop-common 的時(shí)候,提示 protobuf 出錯(cuò),查了一下,需要安裝 protobuf(是一個(gè)非 Java 的組件)
          先到 homebrew 上找到安裝 homebrew 的方法 ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"
          然后不能直接 brew install protobuf,因?yàn)闀?huì)安裝 1.5.0,也沒(méi)辦法編譯過(guò)的,我試了。
          需要先 brew versions protobuf,然后 cd `brew --prefix`(我默認(rèn)的是 cd /usr/local),直接招待剛才 brew versions 出來(lái)的那個(gè) git clone 方法。
          然后再次 brew install protobuf ,就安裝  1.4.1 了,繼續(xù) maven 就沒(méi)有問(wèn)題了。
          posted @ 2013-07-24 13:24 哈哈的日子 閱讀(379) | 評(píng)論 (0)編輯 收藏
          在 .bash_profile 中增加一行 export JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8 就可以了。


          posted @ 2013-07-24 13:20 哈哈的日子 閱讀(390) | 評(píng)論 (0)編輯 收藏
          一直以來(lái),總有人說(shuō) IDEA 這個(gè) IDE 要比 Eclipse 好。中間也做過(guò)幾次嘗試,均告放棄。原因雖然各種各樣,但歸結(jié)起來(lái),就是沒(méi)時(shí)間,畢竟熟悉一個(gè) IDE 是要時(shí)間的,項(xiàng)目中很少會(huì)有這么輕松的時(shí)候,又不愿意過(guò)多使用業(yè)余時(shí)間,就這樣放下了。

          最近有了一些時(shí)間,又把這東西拾起來(lái)看了看。不得不說(shuō),有些地方,做得還是很好的,當(dāng)然,也有比 Eclipse 差的地方,我估計(jì)已經(jīng)有無(wú)數(shù)人對(duì)比過(guò)了,我也不再比了,focus 在我的關(guān)注點(diǎn)上:“快捷鍵”

          IDEA 因?yàn)槭褂玫氖窃?Java 而不是 swt,對(duì)于平臺(tái)集成方面,不如 Eclipse。
          比如在 Eclipse 中,可以設(shè)置 Option + B 這樣的快捷鍵,而 IDEA 不行,因?yàn)?Option + B 在 Mac 下是有輸出字符的。

          為了解決這個(gè)問(wèn)題,我到 KeyRemap4MacBook 中,把 Option + B 改成 Option + Left,同理,把 Option + F 改成 Option + Right
          這時(shí),在 IDEA 中比較常用的快捷鍵 Command + Option + B 就變成了 Command + Option + Left,成了后退了。
          還需要在 KeyRemap4MacBook 中把 Command + Option + B 恢復(fù)成他自己,而且一定要放在 Option + B 前面,否則就沒(méi)用了。

          最終,我得到了這樣的 private.xml


          <?xml version="1.0"?>
          <root>
            <item>
              <name>haha</name>
              <identifier>private.haha</identifier>
              <autogen>--KeyToKey-- KeyCode::P,VK_CONTROL, KeyCode::CURSOR_UP</autogen>
              <autogen>--KeyToKey-- KeyCode::N,VK_CONTROL, KeyCode::CURSOR_DOWN</autogen>
              <autogen>__KeyToKey__ KeyCode::F,VK_OPTION, KeyCode::CURSOR_RIGHT,VK_OPTION</autogen>
              <autogen>__KeyToKey__ KeyCode::B,VK_OPTION,VK_COMMAND, KeyCode::B,VK_OPTION,VK_COMMAND</autogen>
              <autogen>__KeyToKey__ KeyCode::B,VK_OPTION, KeyCode::CURSOR_LEFT,VK_OPTION</autogen>
              <autogen>__KeyToKey__ KeyCode::D,VK_OPTION, KeyCode::FORWARD_DELETE,VK_OPTION</autogen>
            </item>
          </root>
          posted @ 2013-07-22 13:22 哈哈的日子 閱讀(333) | 評(píng)論 (0)編輯 收藏
          $(window).scroll(function() {
             if($(window).scrollTop() + $(window).height() == $(document).height()) {
                 // load next
             }
          });
          posted @ 2012-12-19 18:10 哈哈的日子 閱讀(435) | 評(píng)論 (0)編輯 收藏
          把這個(gè)文件放到 WEB-INF/classes 下面,隨便申請(qǐng)一個(gè)臨時(shí) License 就可以了,會(huì)變成 Enterprice 的,其它信息保留。
          stash_2_crack.zip 
          posted @ 2012-12-14 17:23 哈哈的日子 閱讀(554) | 評(píng)論 (0)編輯 收藏
          今天想在 log 里加上當(dāng)前機(jī)器的 ip,找了一些文檔,logback 支持 MDC(Mapped Diagnostic Contexts),可以很容易的把 ip 放到 log 中。

          方法: 
          1. 先在代碼中加上一行 MDC.put("ip", InetAddress.getLocalHost().getHostAddress())
          2. 然后在 logback 的 pattern 中加上 %X{ip} 即可

          posted @ 2012-12-14 14:58 哈哈的日子 閱讀(5139) | 評(píng)論 (0)編輯 收藏
          vi /etc/yum.conf 將exclude=kernel* 去掉
          posted @ 2012-12-14 13:45 哈哈的日子 閱讀(381) | 評(píng)論 (0)編輯 收藏
          1. 建立 winexe 環(huán)境,build winexe 并不麻煩,只不過(guò)官方文檔比較少,下載到 source 之后,也不知道要如何 build。后來(lái)找到一個(gè)文檔,介紹了過(guò)程
          cd winexe-1.00/source4
          ./autogen.sh
          ./configure
          make
          ./bin/winexe -U “<user>%<password>” //<windows system> cmd.exe

          2. 如何遠(yuǎn)程執(zhí)行,命令比較很簡(jiǎn)單,但又是環(huán)境問(wèn)題,我們?cè)?windows 下面建立了一個(gè) administrators 組的用戶,但無(wú)法執(zhí)行,后來(lái)打開了 administrator 這個(gè)用戶,終于命令可以執(zhí)行了。
          我們的腳本有兩個(gè)步驟,1. 殺掉舊進(jìn)程,2. 啟動(dòng)新的進(jìn)程,如下:
              winexe -U "administrator%admin" //172.16.107.243 "taskkill /F /T /im java.exe"
              cat < /dev/null | winexe -U "administrator%admin" //172.16.107.243 "java -jar c:\agent\job-agent.jar" >> /home/glodon/logs/agent243.log 2>&1 &
          啟動(dòng)新進(jìn)程的時(shí)候,遇到了非常麻煩的事情,只能前臺(tái)執(zhí)行,nohup , & 這些完全不靈,如果 nohup,就會(huì)報(bào)錯(cuò),后來(lái)得到了一個(gè)方法,cat < /dev/null | winexe 解決了這個(gè)問(wèn)題。

          3. jenkins 執(zhí)行,jenkins 使用 Post Shell Plugin 來(lái)調(diào)用這個(gè)腳本,調(diào)用的時(shí)候一定要 nohup start.sh > /dev/null &,否則在執(zhí)行完之后,會(huì)發(fā)個(gè) sign,會(huì)把進(jìn)程結(jié)束掉。
          注意,還必須要 > /dev/null,否則就會(huì)出錯(cuò),實(shí)在搞不明白原因。

          弄好了這個(gè),以后就方便了,心情也挺好。

          posted @ 2012-12-14 13:25 哈哈的日子 閱讀(462) | 評(píng)論 (0)編輯 收藏
          呵呵,有圖有真相。
          用 ipad 發(fā)的 imessage,挺有意思的,不知不覺(jué),孩子已經(jīng)這么大了。

          @import url(/css/cuteeditor.css);
          posted @ 2012-11-21 16:24 哈哈的日子 閱讀(652) | 評(píng)論 (0)編輯 收藏
          主站蜘蛛池模板: 寿阳县| 乐清市| 湛江市| 西昌市| 静乐县| 怀集县| 吕梁市| 松原市| 大化| 南澳县| 博客| 曲麻莱县| 扶沟县| 西林县| 贵德县| 兴和县| 永吉县| 安图县| 当阳市| 分宜县| 蒙阴县| 安远县| 云霄县| 二手房| 霍州市| 筠连县| 高密市| 庄河市| 楚雄市| 阜南县| 犍为县| 吉林市| 高要市| 称多县| 建宁县| 桂阳县| 龙州县| 马关县| 龙胜| 靖边县| 肇源县|