人成熟與不成熟跟年齡沒(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ǔ)等等,剛開(kāi)始就覺(jué)得難,發(fā)現(xiàn)不行,立即就要放棄。)很多人做生意,開(kāi)始沒(méi)有什么成績(jī),就想著要放棄,有的人一個(gè)月放棄,有的人三個(gè)月放棄,有的人半年放棄,有的人一年放棄,我不明白人們?yōu)槭裁摧p易放棄,但是我知道,放棄是一種習(xí)慣,一種典型失敗者的習(xí)慣。所以說(shuō)你要有眼光,要看得更遠(yuǎn)一些,眼光是用來(lái)看未來(lái)的!
對(duì)在生活中有放棄習(xí)慣的人,有一句話(huà)一定要送給你:"成功者永不放棄,放棄者永不成功"。那為什么很多的人做事容易放棄呢?美國(guó)著名成功學(xué)大師拿破侖希爾說(shuō)過(guò):
窮人有兩個(gè)非常典型的心態(tài):
1、永遠(yuǎn)對(duì)機(jī)會(huì)說(shuō):"不";
2、總想"一夜暴富"。
今天你把什么機(jī)會(huì)都放到他的面前,他都會(huì)說(shuō)"不"。就是今天你開(kāi)飯店很成功,你把你開(kāi)飯店的成功經(jīng)驗(yàn),發(fā)自?xún)?nèi)心的告訴你的親朋好友,讓他們也去開(kāi)飯店,你能保證他們每個(gè)人都會(huì)開(kāi)飯店嗎?是不是照樣有人不干。
所以這是窮人一個(gè)非常典型的心態(tài),他會(huì)說(shuō):"你行,我可不行?。?。一夜暴富的表現(xiàn)在于,你跟他說(shuō)任何的生意,他的第一個(gè)問(wèn)題就是"掙不掙錢(qián)",你說(shuō)"掙錢(qián)",他馬上就問(wèn)第二個(gè)問(wèn)題"容易不容易",你說(shuō)"容易",這時(shí)他跟著就問(wèn)第三個(gè)問(wèn)題"快不快",你說(shuō)"快"!這時(shí)他就說(shuō)"好,我做?。⒑呛?,你看,他就這么的幼稚!
大家想一想,在這個(gè)世界上有沒(méi)有一種:"又掙錢(qián),又容易,又快的",沒(méi)有的,即使有也輪不到我們啊,所以說(shuō)在生活中,我們一定要懂得付出。那為什么你要付出呢?因?yàn)槟闶菫榱俗非竽愕膲?mèng)想而付出的,人就是為了希望和夢(mèng)想活著的,如果一個(gè)人沒(méi)有夢(mèng)想,沒(méi)有追求的話(huà),那一輩子也就沒(méi)有什么意義了!
在生活中你想獲得什么,你就得先付出什么。你想獲得時(shí)間,你就得先付出時(shí)間,你想獲得金錢(qián),你得先付出金錢(qián)。你想得到愛(ài)好,你得先犧牲愛(ài)好。你想和家人有更多的時(shí)間在一起,你先得和家人少在一起。
但是,有一點(diǎn)是明確的,你在這個(gè)項(xiàng)目中的付出,將會(huì)得到加倍的回報(bào)。就象一粒種子,你把它種下去以后,然后澆水,施肥,鋤草,殺蟲(chóng)。最后你收獲的是不是幾十倍,上百倍的回報(bào)。
在生活中,你一定要懂得付出,你不要那么急功近利,馬上想得到回報(bào),天下沒(méi)有白吃的午餐,你輕輕松松是不可能成功的。
一定要懂得先付出!
人不成熟的第二個(gè)特征:就是不自律。
不自律的主要表現(xiàn)在哪里呢?
一、不愿改變自己:
你要改變自己的思考方式和行為模式。你要改變你的壞習(xí)慣。其實(shí),人與人之間能力是沒(méi)有多大區(qū)別,區(qū)別在于思考方式的不同。一件事情的發(fā)生,你去問(wèn)成功者和失敗者,他們的回答是不一樣的,甚至是相違背的。
我們今天的不成功是因?yàn)槲覀兊乃伎挤绞讲怀晒?。一個(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à),有一天一定會(huì)傳回去,中國(guó)有一句古話(huà),論人是非者,定是是非人
三、消極,抱怨:
你在生活中喜歡那些人呢?是那些整天愁眉苦臉,整天抱怨這個(gè)抱怨哪個(gè)的人,還是喜歡那些整天開(kāi)開(kāi)心心的人。如果你在生活中是那些抱怨的,消極的人的話(huà),你一定要改變你性格中的缺陷。如果你不改變的話(huà),你是很難適應(yīng)這個(gè)社會(huì)的。你也是很難和別人合作的。
生活當(dāng)中你要知道,你怎樣對(duì)待生活,生活也會(huì)怎樣對(duì)待你,你怎樣對(duì)待別人,別人也會(huì)怎樣對(duì)待你。所以你不要消極,抱怨。你要積極,永遠(yuǎn)的積極下去,就是那句話(huà):成功者永不抱怨,抱怨者永不成功
人不成熟的第三個(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ā)自?xún)?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í)積極正面的東西,不看,不聽(tīng)那些消極,負(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)。很多人做事不靠信念,喜歡聽(tīng)別人怎么說(shuō)。對(duì)自己所做的事業(yè),沒(méi)有100%的信心,相信和信念是兩個(gè)不同的概念,相信是看得見(jiàn)的,信念是看不見(jiàn)的。
信念是人類(lèi)的一種態(tài)度,但是很多的人他們做事,不靠信念的,而是要聽(tīng)別人怎么說(shuō),你要登上山峰,要問(wèn)那些爬到山頂?shù)娜耍f(wàn)不能問(wèn)沒(méi)有爬過(guò)山的人。
這里不是說(shuō)別人的建議不要去聽(tīng),你可以去參考,但是你要記住,你來(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)想!
設(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://m.tkk7.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
spring security(下簡(jiǎn)寫(xiě)為 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è)概念,用戶(hù)(user),角色(authority,一般存 role)和組(group),三者的關(guān)系是,組、角色與用戶(hù)都是多對(duì)多關(guān)系,組和角色間沒(méi)關(guān)系,默認(rèn)是不啟用組的。后續(xù),在 Acl 權(quán)限管理中,可以看到角色之間,是可以有包含(樹(shù)形?)關(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è)投票器允許訪(fǎng)問(wèn),請(qǐng)求將被立刻允許,而不管之前可能有的拒絕決定。2. ConsensusBased 多數(shù)票(允許或拒絕)決定了結(jié)果,平局的投票 和空票(全是棄權(quán)的)的結(jié)果是可配置的。3. UnanimousBased 所有的投票器必須全是允許的,否則訪(fǎng)問(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 : 這兩種都差不多,主要依賴(lài) 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 查詢(xún)出來(lái)??梢栽?LookupStrategy 擴(kuò)展 Acl 和 Ace 的功能,比如在 Ace 上面加上時(shí)間的條件限制,就需要自己定義 LookupStrategy,把時(shí)間條件從數(shù)據(jù)庫(kù)查詢(xún)出來(lái),并放到自定義的 Ace 當(dāng)中。
但這件事情非常麻煩,因?yàn)槟J(rèn)實(shí)現(xiàn)的 BasicLookupStrategy 是個(gè) Final 的類(lèi),所以只能自己直接實(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,得到是否可以訪(fǎng)問(wèn)的結(jié)果,它的子類(lèi)都是繼承自 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 查詢(xún) Acl,自已可以查詢(xún) 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,就是可訪(fǎng)問(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ì)象分類(lèi)鑒權(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í)間條件的話(huà),最基本的,就是要在 Ace 中,增加時(shí)間條件字段。Permission 是用二進(jìn)制存儲(chǔ)的,但默認(rèn)實(shí)現(xiàn)的數(shù)據(jù)庫(kù)存儲(chǔ)并不是,是一個(gè)一條,存在數(shù)據(jù)庫(kù)里面的。
好吧,概念還是非常多的,不過(guò)鑒于權(quán)限控制本身就是個(gè)復(fù)雜的話(huà)題,ss 這些設(shè)計(jì)的我覺(jué)得已經(jīng)非常好,也基本夠用了。
@import url(http://m.tkk7.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
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(null, new 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];
}
}
主要是遇到的一些問(wèn)題吧,順便感謝一下幫助了我的人。安裝之前,聽(tīng)說(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 文件,但第二種方法,剛開(kāi)始就可以嘗試,所以我如果下次安裝的話(huà),會(huì)先把第二種配置修改好,如果安裝失敗了,再使用第一種方法繼續(xù)。
在 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)題了。
在 .bash_profile 中增加一行 export JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8 就可以了。