﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-我有我的空间！</title><link>http://www.blogjava.net/haha1903/</link><description>跟着 Java 成长的日子！</description><language>zh-cn</language><lastBuildDate>Wed, 29 Apr 2026 16:54:12 GMT</lastBuildDate><pubDate>Wed, 29 Apr 2026 16:54:12 GMT</pubDate><ttl>60</ttl><item><title>天之痕——练法宝的好地方</title><link>http://www.blogjava.net/haha1903/archive/2014/05/10/413499.html</link><dc:creator>哈哈的日子</dc:creator><author>哈哈的日子</author><pubDate>Sat, 10 May 2014 13:21:00 GMT</pubDate><guid>http://www.blogjava.net/haha1903/archive/2014/05/10/413499.html</guid><wfw:comment>http://www.blogjava.net/haha1903/comments/413499.html</wfw:comment><comments>http://www.blogjava.net/haha1903/archive/2014/05/10/413499.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/haha1903/comments/commentRss/413499.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/haha1903/services/trackbacks/413499.html</trackback:ping><description><![CDATA[@import url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
<div><br />
</div>
<div>二进海底，<span style="background-color: #e8e8e8; color: #210f1b; font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, u5b8bu4f53; font-size: 16px; line-height: 28px; text-indent: 32px;">龙宫那边新多出一个海螺，进去就是龙宫密道，里面有DOMO组员杨志豪，把他弄走，就在原地来回跑，会定期出现一大鱼一大虾，殴之，每次法宝加40点。我在这里练蓝格怪衣，这个每用一次也加5点。</span></div><img src ="http://www.blogjava.net/haha1903/aggbug/413499.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/haha1903/" target="_blank">哈哈的日子</a> 2014-05-10 21:21 <a href="http://www.blogjava.net/haha1903/archive/2014/05/10/413499.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>天之痕 —— 如何去掉符鬼技能，符鬼技能变成“无”</title><link>http://www.blogjava.net/haha1903/archive/2014/05/05/413292.html</link><dc:creator>哈哈的日子</dc:creator><author>哈哈的日子</author><pubDate>Mon, 05 May 2014 13:43:00 GMT</pubDate><guid>http://www.blogjava.net/haha1903/archive/2014/05/05/413292.html</guid><wfw:comment>http://www.blogjava.net/haha1903/comments/413292.html</wfw:comment><comments>http://www.blogjava.net/haha1903/archive/2014/05/05/413292.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/haha1903/comments/commentRss/413292.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/haha1903/services/trackbacks/413292.html</trackback:ping><description><![CDATA[等到符鬼很饿（能喂2个东西的时候），找到两个相同的喂食物，比如2个狮子精【有一个&#8220;狮子吼&#8221;技能】，设此时的符鬼有一个技能是&#8220;强音波&#8221;，点击&#8220;狮子吼&#8221;两次，符鬼的那个技能就变成了&#8220;无&#8221; ！@import url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
<div><br />
</div>
<div>为了成功，保存好，多来几次！</div><img src ="http://www.blogjava.net/haha1903/aggbug/413292.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/haha1903/" target="_blank">哈哈的日子</a> 2014-05-05 21:43 <a href="http://www.blogjava.net/haha1903/archive/2014/05/05/413292.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>天之痕 —— 捡蓝格怪衣（龙颿）如何得到</title><link>http://www.blogjava.net/haha1903/archive/2014/05/05/413291.html</link><dc:creator>哈哈的日子</dc:creator><author>哈哈的日子</author><pubDate>Mon, 05 May 2014 13:34:00 GMT</pubDate><guid>http://www.blogjava.net/haha1903/archive/2014/05/05/413291.html</guid><wfw:comment>http://www.blogjava.net/haha1903/comments/413291.html</wfw:comment><comments>http://www.blogjava.net/haha1903/archive/2014/05/05/413291.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/haha1903/comments/commentRss/413291.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/haha1903/services/trackbacks/413291.html</trackback:ping><description><![CDATA[@import url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
在<span style="color: #333333; font-family: arial; font-size: 13px; line-height: 20px; background-color: #ffffff;">月河村的客栈，一直向右，到不能再右，向下一步，然后再点宝物就可以了。</span><img src ="http://www.blogjava.net/haha1903/aggbug/413291.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/haha1903/" target="_blank">哈哈的日子</a> 2014-05-05 21:34 <a href="http://www.blogjava.net/haha1903/archive/2014/05/05/413291.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>海尔集团CEO：张瑞敏——演讲语录！（转）</title><link>http://www.blogjava.net/haha1903/archive/2013/11/20/406581.html</link><dc:creator>哈哈的日子</dc:creator><author>哈哈的日子</author><pubDate>Wed, 20 Nov 2013 08:17:00 GMT</pubDate><guid>http://www.blogjava.net/haha1903/archive/2013/11/20/406581.html</guid><wfw:comment>http://www.blogjava.net/haha1903/comments/406581.html</wfw:comment><comments>http://www.blogjava.net/haha1903/archive/2013/11/20/406581.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/haha1903/comments/commentRss/406581.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/haha1903/services/trackbacks/406581.html</trackback:ping><description><![CDATA[人成熟与不成熟跟年龄没有关系。人成熟不成熟，就是你能不能站在对方的角度去看待事物，就是能不能把我的世界变成你的世界。这个社会有很多的成年人，还没有脱离幼稚的行为。一点小事情就跟别人争来争去。<br />
<div>&nbsp; &nbsp; &nbsp; 人不成熟的第一个特征：就是立即要回报。</div>
<div>&nbsp; &nbsp; &nbsp; 他不懂得只有春天播种，秋天才会收获。很多人在做任何事情的时候，刚刚付出一点点，马上就要得到回报。（学钢琴，学英语等等，刚开始就觉得难，发现不行，立即就要放弃。）很多人做生意，开始没有什么成绩，就想着要放弃，有的人一个月放弃，有的人三个月放弃，有的人半年放弃，有的人一年放弃，我不明白人们为什么轻易放弃，但是我知道，放弃是一种习惯，一种典型失败者的习惯。所以说你要有眼光，要看得更远一些，眼光是用来看未来的！</div>
<div>&nbsp; &nbsp; &nbsp; 对在生活中有放弃习惯的人，有一句话一定要送给你：＂成功者永不放弃，放弃者永不成功＂。那为什么很多的人做事容易放弃呢？美国著名成功学大师拿破仑希尔说过：</div>
<div>穷人有两个非常典型的心态：</div>
<div>1、永远对机会说：＂不＂；</div>
<div>2、总想＂一夜暴富＂。</div>
<div>&nbsp; &nbsp; &nbsp; 今天你把什么机会都放到他的面前，他都会说＂不＂。就是今天你开饭店很成功，你把你开饭店的成功经验，发自内心的告诉你的亲朋好友，让他们也去开饭店，你能保证他们每个人都会开饭店吗？是不是照样有人不干。</div>
<div>&nbsp; &nbsp; &nbsp; 所以这是穷人一个非常典型的心态，他会说：＂你行，我可不行！＂。一夜暴富的表现在于，你跟他说任何的生意，他的第一个问题就是＂挣不挣钱＂，你说＂挣钱＂，他马上就问第二个问题＂容易不容易＂，你说＂容易＂，这时他跟着就问第三个问题＂快不快＂，你说＂快＂！这时他就说＂好，我做！＂呵呵，你看，他就这么的幼稚！</div>
<div>&nbsp; &nbsp; &nbsp; 大家想一想，在这个世界上有没有一种：＂又挣钱，又容易，又快的＂，没有的，即使有也轮不到我们啊，所以说在生活中，我们一定要懂得付出。那为什么你要付出呢？因为你是为了追求你的梦想而付出的，人就是为了希望和梦想活着的，如果一个人没有梦想，没有追求的话，那一辈子也就没有什么意义了！</div>
<div>&nbsp; &nbsp; &nbsp; 在生活中你想获得什么，你就得先付出什么。你想获得时间，你就得先付出时间，你想获得金钱，你得先付出金钱。你想得到爱好，你得先牺牲爱好。你想和家人有更多的时间在一起，你先得和家人少在一起。</div>
<div>但是，有一点是明确的，你在这个项目中的付出，将会得到加倍的回报。就象一粒种子，你把它种下去以后，然后浇水，施肥，锄草，杀虫。最后你收获的是不是几十倍，上百倍的回报。</div>
<div>&nbsp; &nbsp; &nbsp; 在生活中，你一定要懂得付出，你不要那么急功近利，马上想得到回报，天下没有白吃的午餐，你轻轻松松是不可能成功的。</div>
<div>一定要懂得先付出！</div>
<div>人不成熟的第二个特征：就是不自律。</div>
<div>不自律的主要表现在哪里呢？</div>
<div>一、不愿改变自己：</div>
<div>&nbsp; &nbsp; &nbsp; 你要改变自己的思考方式和行为模式。你要改变你的坏习惯。其实，人与人之间能力是没有多大区别，区别在于思考方式的不同。一件事情的发生，你去问成功者和失败者，他们的回答是不一样的，甚至是相违背的。</div>
<div>&nbsp; &nbsp; &nbsp; 我们今天的不成功是因为我们的思考方式不成功。一个好的公式是：当你种植一个思考的种子，你就会有行动的收获，当你把行动种植下去，你会有习惯的收获，当你再把习惯种植下去，你就会有个性的收获，当你再把个性种植下去，就会决定你的命运。</div>
<div>&nbsp; &nbsp; &nbsp; 但是如果你种植的是一个失败的种子，你得到的一定是失败，如果你种植的是一个成功的种子，那么你就一定会成功。</div>
<div>很多人有很多的坏习惯，如：看电视，打麻将，喝酒，泡舞厅，他们也知道这样的习惯不好，但是他们为什么不愿意改变呢？因为很多人宁愿忍受那些不好的生活方式，也不愿意忍受改变带来的痛苦</div>
<div>二、愿意背后议论别人：</div>
<div>&nbsp; &nbsp; &nbsp; 如果在生活中，你喜欢议论别人的话，有一天一定会传回去，中国有一句古话，论人是非者，定是是非人</div>
<div>三、消极，抱怨：</div>
<div>&nbsp; &nbsp; &nbsp; 你在生活中喜欢那些人呢？是那些整天愁眉苦脸，整天抱怨这个抱怨哪个的人，还是喜欢那些整天开开心心的人。如果你在生活中是那些抱怨的，消极的人的话，你一定要改变你性格中的缺陷。如果你不改变的话，你是很难适应这个社会的。你也是很难和别人合作的。</div>
<div>&nbsp; &nbsp; &nbsp; 生活当中你要知道，你怎样对待生活，生活也会怎样对待你，你怎样对待别人，别人也会怎样对待你。所以你不要消极，抱怨。你要积极，永远的积极下去，就是那句话：成功者永不抱怨，抱怨者永不成功</div>
<div>人不成熟的第三个特征：经常被情绪所左右。</div>
<div>一个人成功与否，取决于五个因素：</div>
<div>学会控制情绪</div>
<div>健康的身体</div>
<div>良好的人际关系</div>
<div>时间管理</div>
<div>财务管理</div>
<div>&nbsp; &nbsp; &nbsp; 如果你想成功，一定要学会管理好这五个因素，为什么把情绪放在第一位呢？把健康放在第二位呢？是因为如果你再强的身体，如果你情绪不好，就会影响到你的身体，现在一个人要成功20%靠的是智商，80%靠的是情商，所以你要控制好你的情绪，情绪对人的影响是非常大的。人与人之间，不要为了一点点小事情，就暴跳如雷，这样是不好的。</div>
<div>所以在生活中，你要养成什么样的心态呢？你要养成＂三不＂，＂三多＂：</div>
<div><br />
</div>
<div>不批评、不抱怨、不指责；</div>
<div><br />
</div>
<div>多鼓励、多表扬、多赞美。</div>
<div><br />
</div>
<div>&nbsp; &nbsp; &nbsp; 你就会成为一个受社会大众欢迎的人。如果你想让你的伙伴更加的优秀，很简单，永远的激励和赞美他们。</div>
<div>&nbsp; &nbsp; &nbsp; 即使他们的确有毛病，那应该怎么办呢？这时是不是应该给他们建议，在生活中你会发现有这样一个现象，有人给别人建议的时候，别人能够接受，但是有建议的时候别人就会生气。其实建议的方式是最重要的，就是＂三明治＂赞美，建议，再赞美！</div>
<div>想一想，你一天赞美了几个人，有的人可能以为赞美就是吹捧，就是拍马屁。赞美和吹捧是有区别的，赞美有四个特点：</div>
<div>1、是真诚的</div>
<div>2、是发自内心的</div>
<div>3、被大众所接受的</div>
<div>4、无私的</div>
<div>&nbsp; &nbsp; &nbsp; 如果你带有很强的目的性去赞美，那就是拍马屁。当你赞美别人时候，你要大声的说出来，当你想批评别人的时候，一定要咬住你的舌头！</div>
<div>&nbsp; &nbsp; &nbsp; 人不成熟的第四个特征：不愿学习，自以为是，没有归零心态。</div>
<div>&nbsp; &nbsp; &nbsp; 其实人和动物之间有很多的相似之处，动物的自我保护意识比人更强（婴儿与小猪）但是，人和动物最大的区别在于，人会学习，人会思考。人是要不断学习的，你千万不要把你的天赋潜能给埋没了，一定要学习，一定要有一个空杯的心态。我们象谁去学习呢？就是直接向成功人士学习！</div>
<div>&nbsp; &nbsp; &nbsp; 你要永远学习积极正面的东西，不看，不听那些消极，负面的东西。一旦你吸收了那些有毒的思想，它会腐蚀你的心灵和人生 &nbsp; &nbsp;的。在这个知识经济的时代里，学习是你通向未来的唯一护照。在这样一个速度，变化，危机的时代，你只有不断的学习你才不会被这个时代所抛弃，一定要有学习，归零的心态。去看每一个人的优点，＂三人行，必有我师也＂！</div>
<div>人不成熟的第五个特征：做事情不靠信念，靠人言。</div>
<div>&nbsp; &nbsp; &nbsp; 我们说相信是起点，坚持是终点。很多人做事不靠信念，喜欢听别人怎么说。对自己所做的事业，没有100%的信心，相信和信念是两个不同的概念，相信是看得见的，信念是看不见的。</div>
<div>&nbsp; &nbsp; &nbsp; 信念是人类的一种态度，但是很多的人他们做事，不靠信念的，而是要听别人怎么说，你要登上山峰，要问那些爬到山顶的人，千万不能问没有爬过山的人。</div>
<div>&nbsp; &nbsp; &nbsp; 这里不是说别人的建议不要去听，你可以去参考，但是你要记住，你来做这个生意是为了实现你的梦想，实现你自己的价值。其他的人是不会关心你的梦想的，只有你自己关心你自己的梦想，只有你自己关心你自己能否真正的成功。这才是最重要的！</div>
<div>只要你的选择是正确的，永远不要在乎别人怎么说，以上的人不成熟的五个特征，你们自己去对照，那一个特征是你有的，你一定要在最短的时间里改正，只要你相信你自己能够战胜自己的不成熟，你就会逐渐的成长，成熟起来，你就会得到你想要的那种生活。你就会实现你时间自由、财务自由、精神自由的人生梦想!&nbsp;</div><img src ="http://www.blogjava.net/haha1903/aggbug/406581.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/haha1903/" target="_blank">哈哈的日子</a> 2013-11-20 16:17 <a href="http://www.blogjava.net/haha1903/archive/2013/11/20/406581.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>logback 的 scanPeriod 遇到的问题</title><link>http://www.blogjava.net/haha1903/archive/2013/11/12/406256.html</link><dc:creator>哈哈的日子</dc:creator><author>哈哈的日子</author><pubDate>Tue, 12 Nov 2013 06:25:00 GMT</pubDate><guid>http://www.blogjava.net/haha1903/archive/2013/11/12/406256.html</guid><wfw:comment>http://www.blogjava.net/haha1903/comments/406256.html</wfw:comment><comments>http://www.blogjava.net/haha1903/archive/2013/11/12/406256.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/haha1903/comments/commentRss/406256.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/haha1903/services/trackbacks/406256.html</trackback:ping><description><![CDATA[<h1 style="font-family: Avenir, sans-serif; border: 0px; font-size: 1.2em; margin: 12px 0px 7px; padding: 0px; outline: 0px; line-height: 1.3; color: #333333;">设置了 scanPeriod 之后，过了好长时间，都不生效，后来 debug 代码。发现了下面这段。</h1>
<pre style="font-family: 'Bitstream Vera Sans Mono', 'Courier New', monospace; border: 1px solid #e8e8e8; font-size: 15px; margin-top: 12px; margin-bottom: 12px; padding: 6px 10px; outline: 0px; line-height: normal; background-color: #f8f8f8; color: #444444; white-space: pre-wrap; word-wrap: break-word; cursor: text; max-width: 100%; overflow: auto; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;">  private volatile long mask = 0xF;
<a href="http://www.twitter.com/Override" style="font-family: Avenir, sans-serif; color: #47b1c7; text-decoration: none;">@Override</a>
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++) &amp; 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;
}
</pre>
<p style="font-family: Avenir, sans-serif; border: 0px; font-size: 15px; margin: 12px 0px 18px; padding: 0px; outline: 0px; color: #333333; line-height: normal;">这行&nbsp;<code style="font-family: 'Bitstream Vera Sans Mono', 'Courier New', monospace; border: 1px solid #e8e8e8; font-size: 0.95em; margin: 0px; padding: 0px; outline: 0px; color: #2c92b0; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;">if (((invocationCounter++) &amp; mask) != mask) {</code>&nbsp;mask = 0xf，其实要每循环 0xf 次，也就是 15 次，才会去 check 一次是否要更新，也就是说，不管过了多久，如果没到这 15 次，也不会去检查是否更新配置。<br />
也就是说，我多打几次 log，配置文件就生效了。</p>
@import url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);<img src ="http://www.blogjava.net/haha1903/aggbug/406256.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/haha1903/" target="_blank">哈哈的日子</a> 2013-11-12 14:25 <a href="http://www.blogjava.net/haha1903/archive/2013/11/12/406256.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring Security 调研总结</title><link>http://www.blogjava.net/haha1903/archive/2013/11/12/406257.html</link><dc:creator>哈哈的日子</dc:creator><author>哈哈的日子</author><pubDate>Tue, 12 Nov 2013 06:25:00 GMT</pubDate><guid>http://www.blogjava.net/haha1903/archive/2013/11/12/406257.html</guid><wfw:comment>http://www.blogjava.net/haha1903/comments/406257.html</wfw:comment><comments>http://www.blogjava.net/haha1903/archive/2013/11/12/406257.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/haha1903/comments/commentRss/406257.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/haha1903/services/trackbacks/406257.html</trackback:ping><description><![CDATA[<p style="font-family: Avenir, sans-serif; border: 0px; font-size: 15px; margin: 12px 0px 18px; padding: 0px; outline: 0px; color: #333333; line-height: normal;">spring security（下简写为 ss）控制的安全主要有两方面，Web 和 Method Call，这两个方面的权限控制有比较多的相通的设计，也有一些特别的功能。比如 Method Call 可以做 After Invocation 控制，而 Web 可以做 Ip 地址控制。</p>
<p style="font-family: Avenir, sans-serif; border: 0px; font-size: 15px; margin: 12px 0px 18px; padding: 0px; outline: 0px; color: #333333; line-height: normal;">这里面有两个最基本的概念：authentication manager 和 access decision manager，前者控制认证，后都控制鉴权。<br />
1. 在 ss 的认证系统中，默认的实现帮助我们提供了三个概念，用户（user），角色（authority，一般存 role）和组（group），三者的关系是，组、角色与用户都是多对多关系，组和角色间没关系，默认是不启用组的。后续，在 Acl 权限管理中，可以看到角色之间，是可以有包含（树形？）关系的。<br />
2. 在 ss 的鉴权系统中，明显会比认证复杂得多。有 AccessDecisionManager, AccessDecisionVoter（前置）, AfterInvocationProvider（后置）, RoleHierarchy, SidRetrievalStrategy, LookupStrategy, PermissionGrantingStrategy, SecurityExpressionHandler, AclService, MutableAclService, AclCache 概念过多了，要一个一个解释<br />
a) 中心是 AccessDecisionManager，主要负责 AccessDecisionVoter 的管理，默认提供了3种实现：1. AffirmativeBased 如果有任何一个投票器允许访问,请求将被立刻允许,而不管之前可能有的拒绝决定。2. ConsensusBased 多数票(允许或拒绝)决定了结果，平局的投票 和空票(全是弃权的)的结果是可配置的。3. UnanimousBased 所有的投票器必须全是允许的,否则访问将 被拒绝。<br />
AccessDecisionManager 在用于 Web 和 Method Call 两种情况下，可能是不一致的，因为功能也不一致。<br />
b) Method Call 除了使用 AccessDecisionManager 进行权限判断外，还可以增加 AfterInvocationProvider 来进行出口数据的判断，默认提供了 3 种。<br />
1) PostInvocationAdviceProvider: 需要提供一个 PostInvocationAuthorizationAdvice，默认实现只有一个，就是 ExpressionBasedPostInvocationAdvice，可以通过 spel 来进行权限判断。注意 ExpressionBasedPostInvocationAdvice 中需要提供一个 MethodSecurityExpressionHandler，能够创建出一个 MethodSecurityExpressionOperations，放到 spel context 中，供 spel function 调用，这样的方式，在后续很常见。<br />
2) AclEntryAfterInvocationProvider 和 AclEntryAfterInvocationCollectionFilteringProvider : 这两种都差不多，主要依赖 AclService, ObjectIdentityRetrievalStrategy, SidRetrievalStrategy 来配合，检查返回值的权限。Collection 版本的，可以把无权限的数据去掉，只留下有权限的数据。<br />
c) RoleHierarchy 提供了角色之间的关系，提供了两个实现，一个是没关系的，直接把 user 的 role 返回，另外一个是有继承关系的。继承关系实现挺有意思的，能够处理多级的 include 关系，比较好用。<br />
RoleHierarchy 的使用比较复杂，会被 AccessDecisionVoter, SidRetrievalStrategy, SecurityExpressionHandler 用到，SecurityExpressionHandler 又会被 AccessDecisionVoter 用到，所以还是有点儿混乱。<br />
具体的说 SecurityExpressionHandler 会用到 PermissionEvaluator 和 RoleHierarchy，PermissionEvaluator 的一个实现 AclPermissionEvaluator 会用到 SidRetrievalStrategy。<br />
d) SidRetrievalStrategy 和 RoleHierarchy 的功能比较接近，比 RoleHierarchy 高一个抽象层次，功能上也有所区别，是从一个 authentication 拿到所有相关的 Sid（包括 Role（GrantedAuthoritySid） 和 User（PrincipalSid）），而 RoleHierarchy 只包括了 Role（GrantedAuthoritySid）的继承关系。<br />
e) LookupStrategy 通过 ObjectIdentity 和 Sid 把相关的 Acl 查询出来。可以在 LookupStrategy 扩展 Acl 和 Ace 的功能，比如在 Ace 上面加上时间的条件限制，就需要自己定义 LookupStrategy，把时间条件从数据库查询出来，并放到自定义的 Ace 当中。<br />
但这件事情非常麻烦，因为默认实现的 BasicLookupStrategy 是个 Final 的类，所以只能自己直接实现接口，无法使用现有的功能。<br />
LookupStrategy 会生成 Acl，而最终的权限验证是由 Acl 完成的，如果想验证带时间条件的 Ace，需要给 Acl 设置自定义的带有检查时间功能的 PermissionGrantingStrategy，实际上，这个 PermissionGrantingStrategy 会首先设置给 LookupStrategy，LookupStrategy 在创建 Acl 的时候，再放到 Acl 中去。<br />
f) SecurityExpressionHandler 能够执行 spel，得到是否可以访问的结果，它的子类都是继承自 AbstractSecurityExpressionHandler 的，有一个非常重要的方法是 SecurityExpressionOperations createSecurityExpressionRoot(Authentication authentication, T invocation)，创建一个 SecurityExpressionOperations 放到 EvaluationContext 中去，提供 spel 中执行的方法实现。比如 SecurityExpressionOperations 的一个抽象实现 SecurityExpressionRoot 中，就包含了大量的权限验证方法，如 hasRole, hasPermission 等常用的功能。<br />
g) AclService, MutableAclService, AclCache 概念比较简单，AclService 是通过 LookupStrategy 查询 Acl，自已可以查询 ObjectIdentity 的父子关联关系，MutableAclService 提供了修改的能力，AclCache 为 AclService 提供缓存，默认的实现了一个 EhCacheBasedAclCache。<br />
3. ss 的鉴权模型 Sid, ObjectIdentity, Acl, Ace, Permission<br />
a) Sid: 是中心，所有的授权会关联在 Sid 上面，Sid 和之前的 Role Base Permission 会有些相同的地方，但也明显不同，Sid 默认实现情况下，分为 GrantedAuthoritySid 和 PrincipalSid，其实就是 Role 和 User，通过 SidRetrievalStrategy 拿到一个 Authentication 的 Sid。<br />
b) ObjectIdentity: 可以理解成 Resource，就是可访问的目标资源，有 id 和 type 两个字段，默认实现的 ObjectIdentityImpl 会直接调用目标 domainObject 的 getClass 和 getId 方法拿到两个参数。在 PermissionEvaluator, AfterInvocationProvider 中，会用到 ObjectIdentityRetrievalStrategy 和 ObjectIdentityGenerator，ObjectIdentityRetrievalStrategy 会根据 domainObject 拿到 ObjectIdentity，然后使用 Acl 进行鉴权，ObjectIdentityGenerator 会在系统提供的不是 domainObject，而是 type, id 的时候，拿到 ObjectIdentity，然后进行 Acl 鉴权，这两个接口有一个共同的实现 ObjectIdentityRetrievalStrategyImpl，如果需要在 ObjectIdentity 进行新的抽象，需要用新的实现，到得不同的 ObjectIdentity，比如将业务对象分类鉴权这样的需求。<br />
c) Acl, 每个 ObjectIdentity 最多对应一条 Acl，Acl 中包含了很多，包括 parental，说明 Acl 是有继承关系的？其实不是，呵呵，是 ObjectIdentity 有继承关系而已。有一个 ObjectIdentity，有很多 Sid，还有一个叫做 Owner 的 Sid，有从 LookupStrategy 传过来的 PermissionGrantingStrategy，进行实际的鉴权，还有 AclAuthorizationStrategy 检查有没有权限进行 Acl security check。实现时间条件检查，就扩展 PermissionGrantingStrategy。<br />
为什么没有 RoleHierarchy 或是 SidRetrievalStrategy 存在呢？是因为调用 Acl 进行权限检查之前，已经把相关的 Sid 得到了，再给 Acl 的。<br />
d) Ace, Permission: Ace 存储 Sid, Permission，提供给 Acl 鉴权用。增加时间条件的话，最基本的，就是要在 Ace 中，增加时间条件字段。Permission 是用二进制存储的，但默认实现的数据库存储并不是，是一个一条，存在数据库里面的。</p>
<p style="font-family: Avenir, sans-serif; border: 0px; font-size: 15px; margin: 12px 0px 18px; padding: 0px; outline: 0px; color: #333333; line-height: normal;">好吧，概念还是非常多的，不过鉴于权限控制本身就是个复杂的话题，ss 这些设计的我觉得已经非常好，也基本够用了。</p>
@import url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);<img src ="http://www.blogjava.net/haha1903/aggbug/406257.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/haha1903/" target="_blank">哈哈的日子</a> 2013-11-12 14:25 <a href="http://www.blogjava.net/haha1903/archive/2013/11/12/406257.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java ldaps 访问 ad 时，信任所有的证书</title><link>http://www.blogjava.net/haha1903/archive/2013/09/10/403887.html</link><dc:creator>哈哈的日子</dc:creator><author>哈哈的日子</author><pubDate>Tue, 10 Sep 2013 04:30:00 GMT</pubDate><guid>http://www.blogjava.net/haha1903/archive/2013/09/10/403887.html</guid><wfw:comment>http://www.blogjava.net/haha1903/comments/403887.html</wfw:comment><comments>http://www.blogjava.net/haha1903/archive/2013/09/10/403887.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/haha1903/comments/commentRss/403887.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/haha1903/services/trackbacks/403887.html</trackback:ping><description><![CDATA[Security.setProperty("ssl.SocketFactory.provider", "com.datayes.cloud.util.TrustAllSSLSocketFactory");
<div>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all; "><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000FF; ">package</span>&nbsp;com.datayes.cloud.util;<br />
<br />
<span style="color: #0000FF; ">import</span>&nbsp;javax.net.ssl.SSLContext;<br />
<span style="color: #0000FF; ">import</span>&nbsp;javax.net.ssl.SSLSocketFactory;<br />
<span style="color: #0000FF; ">import</span>&nbsp;javax.net.ssl.TrustManager;<br />
<span style="color: #0000FF; ">import</span>&nbsp;javax.net.ssl.X509TrustManager;<br />
<span style="color: #0000FF; ">import</span>&nbsp;java.io.IOException;<br />
<span style="color: #0000FF; ">import</span>&nbsp;java.net.InetAddress;<br />
<span style="color: #0000FF; ">import</span>&nbsp;java.net.Socket;<br />
<span style="color: #0000FF; ">import</span>&nbsp;java.security.KeyManagementException;<br />
<span style="color: #0000FF; ">import</span>&nbsp;java.security.KeyStoreException;<br />
<span style="color: #0000FF; ">import</span>&nbsp;java.security.NoSuchAlgorithmException;<br />
<span style="color: #0000FF; ">import</span>&nbsp;java.security.UnrecoverableKeyException;<br />
<span style="color: #0000FF; ">import</span>&nbsp;java.security.cert.CertificateException;<br />
<span style="color: #0000FF; ">import</span>&nbsp;java.security.cert.X509Certificate;<br />
<br />
<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;TrustAllSSLSocketFactory&nbsp;<span style="color: #0000FF; ">extends</span>&nbsp;SSLSocketFactory&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;SSLContext&nbsp;sslContext&nbsp;=&nbsp;SSLContext.getInstance("TLS");<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;TrustAllSSLSocketFactory()&nbsp;<span style="color: #0000FF; ">throws</span>&nbsp;NoSuchAlgorithmException,&nbsp;KeyManagementException,&nbsp;KeyStoreException,&nbsp;UnrecoverableKeyException&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TrustManager&nbsp;tm&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;X509TrustManager()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;checkClientTrusted(X509Certificate[]&nbsp;chain,&nbsp;String&nbsp;authType)&nbsp;<span style="color: #0000FF; ">throws</span>&nbsp;CertificateException&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;checkServerTrusted(X509Certificate[]&nbsp;chain,&nbsp;String&nbsp;authType)&nbsp;<span style="color: #0000FF; ">throws</span>&nbsp;CertificateException&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;X509Certificate[]&nbsp;getAcceptedIssuers()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">null</span>;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sslContext.init(<span style="color: #0000FF; ">null</span>,&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;TrustManager[]{tm},&nbsp;<span style="color: #0000FF; ">null</span>);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;Socket&nbsp;createSocket(Socket&nbsp;socket,&nbsp;String&nbsp;host,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;port,&nbsp;<span style="color: #0000FF; ">boolean</span>&nbsp;autoClose)&nbsp;<span style="color: #0000FF; ">throws</span>&nbsp;IOException&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;sslContext.getSocketFactory().createSocket(socket,&nbsp;host,&nbsp;port,&nbsp;autoClose);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;Socket&nbsp;createSocket(String&nbsp;host,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;port)&nbsp;<span style="color: #0000FF; ">throws</span>&nbsp;IOException&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;sslContext.getSocketFactory().createSocket(host,&nbsp;port);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;Socket&nbsp;createSocket(String&nbsp;host,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;port,&nbsp;InetAddress&nbsp;localHost,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;localPort)&nbsp;<span style="color: #0000FF; ">throws</span>&nbsp;IOException&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;sslContext.getSocketFactory().createSocket(host,&nbsp;port,&nbsp;localHost,&nbsp;localPort);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;Socket&nbsp;createSocket(InetAddress&nbsp;host,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;port)&nbsp;<span style="color: #0000FF; ">throws</span>&nbsp;IOException&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;sslContext.getSocketFactory().createSocket(host,&nbsp;port);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;Socket&nbsp;createSocket(InetAddress&nbsp;address,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;port,&nbsp;InetAddress&nbsp;localAddress,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;localPort)&nbsp;<span style="color: #0000FF; ">throws</span>&nbsp;IOException&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;sslContext.getSocketFactory().createSocket(address,&nbsp;port,&nbsp;localAddress,&nbsp;localPort);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;Socket&nbsp;createSocket()&nbsp;<span style="color: #0000FF; ">throws</span>&nbsp;IOException&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;sslContext.getSocketFactory().createSocket();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;String[]&nbsp;getDefaultCipherSuites()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;String[0];<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;String[]&nbsp;getSupportedCipherSuites()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;String[0];<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
</div>
</div><img src ="http://www.blogjava.net/haha1903/aggbug/403887.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/haha1903/" target="_blank">哈哈的日子</a> 2013-09-10 12:30 <a href="http://www.blogjava.net/haha1903/archive/2013/09/10/403887.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>准备 OpenStack 开发环境</title><link>http://www.blogjava.net/haha1903/archive/2013/08/06/402420.html</link><dc:creator>哈哈的日子</dc:creator><author>哈哈的日子</author><pubDate>Tue, 06 Aug 2013 02:19:00 GMT</pubDate><guid>http://www.blogjava.net/haha1903/archive/2013/08/06/402420.html</guid><wfw:comment>http://www.blogjava.net/haha1903/comments/402420.html</wfw:comment><comments>http://www.blogjava.net/haha1903/archive/2013/08/06/402420.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/haha1903/comments/commentRss/402420.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/haha1903/services/trackbacks/402420.html</trackback:ping><description><![CDATA[主要是遇到的一些问题吧，顺便感谢一下帮助了我的人。安装之前，听说安装正式环境的 OpenStack 挺麻烦的，所以，出发点就是安装一个能测试使用的 Dev 环境就可以了，不求全，时间紧张，能用就行。所以，定位到 devstack（http://devstack.org），一键安装 OpenStack
<div><br />
</div>
<div>问题</div>
<div>1. 想用 CentOS 来着，没原因，习惯了，后来发现，devstack 默认支持 ubuntu，为了简单，改用 ubuntu</div>
<div>2. 安装过程中，需要大量的网络下载，网速如果不快，挺急人的。</div>
<div>3. 安装到 stack.sh 的 191 行，会报错&nbsp;[ERROR] ./stack.sh:191 g-api did not start，这个问题折腾了我好久，最后按照&nbsp;https://answers.launchpad.net/glance/+question/231020 办法解决了，非常感谢&nbsp;Marc PINHEDE (pinhede-marc) ，但在&nbsp;https://bugs.launchpad.net/devstack/+bug/1119428 里，有人说只要修改 /etc/default/locale&nbsp;LANG="POSIX"，就可以了，其实我两个都改了，也不知道是哪个产生了作用。但，第一种方法，需要安装到一半，失败了，才会有提到的 /opt/stack/glance/glance/notifier/notify_kombu.py 文件，但第二种方法，刚开始就可以尝试，所以我如果下次安装的话，会先把第二种配置修改好，如果安装失败了，再使用第一种方法继续。</div>
<div><br />
</div>
<div><br />
</div><img src ="http://www.blogjava.net/haha1903/aggbug/402420.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/haha1903/" target="_blank">哈哈的日子</a> 2013-08-06 10:19 <a href="http://www.blogjava.net/haha1903/archive/2013/08/06/402420.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Build Hadoop 过程中遇到需要安装 protobuf 问题的解决方法</title><link>http://www.blogjava.net/haha1903/archive/2013/07/24/401909.html</link><dc:creator>哈哈的日子</dc:creator><author>哈哈的日子</author><pubDate>Wed, 24 Jul 2013 05:24:00 GMT</pubDate><guid>http://www.blogjava.net/haha1903/archive/2013/07/24/401909.html</guid><wfw:comment>http://www.blogjava.net/haha1903/comments/401909.html</wfw:comment><comments>http://www.blogjava.net/haha1903/archive/2013/07/24/401909.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/haha1903/comments/commentRss/401909.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/haha1903/services/trackbacks/401909.html</trackback:ping><description><![CDATA[在 compile hadoop-common 的时候，提示 protobuf 出错，查了一下，需要安装 protobuf（是一个非 Java 的组件）
<div>先到 homebrew 上找到安装 homebrew 的方法&nbsp;ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"</div>
<div>然后不能直接 brew install protobuf，因为会安装 1.5.0，也没办法编译过的，我试了。</div>
<div>需要先 brew versions protobuf，然后 cd `brew --prefix`（我默认的是 cd /usr/local），直接招待刚才 brew versions 出来的那个 git clone 方法。</div>
<div>然后再次 brew install protobuf ，就安装 &nbsp;1.4.1 了，继续 maven 就没有问题了。</div><img src ="http://www.blogjava.net/haha1903/aggbug/401909.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/haha1903/" target="_blank">哈哈的日子</a> 2013-07-24 13:24 <a href="http://www.blogjava.net/haha1903/archive/2013/07/24/401909.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Mac 下 Terminal 中 Java 不乱码</title><link>http://www.blogjava.net/haha1903/archive/2013/07/24/401908.html</link><dc:creator>哈哈的日子</dc:creator><author>哈哈的日子</author><pubDate>Wed, 24 Jul 2013 05:20:00 GMT</pubDate><guid>http://www.blogjava.net/haha1903/archive/2013/07/24/401908.html</guid><wfw:comment>http://www.blogjava.net/haha1903/comments/401908.html</wfw:comment><comments>http://www.blogjava.net/haha1903/archive/2013/07/24/401908.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/haha1903/comments/commentRss/401908.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/haha1903/services/trackbacks/401908.html</trackback:ping><description><![CDATA[在 .bash_profile 中增加一行&nbsp;export JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8 就可以了。
<div><br />
</div>
<div><br />
</div><img src ="http://www.blogjava.net/haha1903/aggbug/401908.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/haha1903/" target="_blank">哈哈的日子</a> 2013-07-24 13:20 <a href="http://www.blogjava.net/haha1903/archive/2013/07/24/401908.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>