創(chuàng)易-過(guò)程雜記

一觅赊、spring web mvc默認(rèn)配置沒(méi)有作用

?????? 以前都是使用xml配置方式吮螺,現(xiàn)在切到spring boot還需要一段適應(yīng),好在之前對(duì)實(shí)現(xiàn)本身有所了解坯约。

?????? 問(wèn)題現(xiàn)象:我有部分靜態(tài)資源(html/css/js)放在webapp下莫鸭,運(yùn)行后訪問(wèn) 后臺(tái)報(bào)錯(cuò)“dispatchservlet 沒(méi)有對(duì)應(yīng)的handler”

? ? ? ? 最終原因: 有個(gè)類配置了 @EnableWebMvc?? 注解被因。

? ? ? 解釋:spring boot中 使用 WebMvcAutoConfiguration 已經(jīng)自動(dòng)化做了默認(rèn)配置衫仑。如果自己要全部重寫文狱,使用 @EnableWebMvc注解缘挽;如果僅是擴(kuò)展或重寫原有部分配置,extends WebMvcConfigurerAdapter 即可苏研。? 關(guān)于WebMvcAutoConfiguration 的默認(rèn)配置摹蘑,可以參考:http://blog.csdn.net/isea533/article/details/50412212?

對(duì)于MVC里的viewResolver轧飞、interceptors过咬、靜態(tài)資源、formatter和converter兼犯、HttpMessageConverts集漾、Servlet砸脊、Filter凌埂、Listener等,Spring Boot使用了一個(gè)叫WebMvcAutoConfigurationWebMvcProperties的文件來(lái)進(jìn)行自動(dòng)配置

二埃疫、集成UAA 栓霜,跨域問(wèn)題

問(wèn)題現(xiàn)象:(1)使用jsonp横蜒,405錯(cuò)销凑;(2)來(lái)自 CORS 預(yù)檢通道的 CORS 頭 'Access-Control-Allow-Headers' 的令牌 'authorization' 無(wú)效

最終原因:安全問(wèn)題斗幼,禁止跨域訪問(wèn)抚垄;

解釋:跨域 服務(wù)端可以支持呆馁,spring boot 可以使用 @CrossOrigin(origins="http://localhost:9000")? 【其支持origins,methods,allowedHeaders,exposedHeaders,allowCredentials,maxAge】這樣的注解,但 UAA的http服務(wù)是框架提供的次询,我們就自己寫了一個(gè)crossfilter瓷叫,如:

if(request.getRequestURI().contains("oauth") || request.getRequestURI().contains("login") ||request.getRequestURI().contains("logout")|| request.getRequestURI().contains("checkAccessTokenIsExpire") || request.getRequestURI().contains("account")) {

// CORS "pre-flight" request

response.setHeader("Access-Control-Allow-Origin","*");

response.setHeader("Access-Control-Allow-Headers","X-Requested-With");

response.setHeader("Access-Control-Allow-Headers","Authorization");

response.setHeader("Access-Control-Allow-Methods","POST, GET, OPTIONS");
response.setHeader("Access-Control-Max-Age","1800");
response.addHeader("Access-Control-Allow-Credentials","true");
}
filterChain.doFilter(request, response);

問(wèn)題(2)只需要加上 上面黑體部分即可 摹菠!

三次氨、出現(xiàn) java.lang.NoSuchMethodError: com.alibaba.druid.sql.ast.expr.SQLAggregateExpr.getOption()Lcom/alibaba/druid/sql/ast/expr/SQLAggregateExpr$Option;? 錯(cuò)誤

問(wèn)題現(xiàn)象:count的sql執(zhí)行時(shí)出現(xiàn) 錯(cuò)誤:

java.lang.NoSuchMethodError:com.alibaba.druid.sql.ast.expr.SQLAggregateExpr.getOption()Lcom/alibaba/druid/sql/ast/expr/SQLAggregateExpr$Option;

我使用的是 alibaba 的 druid連接池 和 dangdang 的sharding-jdbc煮寡。

最終原因: druid? 的 1.0.23版本有bug, 降到 1.0.12 就好了

解釋:


四薇组、切換git服務(wù)器

問(wèn)題現(xiàn)象:github訪問(wèn)太慢坐儿,遷移到oschina貌矿,而且其免費(fèi)支持私有項(xiàng)目,不錯(cuò)黑低。

具體操作參見(jiàn)此博文:

http://yijiebuyi.com/blog/f18d38eb7cfee860c117d629fdb16faf.html


五尽楔、gradle refresh出錯(cuò)

因?yàn)?我們使用了dubbox,我是知道的娇掏,它并沒(méi)有發(fā)布到maven中心庫(kù)勋眯,所以每次需要發(fā)布到本地maven庫(kù)客蹋,有些團(tuán)隊(duì)同學(xué)不知道,gradle import工程就會(huì)報(bào)錯(cuò) 番电,如下:(DefaultModuleVersionSelector)


坑爹的是 這個(gè)提示太含混了漱办,看 錯(cuò)誤日志 也是 一個(gè) 序列化的錯(cuò)誤婉烟,摸不著頭腦似袁。就是倉(cāng)庫(kù)中找不到依賴包


6. 打包后的war啟動(dòng)不起來(lái)

題外話:因?yàn)?spring boot以jar的形式啟動(dòng)web應(yīng)用,我看libs下面生成的是war扬霜,以為要用其他方式才能打包成jar而涉,找了半天才發(fā)現(xiàn)war只是個(gè)馬甲Sて住G麦向!

打包很簡(jiǎn)單,我使用的是gradle话告,所以 在 對(duì)應(yīng) module下 運(yùn)行 gradle build即可沙郭,問(wèn)題現(xiàn)象:但生成之后 我運(yùn)行? java -jar ****.war? ? mybatis的domain報(bào)classnotfoundexception
最終原因:mybatis的class掃描機(jī)制有bug

解釋:http://www.scienjus.com/mybatis-vfs-bug/??? 這邊文章寫的很清晰,自己看吧吓著。

延伸閱讀: 我這邊使用的 是? mybatis? 3.4.1送挑,mybatis的class掃描接口有變動(dòng)惕耕,對(duì)應(yīng)的掃描實(shí)現(xiàn)類 代碼增加如下方法重載:


?@Override

publicList list(String path)throwsIOException {

ClassLoader cl =this.getClass().getClassLoader();

ResourcePatternResolver resolver =newPathMatchingResourcePatternResolver(cl);

Resource[] resources = resolver.getResources(path +"/**/*.class");

List resources1 = Arrays.asList(resources);

List resourcePaths =newArrayList();

for(Resource resource: resources1) {

resourcePaths.add(preserveSubpackageName(resource.getURI(), path));

}

returnresourcePaths;

}


7.我們使用了UAA司澎,另一個(gè)系統(tǒng)的web頁(yè)面調(diào)用登錄時(shí),報(bào)錯(cuò)浪南,如下:

因?yàn)榭缬蛑С致缭洌覀冊(cè)?UAA server增加了 CrossFilter絮记,代碼如下:


response.setHeader("Access-Control-Allow-Origin","*");

response.setHeader("Access-Control-Allow-Headers","X-Requested-With");

response.setHeader("Access-Control-Allow-Headers","Authorization");

response.setHeader("Access-Control-Allow-Methods","POST, GET, OPTIONS");

response.setHeader("Access-Control-Max-Age","1800");

//? ? ? ? ? ? response.setHeader("Access-Control-Allow-Headers", "Content-Type");

response.addHeader("Access-Control-Allow-Credentials","true");


引發(fā)問(wèn)題的原因 就是注釋掉的那一行怨愤,注釋掉即可 正常蛹批。


具體原因: 是自己大意所致腐芍,大家都知道它背后其實(shí)是一個(gè)map實(shí)現(xiàn)肮蛹,而 多次調(diào)用 “Access-Control-Allow-Headers” 導(dǎo)致了value被覆蓋, 就導(dǎo)致了上面的錯(cuò)誤。其實(shí)對(duì)于有多值的key 調(diào)用 addHeader 即可。

其實(shí)說(shuō)白了,就是 錯(cuò)誤的本質(zhì)原因 就是跨域時(shí) 有header 跨域服務(wù)器不允許的外冀!

8. UAA 不支持? additional_information

問(wèn)題現(xiàn)象:我們給 oauth_client_details數(shù)據(jù)表的 additional_information字段增加了擴(kuò)展屬性值锥惋,但在 encode token值后發(fā)現(xiàn)并沒(méi)有 additional_information的值膀跌。

最終原因:spring-security-oauth2 2.0.11-RELEASE的bug

解釋:DefaultOAuth2RequestFactory 生成 的是? TokenRequest 實(shí)例,而TokenRequest的實(shí)現(xiàn)并沒(méi)有支持 additional_information劫流, 看代碼:

newOAuth2Request(modifiable, client.getClientId(), client.getAuthorities(),true,this.getScope(),client.getResourceIds(),null,null,null)

最后一個(gè)參數(shù)傳null丛忆, 這酸爽(不支持 additional_information)熄诡!

9. CSRF Token錯(cuò)誤

問(wèn)題現(xiàn)象:表單 post 請(qǐng)求,報(bào)錯(cuò)? “”

最終原因:正如錯(cuò)誤提示我抠,沒(méi)有 傳遞足夠的信息到服務(wù)端

解釋:spring security 新版本增加了 csrf特性菜拓, 正確的服務(wù)端交互 需要 增加? header “CSRF-TOKEN”? 或 增加 _csrf 參數(shù)

10. application.properties設(shè)置了 logging.path 不起作用

問(wèn)題現(xiàn)象:沒(méi)有在指定路徑輸出日志纳鼎,而是輸出到了臨時(shí)目錄

最終原因:依賴了spring cloud 包導(dǎo)致的裳凸,去除依賴ok

解釋:spring cloud 包 中包含 BootstrapApplicationListener姨谷。具體要了解spring boot的啟動(dòng)原理,spring boot應(yīng)用啟動(dòng)時(shí) 會(huì) 逐一運(yùn)行ApplicationListener,spring boot 包裝的logging處理 先在執(zhí)行 BootstrapApplicationListener時(shí)初始化了一遍logback,第二次走 ApplicationListener時(shí)不會(huì)重新初始化logback所致践叠。

問(wèn)題排查:(笨方法)

我們知道FileAppender言缤,知道其會(huì)設(shè)置 fileName,其是通過(guò)FileAppender的setFile實(shí)現(xiàn)的禁灼,在這里設(shè)置斷點(diǎn)管挟,發(fā)現(xiàn)第一次會(huì)設(shè)置,第二次不會(huì)弄捕,沿著調(diào)用堆棧 會(huì)找到LogbackLoggingSystem的initialize方法僻孝,其中有判斷 isAlreadyInitialized()


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市守谓,隨后出現(xiàn)的幾起案子穿铆,更是在濱河造成了極大的恐慌斋荞,老刑警劉巖荞雏,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異平酿,居然都是意外死亡凤优,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門蜈彼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)筑辨,“玉大人,你說(shuō)我怎么就攤上這事幸逆」髟” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵秉颗,是天一觀的道長(zhǎng)痢毒。 經(jīng)常有香客問(wèn)我,道長(zhǎng)蚕甥,這世上最難降的妖魔是什么哪替? 我笑而不...
    開(kāi)封第一講書人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮菇怀,結(jié)果婚禮上凭舶,老公的妹妹穿的比我還像新娘。我一直安慰自己爱沟,他們只是感情好帅霜,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著呼伸,像睡著了一般身冀。 火紅的嫁衣襯著肌膚如雪钝尸。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,541評(píng)論 1 305
  • 那天搂根,我揣著相機(jī)與錄音珍促,去河邊找鬼。 笑死剩愧,一個(gè)胖子當(dāng)著我的面吹牛猪叙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播仁卷,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼穴翩,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了锦积?” 一聲冷哼從身側(cè)響起芒帕,我...
    開(kāi)封第一講書人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎充包,沒(méi)想到半個(gè)月后副签,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡基矮,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年淆储,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片家浇。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡本砰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出钢悲,到底是詐尸還是另有隱情点额,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布莺琳,位于F島的核電站还棱,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏惭等。R本人自食惡果不足惜珍手,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望辞做。 院中可真熱鬧琳要,春花似錦、人聲如沸秤茅。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)框喳。三九已至课幕,卻和暖如春厦坛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背撰豺。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工粪般, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人污桦。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像匙监,于是被迫代替她去往敵國(guó)和親凡橱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理亭姥,服務(wù)發(fā)現(xiàn)稼钩,斷路器,智...
    卡卡羅2017閱讀 134,657評(píng)論 18 139
  • =========================================================...
    lavor閱讀 3,488評(píng)論 0 5
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,811評(píng)論 6 342
  • 第一次用簡(jiǎn)書达罗,覺(jué)得簡(jiǎn)書有著印象筆記沒(méi)有的功能坝撑,在線分享資源,并且還是富文本編輯器類型×溉啵現(xiàn)在項(xiàng)目是采用前后端分離巡李,用...
    zhuyuansj閱讀 2,979評(píng)論 0 16
  • springboot配置選項(xiàng)(一) =======================================...
    JanloongDo_0閱讀 4,797評(píng)論 0 3