質信中國造 探秘吉利博越寶雞生產基地_台中搬家公司

台中搬家公司教你幾個打包小技巧,輕鬆整理裝箱!

還在煩惱搬家費用要多少哪?台中大展搬家線上試算搬家費用,從此不再擔心「物品怎麼計費」、「多少車才能裝完」

博越整體造型融合了中國文化元素與國際時尚潮流,外觀動感精緻,內飾典雅輕奢。博越搭載了2。0L自然吸氣和1。8TD兩款發動機,與之匹配的是6擋手動和澳大利亞DSI6速手自一體變速器,實現了動力與操控的完美結合。再根據中國路況和SUV特性進行深度的調教優化,博越兼顧安全性和駕馭樂趣。

10月29日,“質信中國造 吉利博越品質之旅”活動在吉利汽車寶雞基地舉行。作為吉利汽車進入精品3.0時代的全新生產基地,寶雞基地是吉利汽車按照高標準規劃設計打造的世界一流現代化汽車工廠。寶雞基地採用了國際一流的生產設備,各車間均投入全球領先的專業機器人,建成衝壓、焊裝、塗裝、總裝全自動化的國際一流生產線,實現了全領域智能製造。寶雞基地的製造工藝不僅處於國內領先水平,同時也達到了全球一流的世界級工廠水準,成為中國汽車製造業的標杆型工廠。

圖:吉利汽車寶雞製造基地

高標準規劃建設 打造世界一流的現代化工廠

寶雞基地根據吉利集團發展戰略部署,遵循高起點規劃、高標準設計,按照世界一流現代化汽車工廠要求進行建設,也是吉利汽車響應國家“一帶一路”,“西部大開發”政策的具體體現。寶雞基地項目總投資72億元人民幣,佔地1344畝,建設用地1164畝,一次性建成包括衝壓、焊裝、塗裝、總裝的整車四大主要工藝用房,以及與之配套的聯合動力站、油化庫、試車跑道、成品車停放區、管理中心、生活配套區等各項輔助設施,形成雙班年產20萬台整車的生產規模。

圖:五序衝壓

衝壓車間,擁有兩條達到世界先進水平的全自動化生產線,A線為2400噸打頭的五序衝壓連線,用於生產外覆蓋件;B線為日本網野公司生產的四序壓機,用於生產內板件和深拉延件。衝壓車間整線全封閉設計,噪音低於85分貝;採用德國SMT獨立清洗、塗油機,可以實現最高精度5um的油膜厚度控制,達到高效清洗;兩條生產線均採用ABB直線七軸機器人搬運,最高可達14SpM,實現整線自動化;一鍵換模技術更是達到世界領先水準。

圖:車身總拼線

焊裝車間,作為引領吉利集團邁向工業4.0的首創工廠,從建設之初貫徹實施自動化、智能化、模塊化、柔性化等先進理念,力圖打造吉利的標杆工廠。全線擁有128台焊裝領域頂尖的意大利柯馬、瑞典ABB機器人,可以完成包括車身總成、地板總成、側圍總成等七大總成的全自動化生產,實現了低能耗、高強度車身以及高品質的製造目標。

圖:色漆噴塗

塗裝車間,率先在吉利集團採用水性免中塗工藝,在保證車身防腐性能和油漆外觀質量的同時,減少VOC排放50%,降低能耗30%,是目前世界塗裝領域最先進的工藝。無論是在車身底部的UBC噴塗,還是色漆、清漆的噴塗,甚至到噴塗過程中的門蓋的開啟與關閉均採用塗裝行業全球最先進的39台德國杜爾機器人來實現。

圖:車門分裝線

總裝車間,由電裝、內裝,底盤1、底盤2,外裝、複合線等6條裝配線銜接而成的主線,包括前懸、后懸、輪胎、儀錶台、前端模塊、車門、頂棚等7條分裝線以及整車檢測線組成。主線與分裝線全部採用低噪音的摩擦輸送方式,大幅度降低了車間噪音。整車檢測線採用國際先進的3D激光技術四輪定位台、多功能轉轂試驗台、前大燈檢測設備,可滿足不同車型的高品質檢測需求。

圖:OK線

除了先進的四大工藝車間,

※推薦台中搬家公司優質服務,可到府估價

台中搬鋼琴,台中金庫搬運,中部廢棄物處理,南投縣搬家公司,好幫手搬家,西屯區搬家

寶雞基地的生產管控也達到了世界領先水平,採用整線生產監控、一鍵換模、光學對中等先進技術,具備全自動化生產水平。寶雞基地堅持“零缺陷”生產管理體系,採用主客觀雙向檢驗方法,通過人工與機器的雙重檢查,把控產品合格度。嚴謹的生產管控力度離不開吉利汽車“造每個人的精品車”發展理念,從技術、工藝、零部件供應和檢測等方面,全方位確保每一輛博越產品的精品品質。

圖:四輪定位

南北工廠齊發力 產能釋放嚴把品質關

博越是吉利汽車歷時三年半時間打造的智能互聯精品SUV,集好看、好開、好智能於一身。博越整體造型融合了中國文化元素與國際時尚潮流,外觀動感精緻,內飾典雅輕奢。博越搭載了2.0L自然吸氣和1.8TD兩款發動機,與之匹配的是6擋手動和澳大利亞DSI6速手自一體變速器,實現了動力與操控的完美結合。再根據中國路況和SUV特性進行深度的調教優化,博越兼顧安全性和駕馭樂趣。

值得一提的是,博越搭載了諸多具有前瞻性的智能配置,如城市預碰撞安全系統、ACC智能自適應巡航、360°隨動3D全景影像、pM2.5空氣凈化器、“你好博越”智能語音交互系統等,在智能安全、智能駕馭、智能舒適和智能互聯方面,引領同級SUV車型,樹立了中國SUV市場新標杆。尤其是博越首創“安全識別圈”概念,從駕駛安全感到主動安全,再到被動安全,全面打造智能駕駛安全體系。

圖:媒體参觀生產線

憑藉卓越的產品性能,博越上市即熱銷。截止到10月底,博越累計銷量達7萬台;累計訂單量突破15萬台,熱銷態勢仍在繼續。在2016年度C-NCAp第三批安全碰撞結果中,博越依靠完善的被動安全系統榮獲58.2分的優異成績,刷新了2015版C-NCAp標準實施以來SUV碰撞的記錄。此外,博越榮獲2016TTA自主品牌年度自主車型和安全品質獎兩項殊榮,併入圍2017中國年度車前三強等多項大獎。連續被權威機構認證,無疑是博越精品品質的最好證明。

圖:跑道試車

在以博越為代表的精品SUV帶動下,吉利汽車2016年前三季度實現45.9萬輛的銷量成績,同比增長29%。在此基礎上,吉利汽車第二次上調全年銷量目標至70萬輛,展現出了強大的自信心。寶雞基地的投產,將承擔起博越90%的產能,達到月產1.6萬輛的規模。加上春曉工廠,博越月產能將實現2萬輛。南北工廠齊發力,將最大程度上緩解博越的產能壓力,縮短用戶的提車周期,助力博越銷量再上新台階。

吉利汽車集團副總裁、汽車銷售公司總經理林傑表示:“博越作為吉利汽車精品車發展戰略首款SUV產品,擔負着吉利汽車品牌向上,銷量突破的任務。事實也證明,在吉利汽車嚴把品質關的前提下,吉利汽車全線產品齊頭並進,SUV與轎車實現了均衡發展。在寶雞基地的順利投產下,博越的產能問題也將得到緩解,用戶的提車周期也將最大限度的縮短,但我們並不會因此放鬆對產品品質的把控。吉利汽車將堅持以市場和消費者需求為導向,不斷為消費者打造高品質、高技術、高附加值的產品,努力提升品牌影響力,引領中國汽車製造業向專業化、精品化、國際化方向轉型。”本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

台中搬家公司教你幾個打包小技巧,輕鬆整理裝箱!

還在煩惱搬家費用要多少哪?台中大展搬家線上試算搬家費用,從此不再擔心「物品怎麼計費」、「多少車才能裝完」

【圖機器學習】cs224w Lecture 15 – 網絡演變_台中搬家公司

台中搬家公司教你幾個打包小技巧,輕鬆整理裝箱!

還在煩惱搬家費用要多少哪?台中大展搬家線上試算搬家費用,從此不再擔心「物品怎麼計費」、「多少車才能裝完」

目錄

  • Macroscopic
    • Forest Fire Model
  • Microscopic
    • Temporal Network
    • Temporal PageRank
  • Mesoscopic

轉自本人:https://blog.csdn.net/New2World/article/details/106519773

網絡的形成不是一蹴而就的,就像一個人的人際關係並非出生就是完整的,而是在成長過程中通過接觸他人結識新朋友而逐步形成的。以時間為變量,網絡結構的變化過程就是我們需要研究的。這個 Lecture 以三個層次進行研究討論,分別是

  • macro level: models, densification
  • meso level: motifs, communities
  • micro level: node, link properties (degree, centrality)

Macroscopic

從宏觀的角度我們主要研究節點數和邊的數目隨時間的變化趨勢、網絡直徑的變化以及節點度分佈的變化。
首先定義節點和邊為時刻 \(t\) 的函數 \(N(t), E(t)\),若在下一時刻 \(t+1\) 節點數翻倍,那邊的數量會如何變化?大量實驗表明,邊和節點的數量關係服從 densification power law,即 \(E(t) \propto N(t)^a,\ a\in[1,2]\)。也就是說邊的數量增長的速度遠快於節點的增長速度。如果 \(a=1\) 說明是線性增長,即每個點的 out-degree 一樣;而當 \(a=2\) 時則為完全圖。
那麼網絡直徑怎麼變化呢?出乎意料地減小了。比如你想認識 Jure,以你現有的人際關係可能得通過你們組的學長的大學同學的室友的高中同學才能實現。但如果你的人際關係中加入了你們組學長的大學同學的室友,那你就只需要通過他的高中同學就能跟 Jure 搭上線了,距離一下就縮短了不是嗎。然而這隻是我們的願景,雖然實驗表明網絡直徑的確減小了,但通過 E-R 模型模擬出的結果恰恰相反。因此除了 densification 還有其它因素使得網絡直徑縮小。
經歷過 Lecture 2 后,提到其他因素,第一反應應該就是 degree 了吧。那麼對比真實網絡的演變和一個與真實網絡具有相同度分佈的隨機圖的演變,如下圖,效果出奇地好。那麼我們來研究下這個 degree 和 densification 的關係,不過首先我們得明確一點,即 degree sequence 通常服從 power law 分佈。

第一種可能是度的指數為 \(r_t\) 且為一個常數。如果 \(r_t=r\in[1,2]\),那麼 \(a=2/r\)。其實這裏我一直不知道 \(a\) 怎麼得到的,這一段的講解我看了不下5遍都沒聽到他講為什麼,而是在解釋 \(r < 2\) 時 power law 的期望不存在(無限)。最終我發現 slide 里用詞是 “fact”,也就是說這是一個普遍規律?好吧,不管了,我就這麼理解了。

另一種可能是 \(r_t\) 隨着節點數變化。如果 \(r_t=\frac{4n_t^{x-1}-1}{2n_t^{x-1}-1}\),那麼 \(a=x\),這裏的 \(x\) 是 densification 的指數。好吧,依舊是 “fact”。但是這裏的兩張圖可以看一下,左邊是節點的度的分佈,右邊是隨着節點數增加度的指數的變化。不難看出度的指數在下降,也就是說隨着圖的規模增大,度很高的節點越來越多。在 power law 中,度的期望為 \(E[X] = \frac{r_t-1}{r_t-2}x_m\)。因此要讓 densification 增加,即讓平均度增加就需要使 \(r_t\) 與圖的規模成比例降低。

Forest Fire Model

Forest Fire 模型可以描述具有“隨着節點數增加,邊密度增大而圖直徑減小”特點的圖。這個模型的 idea 很簡單,在一個 party 上如果你想認識更多的人,你會怎麼做?首先結交一個派對上的朋友,通過這個人的人際關係逐漸認識他的朋友,然後再通過朋友的朋友結識更多的人。
這個模型有兩個參數:\(p\) 表示向前傳遞,\(r\) 表示向後傳遞。這兩個值分別表示在有向圖中走 in-link 和 out-link 的概率。那麼 Forest Fire 模型的整個流程如下

  1. 新加入節點 v,隨機選取一個已有節點 w 並將其與 v 連接;
  2. 根據服從參數 \(p\)\(r\) 的幾何分佈隨機 sample 兩個值 \(x, y\)。使得其平均為 \(p/(1-p)\)\(r/(1-r)\)
  3. 選取 w 的 \(x\) 個 out-links 和 \(y\) 個 in-links 與 v 相連;
  4. 對步驟3中加入的節點使用步驟2的操作一直到沒有新節點加入。

在參數選得好的情況下這個模型能很好的滿足 densification 增加而 diameter 減小的條件,然而事實是這個參數選取的甜區很小。

Microscopic

微觀上我們關注隨時間變化網絡中的邊會如何演變以及它對網絡上信息傳遞的影響。

Temporal Network

時序網絡是在固定的節點集上的一系列靜態有向圖,不過它們是有時序關係的。如果將這一系列靜態圖合併成一張圖,那每條邊都有 timestamp,比如節點 A,B 在時刻 1,3,4 有連接,而時刻 2 無連接。分開看的話就像是這個網絡的演變歷史。
我們可以通過 Dijkstra 算法的變種 TPSP-Dijkstra 來找最短的 temporal path。什麼是 temporal path?比如我現在從 A 點坐車到 D 點,A 到 B 9點有車,B 到 C 10點有車,C 到 D 9點半有車,每趟車行程半小時,那我到 D 點得多久?答案是到不了,因為我會錯過 C 到 D 的車。如果 C 到 D 是 12點發車,那我就能趕上,且距離為一個半小時車程。為什麼不是三個半小時?因為距離不考慮等待時間呀。雖然距離一直是一個半小時車程,但第一種情況下我無法到達 D,因此距離就是無窮了。
那麼 TPSP-Dijkstra 怎麼做的呢?大概思路是每次鬆弛的時候先判斷在該時刻鬆弛的邊是否可達。具體偽碼如下

※推薦台中搬家公司優質服務,可到府估價

台中搬鋼琴,台中金庫搬運,中部廢棄物處理,南投縣搬家公司,好幫手搬家,西屯區搬家

得到 temporal path 后就可以計算 temporal closeness \(c_{clos}(x,t)=\frac1{\sum_yd(y,x|t)}\),分母的 \(d(y,x|t)\) 表示從時刻 0 到 t,y 到 x 的最短 temporal path。這個近似度可以用來衡量節點 x 在前 t 個時刻內與其他節點有多 close。

Temporal PageRank

Internet 也是瞬息萬變的,有些網站紅極一時然後慢慢“退燒”到最後無人問津,也是一個 temporal 的過程。它的 importance 會逐漸下降,那 PageRank 怎麼做的呢?首先需要明確一點,temporal path 中每條邊的 timestamp 得是遞增的。其次,在講 PageRank 的時候我們說它其實就是一個 random walk 的過程。那麼我們也以 random walk 的方式來考慮 temporal 的情況。

\[P[(u,x,t_2)|(v,u,t_1)]=\beta^{|\Gamma_u|},\ \beta\in(0,1] \\ \Gamma_u=\{(u,y,t’)|t’\in[t_1,t_2],y\in V\}\]

我們來理解一下上面的表述。\(\Gamma\) 是時刻 \(t_1\)\(t_2\) 期間從 u 到 y 所有 temporal edge。而上面那個概率表示 \(t_1\) 時刻從 v 到 u 后再在 \(t_2\) 時刻從 u 到 x 的概率。隨着 \(t_1\)\(t_2\) 的時間跨度變大,\(|\Gamma|\) 會變多,從而導致上面的指數分佈概率變小。這很 make sense。那麼來看看 Temporal PageRank 的具體定義吧

\[r(u,t) = \sum\limits_{v\in V}\sum\limits_{k=0}^t(1-\alpha)\alpha^k\sum\limits_{z\inZ(v,u|t),|z|=k}P[z|t] \]

其中 \(Z(v,u|t)\) 是到時刻 \(t\) 為止從 v 到 u 所有可能的 temporal walk。而 \(\alpha\) 是開始一個新的 walk 的概率。(然而這裏這個 \((1-\alpha)\alpha\) 並不是很理解,如果有朋友看懂了請私信我指點迷津。)
如果這裏的時間拓展到無窮,即整個演變的最後一刻,那麼 Temporal PageRank 就變成了一個在拓展了時間線的圖上的普通 PageRank 了,然後 \(\beta^{|\Gamma_u|}\) 就變成了均勻分佈。為什麼?你把時間線展開,然後每個點和特定時刻連通的點相連,如圖。這樣只要按照普通 PageRank 的方式來做就可以得到各個時刻下所有節點的 rank。

Mesoscopic

這個部分 Jure 沒有講,我自己看的,內容其實不多。介於宏觀的整個網絡和微觀的節點及邊之間的結構就是 motif 了,那 meso 就是研究 temporal motif 的。slides 里的定義寫得“花里胡哨”,其實就是在普通的 k 個點 l 條邊的 motif 的邊上標上“先後關係”,且限制 motif 內邊的時間跨度 \(\delta\)。如圖

後面就是一些 case study 和應用實例,自己看看 slides 吧 ~

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

※推薦台中搬家公司優質服務,可到府估價

台中搬鋼琴,台中金庫搬運,中部廢棄物處理,南投縣搬家公司,好幫手搬家,西屯區搬家

盤點關注度最高的自主SUV 最後的眾泰亮了…_台中搬家公司

台中搬家公司教你幾個打包小技巧,輕鬆整理裝箱!

還在煩惱搬家費用要多少哪?台中大展搬家線上試算搬家費用,從此不再擔心「物品怎麼計費」、「多少車才能裝完」

作為全球最大的汽車市場,這才是自主品牌應表現出的成績。相信在不久的將來,自主品牌將真正站在世界的舞台上。

總結:隨着傳祺、吉利、奇瑞和東風這批自主品牌的崛起,

※推薦台中搬家公司優質服務,可到府估價

台中搬鋼琴,台中金庫搬運,中部廢棄物處理,南投縣搬家公司,好幫手搬家,西屯區搬家

自主品牌再一次拉近了與合資品牌之間的距離。尤其在SUV車型上,我們能夠清楚地看到消費者對自主品牌SUV的關注度要遠高於合資品牌。作為全球最大的汽車市場,這才是自主品牌應表現出的成績。相信在不久的將來,自主品牌將真正站在世界的舞台上。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

台中搬家公司教你幾個打包小技巧,輕鬆整理裝箱!

還在煩惱搬家費用要多少哪?台中大展搬家線上試算搬家費用,從此不再擔心「物品怎麼計費」、「多少車才能裝完」

北極圈漏油環保浩劫 俄羅斯拘捕電廠3人_台中搬家公司

※推薦台中搬家公司優質服務,可到府估價

台中搬鋼琴,台中金庫搬運,中部廢棄物處理,南投縣搬家公司,好幫手搬家,西屯區搬家

摘錄自2020年6月11日中央社報導

西伯利亞工業城諾里爾斯克附近電廠柴油外洩,造成北極圈環保大災難。俄羅斯調查人員今(10日)拘捕電廠主管與工程人員共三人。

俄羅斯礦業集團諾里爾斯克鎳業公司(Norilsk Nickel)子公司在諾里爾斯克(Norilsk)經營的一座電廠5月29日發生貯油槽塌陷意外,導致超過2萬1000公噸柴油外洩。

台中搬家公司教你幾個打包小技巧,輕鬆整理裝箱!

還在煩惱搬家費用要多少哪?台中大展搬家線上試算搬家費用,從此不再擔心「物品怎麼計費」、「多少車才能裝完」

參與清理工作的西伯利亞石油運輸公司(Transneft Siberia)總指揮布隆尼科夫(Viktor Bronnikov)表示,現場工作人員已見到漏油對當地生態的第一波衝擊,包括麝鼠與野鴨死亡。

事件調查委員會表示,已拘留3名涉嫌觸犯環境保護法規的人士,包括電廠廠長史米爾諾夫(Pavel Smirnov)與2名工程人員。3人若被定罪,最高可處5年有期徒刑。

生態保育
公害污染
污染治理
生物多樣性
國際新聞
俄羅斯
北極圈
漏油事件
漏油污染
河川污染
水污染

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

※推薦台中搬家公司優質服務,可到府估價

台中搬鋼琴,台中金庫搬運,中部廢棄物處理,南投縣搬家公司,好幫手搬家,西屯區搬家

Shiro (Shiro + JWT + SpringBoot應用)_台中搬家公司

※推薦台中搬家公司優質服務,可到府估價

台中搬鋼琴,台中金庫搬運,中部廢棄物處理,南投縣搬家公司,好幫手搬家,西屯區搬家

Shiro (Shiro + JWT + SpringBoot應用)

目錄

  • Shiro (Shiro + JWT + SpringBoot應用)
    • 1.Shiro的簡介
    • 2.Shiro + JWT + SpringBoot
      • 1.導入依賴
      • 2.配置JWT
      • 3.配置Shiro
      • 4.實現JWTToken
      • 5.實現Realm
      • 6.重寫Filter
      • 7. ShiroConfig
      • 8.登陸
      • 9.@RequiresPermissions

1.Shiro的簡介

Apache Shiro是一種功能強大且易於使用的Java安全框架,它執行身份驗證,授權,加密和會話管理,可用於保護 從命令行應用程序,移動應用程序到Web和企業應用程序等應用的安全。

  1. Authentication 身份認證/登錄,驗證用戶是不是擁有相應的身份;
  2. Authorization 授權,即權限驗證,驗證某個已認證的用戶是否擁有某個權限;即判斷用戶是否能做事情,常見的如:驗證某個用戶是否擁有某個角色。或者細粒度的驗證某個用戶對某個資源是否具有某個權限;
  3. Cryptography 安全數據加密,保護數據的安全性,如密碼加密存儲到數據庫,而不是明文存儲;
  4. Session Management 會話管理,即用戶登錄后就是一次會話,在沒有退出之前,它的所有信息都在會話中;
  5. Web Integration web系統集成
  6. Interations 集成其它應用,spring、緩存框架

從應用程序角度的來觀察如何使用Shiro完成工作:

Subject:主體,代表了當前“用戶”,這個用戶不一定是一個具體的人,與當前應用交互的任何東西都是Subject,如網絡爬蟲,機器人等;即一個抽象概念;所有Subject都綁定到SecurityManager,與Subject的所有交互都會委託給SecurityManager;可以把Subject認為是一個門面;SecurityManager才是實際的執行者;

SecurityManager:安全管理器;即所有與安全有關的操作都會與SecurityManager交互;且它管理着所有Subject;可以看出它是Shiro的核心,它負責與後邊介紹的其他組件進行交互,如果學習過SpringMVC,你可以把它看成DispatcherServlet前端控制器;

Realm:域,Shiro從從Realm獲取安全數據(如用戶、角色、權限),就是說SecurityManager要驗證用戶身份,那麼它需要從Realm獲取相應的用戶進行比較以確定用戶身份是否合法;也需要從Realm得到用戶相應的角色/權限進行驗證用戶是否能進行操作;可以把Realm看成DataSource,即安全數據源。

台中搬家公司教你幾個打包小技巧,輕鬆整理裝箱!

還在煩惱搬家費用要多少哪?台中大展搬家線上試算搬家費用,從此不再擔心「物品怎麼計費」、「多少車才能裝完」

也就是說對於我們而言,最簡單的一個Shiro應用:

1、應用代碼通過Subject來進行認證和授權,而Subject又委託給SecurityManager;

2、我們需要給Shiro的SecurityManager注入Realm,從而讓SecurityManager能得到合法的用戶及其權限進行判斷。

2.Shiro + JWT + SpringBoot

1.導入依賴
<dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-spring</artifactId>
    <version>1.4.1</version>
</dependency>
<dependency>
    <groupId>com.auth0</groupId>
    <artifactId>java-jwt</artifactId>
    <version>3.8.2</version>
</dependency>
2.配置JWT
public class JWTUtil {
    /**
     * 校驗 token是否正確
     *
     * @param token  密鑰
     * @param secret 用戶的密碼
     * @return 是否正確
     */
    public static boolean verify(String token, String username, String secret) {
        try {
            Algorithm algorithm = Algorithm.HMAC256(secret);
            JWTVerifier verifier = JWT.require(algorithm)
                    .withClaim("username", username)
                    .build();
            verifier.verify(token);
            return true;
        } catch (Exception e) {
            log.info("token is invalid{}", e.getMessage());
            return false;
        }
    }

    public static String getUsername(HttpServletRequest request) {
        // 取token
        String token = request.getHeader("Authorization");
        return getUsername(UofferUtil.decryptToken(token));
    }
    /**
     * 從 token中獲取用戶名
     * @return token中包含的用戶名
     */
    public static String getUsername(String token) {
        try {
            DecodedJWT jwt = JWT.decode(token);
            return jwt.getClaim("username").asString();
        } catch (JWTDecodeException e) {
            log.error("error:{}", e.getMessage());
            return null;
        }
    }
    
    public static Integer getUserId(HttpServletRequest request) {
        // 取token
        String token = request.getHeader("Authorization");
        return getUserId(UofferUtil.decryptToken(token));
    }
    /**
     * 從 token中獲取用戶ID
     * @return token中包含的ID
     */
    public static Integer getUserId(String token) {
        try {
            DecodedJWT jwt = JWT.decode(token);
            return Integer.valueOf(jwt.getSubject());
        } catch (JWTDecodeException e) {
            log.error("error:{}", e.getMessage());
            return null;
        }
    }


    /**
     * 生成 token
     * @param username 用戶名
     * @param secret   用戶的密碼
     * @return token 加密的token
     */
    public static String sign(String username, String secret, Integer userId) {
        try {
            Map<String, Object> map = new HashMap<>();
            map.put("alg", "HS256");
            map.put("typ", "JWT");
            username = StringUtils.lowerCase(username);
            Algorithm algorithm = Algorithm.HMAC256(secret);
            return JWT.create()
                    .withHeader(map)
                    .withClaim("username", username)
                    .withSubject(String.valueOf(userId))
                    .withIssuedAt(new Date())
//                    .withExpiresAt(date)
                    .sign(algorithm);
        } catch (Exception e) {
            log.error("error:{}", e);
            return null;
        }
    }
}
3.配置Shiro
4.實現JWTToken

token自己已經包含了用戶名等信息。

@Data
public class JWTToken implements AuthenticationToken {

    private static final long serialVersionUID = 1282057025599826155L;

    private String token;

    private String exipreAt;

    public JWTToken(String token) {
        this.token = token;
    }

    public JWTToken(String token, String exipreAt) {
        this.token = token;
        this.exipreAt = exipreAt;
    }

    @Override
    public Object getPrincipal() {
        return token;
    }

    @Override
    public Object getCredentials() {
        return token;
    }

}
5.實現Realm

自定義實現 ShiroRealm,包含認證和授權兩大模塊。

public class ShiroRealm extends AuthorizingRealm {

    @Resource
    private RedisUtil redisUtil;

    @Autowired
    private ISysUserService userService;

    @Autowired
    private ISysRoleService roleService;

    @Autowired
    private ISysMenuService menuService;

    // 必須重寫此方法,不然Shiro會報錯
    @Override
    public boolean supports(AuthenticationToken token) {
        return token instanceof JWTToken;
    }

    /**
     * 只有當需要檢測用戶權限的時候才會調用此方法
     * 授權模塊,獲取用戶角色和權限。
     * @param token token
     * @return AuthorizationInfo 權限信息
     */
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection token) {
        Integer userId = JWTUtil.getUserId(token.toString());

        SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();

        // 獲取用戶角色集
        Set<String> roleSet = roleService.selectRolePermissionByUserId(userId);
        simpleAuthorizationInfo.setRoles(roleSet);

        // 獲取用戶權限集
        Set<String> permissionSet = menuService.findUserPermissionsByUserId(userId);
        simpleAuthorizationInfo.setStringPermissions(permissionSet);
        return simpleAuthorizationInfo;
    }

    /**
     * 用戶認證:編寫shiro判斷邏輯,進行用戶認證
     * @param authenticationToken 身份認證 token
     * @return AuthenticationInfo 身份認證信息
     * @throws AuthenticationException 認證相關異常
     */
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
        // 這裏的 token是從 JWTFilter 的 executeLogin 方法傳遞過來的,已經經過了解密
        String token = (String) authenticationToken.getCredentials();
        String encryptToken = UofferUtil.encryptToken(token); //加密token
        String username = JWTUtil.getUsername(token); //從token中獲取username
        Integer userId = JWTUtil.getUserId(token);    //從token中獲取userId

        // 通過redis查看token是否過期
        HttpServletRequest request = HttpContextUtil.getHttpServletRequest();
        String ip = IPUtil.getIpAddr(request);
        String encryptTokenInRedis = redisUtil.get(Constant.RM_TOKEN_CACHE + encryptToken + StringPool.UNDERSCORE + ip);
        if (!token.equalsIgnoreCase(UofferUtil.decryptToken(encryptTokenInRedis))) {
            throw new AuthenticationException("token已經過期");
        }

        // 如果找不到,說明已經失效
        if (StringUtils.isBlank(encryptTokenInRedis)) {
            throw new AuthenticationException("token已經過期");
        }

        if (StringUtils.isBlank(username)) {
            throw new AuthenticationException("token校驗不通過");
        }

        // 通過用戶id查詢用戶信息
        SysUser user = userService.getById(userId);

        if (user == null) {
            throw new AuthenticationException("用戶名或密碼錯誤");
        }
        if (!JWTUtil.verify(token, username, user.getPassword())) {
            throw new AuthenticationException("token校驗不通過");
        }
        return new SimpleAuthenticationInfo(token, token, "febs_shiro_realm");
    }
}
6.重寫Filter

所有的請求都會先經過 Filter,所以我們繼承官方的 BasicHttpAuthenticationFilter ,並且重寫鑒權的方法。

代碼的執行流程 preHandle -> isAccessAllowed -> isLoginAttempt -> executeLogin

@Slf4j
public class JWTFilter extends BasicHttpAuthenticationFilter {

    private static final String TOKEN = "Authorization";

    private AntPathMatcher pathMatcher = new AntPathMatcher();

    /**
     * 對跨域提供支持
     */
    @Override
    protected boolean preHandle(ServletRequest request, ServletResponse response) throws Exception {
        HttpServletRequest httpServletRequest = (HttpServletRequest) request;
        HttpServletResponse httpServletResponse = (HttpServletResponse) response;
        httpServletResponse.setHeader("Access-control-Allow-Origin", httpServletRequest.getHeader("Origin"));
        httpServletResponse.setHeader("Access-Control-Allow-Methods", "GET,POST,OPTIONS,PUT,DELETE");
        httpServletResponse.setHeader("Access-Control-Allow-Headers", httpServletRequest.getHeader("Access-Control-Request-Headers"));
        // 跨域時會首先發送一個 option請求,這裏我們給 option請求直接返回正常狀態
        if (httpServletRequest.getMethod().equals(RequestMethod.OPTIONS.name())) {
            httpServletResponse.setStatus(HttpStatus.OK.value());
            return false;
        }
        return super.preHandle(request, response);
    }
    
    @Override
    protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) throws UnauthorizedException {
        HttpServletRequest httpServletRequest = (HttpServletRequest) request;
        UofferProperties UofferProperties = SpringContextUtil.getBean(UofferProperties.class);
        // 獲取免認證接口 url 
        // 在application.yml中配置/adminApi/auth/doLogin/**,/adminApi/auth/register/**, ...
        String[] anonUrl = StringUtils.splitByWholeSeparatorPreserveAllTokens(UofferProperties.getShiro().getAnonUrl(), ",");

        boolean match = false;
        for (String u : anonUrl) {
            if (pathMatcher.match(u, httpServletRequest.getRequestURI())) {
                match = true;
            }
        }
        if (match) {
            return true;
        }
        if (isLoginAttempt(request, response)) {
            return executeLogin(request, response);
        }
        return false;
    }

    /**
     * 判斷用戶是否想要登入。
     * 檢測header裏面是否包含Authorization字段即可
     */
    @Override
    protected boolean isLoginAttempt(ServletRequest request, ServletResponse response) {
        HttpServletRequest req = (HttpServletRequest) request;
        String token = req.getHeader(TOKEN);
        return token != null;
    }

    @Override
    protected boolean executeLogin(ServletRequest request, ServletResponse response) {
        HttpServletRequest httpServletRequest = (HttpServletRequest) request;
        String token = httpServletRequest.getHeader(TOKEN); //得到token
        JWTToken jwtToken = new JWTToken(UofferUtil.decryptToken(token)); // 解密token
        try {
            // 提交給realm進行登入,如果錯誤他會拋出異常並被捕獲
            getSubject(request, response).login(jwtToken);
            // 如果沒有拋出異常則代表登入成功,返回true
            return true;
        } catch (Exception e) {
            log.error(e.getMessage());
            return false;
        }
    }

    @Override
    protected boolean sendChallenge(ServletRequest request, ServletResponse response) {
        log.debug("Authentication required: sending 401 Authentication challenge response.");
        HttpServletResponse httpResponse = WebUtils.toHttp(response);
//        httpResponse.setStatus(HttpStatus.UNAUTHORIZED.value());
        httpResponse.setCharacterEncoding("utf-8");
        httpResponse.setContentType("application/json; charset=utf-8");
        final String message = "未認證,請在前端系統進行認證";
        final Integer status = 401;
        try (PrintWriter out = httpResponse.getWriter()) {
//            String responseJson = "{\"message\":\"" + message + "\"}";
            JSONObject responseJson = new JSONObject();
            responseJson.put("msg", message);
            responseJson.put("status", status);
            out.print(responseJson);
        } catch (IOException e) {
            log.error("sendChallenge error:", e);
        }
        return false;
    }



}
7. ShiroConfig
@Configuration
public class ShiroConfig {

    @Bean
    public ShiroRealm shiroRealm() {
        // 配置 Realm
        return new ShiroRealm();
    }
    
    // 創建DefaultWebSecurityManager
    @Bean("securityManager")
    public SecurityManager securityManager() {
        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
        // 配置 SecurityManager,並注入 shiroRealm
        securityManager.setRealm(shiroRealm());
        return securityManager;
    }
    
    // 創建ShiroFilterFactoryBean
    @Bean
    public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) {
        
        ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
        // 設置 securityManager
        shiroFilterFactoryBean.setSecurityManager(securityManager);

       	//添加Shiro過濾器
		/**
		 * Shiro內置過濾器,可以實現權限相關的攔截器
		 *    常用的過濾器:
		 *       anon: 無需認證(登錄)可以訪問
		 *       authc: 必須認證才可以訪問
		 *       user: 如果使用rememberMe的功能可以直接訪問
		 *       perms: 該資源必須得到資源權限才可以訪問
		 *       role: 該資源必須得到角色權限才可以訪問
		 */
        
        // 在 Shiro過濾器鏈上加入 自定義過濾器JWTFilter 並取名為jwt
        LinkedHashMap<String, Filter> filters = new LinkedHashMap<>();
        filters.put("jwt", new JWTFilter());
        shiroFilterFactoryBean.setFilters(filters);

        // 自定義url規則
        LinkedHashMap<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
        // 所有請求都要經過 jwt過濾器
        filterChainDefinitionMap.put("/**", "jwt");
        shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
        return shiroFilterFactoryBean;
    }

    /**
     * 下面的代碼是添加註解支持
     */
    @Bean
    @DependsOn({"lifecycleBeanPostProcessor"})
    public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() {
        // 設置代理類
        DefaultAdvisorAutoProxyCreator creator = new DefaultAdvisorAutoProxyCreator();
        creator.setProxyTargetClass(true);

        return creator;
    }

    /**
     * 開啟aop註解支持
     *
     * @param securityManager
     * @return
     */
    @Bean("authorizationAttributeSourceAdvisor")
    public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager) {
        AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();
        authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
        return authorizationAttributeSourceAdvisor;
    }

    
    // Shiro生命周期處理器
    @Bean
    public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() {
        return new LifecycleBeanPostProcessor();
    }

}

8.登陸
    /**
     * 登錄方法
     *
     * @param username 用戶名
     * @param password 密碼
     * @param code     驗證碼
     * @param uuid     唯一標識
     * @return 結果
     */
    @PostMapping("/doLogin")
    public ResultVo login(String username, String password, String code, String uuid, HttpServletRequest request) throws UofferException {

        String verifyKey = Constant.RM_CAPTCHA_CODE_KEY + uuid;
        String captcha = redisUtil.getCacheObject(verifyKey);
        redisUtil.del(verifyKey);

        if (captcha == null) {
            return ResultVo.failed(201, "驗證碼失效");
        }
        if (!code.equalsIgnoreCase(captcha)) {
            return ResultVo.failed(201, "驗證碼錯誤");
        }

        username = StringUtils.lowerCase(username);
        password = MD5Util.encrypt(username, password);

        final String errorMessage = "用戶名或密碼錯誤";
        SysUser user = userManager.getUser(username);

        if (user == null) {
            return ResultVo.failed(201, errorMessage);
        }
        if (!StringUtils.equalsIgnoreCase(user.getPassword(), password)) {
            return ResultVo.failed(201, errorMessage);
        }
        if (Constant.STATUS_LOCK.equals(user.getStatus())) {
            return ResultVo.failed(201, "賬號已被鎖定,請聯繫管理員!");
        }


        Integer userId = user.getUserId();
        String ip = IPUtil.getIpAddr(request);
        String address = AddressUtil.getCityInfo(ip);
        // 更新用戶登錄時間
        SysUser sysUser = new SysUser();
        sysUser.setUserId(userId);
        sysUser.setLastLoginTime(new Date());
        sysUser.setLastLoginIp(ip);
        userService.updateById(sysUser);


        // 拿到token之後加密
        String sign = JWTUtil.sign(username, password, userId);
        String token = UofferUtil.encryptToken(sign);
        LocalDateTime expireTime = LocalDateTime.now().plusSeconds(properties.getShiro().getJwtTimeOut());
        String expireTimeStr = DateUtil.formatFullTime(expireTime);
        JWTToken jwtToken = new JWTToken(token, expireTimeStr);

        // 將登錄日誌存入日誌表中
        SysLoginLog loginLog = new SysLoginLog();
        loginLog.setIp(ip);
        loginLog.setAddress(address);
        loginLog.setLoginTime(new Date());
        loginLog.setUsername(username);
        loginLog.setUserId(userId);
        loginLogService.save(loginLog);

        saveTokenToRedis(username, jwtToken, ip, address);
        JSONObject data = new JSONObject();
        data.put("Authorization", token);

        // 將用戶配置及權限存入redis中
        userManager.loadOneUserRedisCache(userId);
        return ResultVo.oK(data);
    }
9.@RequiresPermissions

要求subject中必須含有bus:careerTalk:query的權限才能執行方法someMethod()。否則拋出異常AuthorizationException

@RequiresPermissions("bus:careerTalk:query")
public void someMethod() {
}

引用:
https://www.iteye.com/blog/jinnianshilongnian-2018398
https://www.jianshu.com/p/f37f8c295057

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

台中搬家公司教你幾個打包小技巧,輕鬆整理裝箱!

還在煩惱搬家費用要多少哪?台中大展搬家線上試算搬家費用,從此不再擔心「物品怎麼計費」、「多少車才能裝完」

實力可見 歐藍德廣州歡樂嘉年華震撼上演_台中搬家公司

台中搬家公司教你幾個打包小技巧,輕鬆整理裝箱!

還在煩惱搬家費用要多少哪?台中大展搬家線上試算搬家費用,從此不再擔心「物品怎麼計費」、「多少車才能裝完」

廣汽三菱深入洞悉市場,推出擁有“2047”專業實力——20萬以內合資SUV中唯一一款2。4L匹配專業四驅和七座超大空間的歐藍德,強勢引領了SUV市場價值回歸。歐藍德具備以四驅系統為代表的專業性能,不僅能夠滿足車主的日常通勤,更為車主感受專業SUV生活魅力提供更多可能。

三菱歐藍德,可能給大家的第一印象就是它偏硬朗的外型,現款三菱歐藍德曾於2015年8月24日正式以進口方式進入國內銷售,時隔不到一年後,2016年8月26日廣汽三菱正式將這款產品引入國產,並長沙星沙工廠正式下線,廣汽三菱國產歐藍德於今年9月24日在國內正式上市。新車先期將推出兩種排量共計四款車型,其預售價區間為16-24萬元。

華南地區作為廣汽三菱的主戰場,上市后交出了非常不錯的成績表,在11月5日,廣汽三菱歐藍德歡樂嘉年華在廣州市白雲文化廣場隆重舉行。廣汽三菱副總經理杜志堅先生、廣汽三菱第一店總經理劉明先生、廣汽三菱南菱白雲店總經理雷梅蘭女士等領導以及歐藍德新老車主代表以及40餘家媒體出席了本次盛會。

活動現場五十餘輛歐藍德進入交車陣容,對於剛剛上市的歐藍德來說,實屬有着非常好的口碑,不僅體顯了廣汽三菱“SUV世家”的品牌實力,更展現出歐藍德上市即熱銷的良好開局。

廣汽三菱副總經理杜志堅先生為此次交車盛典致辭

交車儀式順勢啟幕。一排排新車交付到車主手中,打造出了特色化的購車體驗,這是廣汽三菱歐藍德上市來熱銷的實證,更為自身作為市場“爆款”的身份正名。

交車儀式圓滿落幕後,車友們集中進行了城市巡遊,10台安裝了十分炫酷熒光線條的歐藍德在廣州各道路中穿梭着由歐藍德組成的車隊,成為一道引來無數路人駐足圍觀的壯觀風景。車主們更是欣喜之情溢於言表,紛紛表示:“就像過節一樣,沒想到會以這樣盛大的方式把歐藍德‘娶’回家!之前下定歐藍德是看中了時尚大氣的外觀,還有7座空間滿足我一家老小出行使用,而且價格也不貴。現在看到有這麼多人都買了歐藍德,說明‘英雄所見略同’,為自己驕傲。”;這不僅僅是一場簡單的交車儀式,更是一場氣勢恢宏的歡樂盛會。

新車上市即實現大規模集中交車,這一“歐藍德現象”背後,

※推薦台中搬家公司優質服務,可到府估價

台中搬鋼琴,台中金庫搬運,中部廢棄物處理,南投縣搬家公司,好幫手搬家,西屯區搬家

是歐藍德火爆的市場銷量,也是廣汽三菱禮待每一位消費者的堅持。可以說,優秀的產品力,加上對每一位車主的高度重視,鑄就了廣汽三菱優秀的口碑和市場表現。

“2047”專業實力搶眼,歐藍德火爆全國

歐藍德上市即火爆全國,也充分印證了歐藍德作為中高級城市SUV佼佼者的強大號召力。隨着中國汽車消費走向成熟,擁有高品質、高性能、高性價比的產品成為越來越多消費者的核心訴求。廣汽三菱深入洞悉市場,推出擁有“2047”專業實力——20萬以內合資SUV中唯一一款2.4L匹配專業四驅和七座超大空間的歐藍德,強勢引領了SUV市場價值回歸。

歐藍德具備以四驅系統為代表的專業性能,不僅能夠滿足車主的日常通勤,更為車主感受專業SUV生活魅力提供更多可能。歐藍德沿襲三菱優秀的四驅系統——4WD四驅技術和S-AWC超級全輪控制系統,智能4WD系統擁有ECO經濟模式、AUTO自動模式和LOCK鎖定模式,兼顧高燃油經濟性和全路況通過性。高配車型更搭載源自賽車EVO的S-AWC系統,確保車輛在不同路況下都可以隨意加速、轉彎、制動。無論是城市道路行駛,還是戶外泥濘路段,歐藍德都可以輕鬆應對毫無後顧之憂。再搭載上原裝進口4J系列MIVEC發動機與第三代INVECSCVT8變速器,歐藍德2.4L發動機額定功率為141kW,最大扭矩為235N•m,以超越同級的澎湃動力自由馳騁在每一處風景里。

在國家全面開放二胎政策情況下,歐藍德還打造出同級罕有的7座超大空間。車主可根據乘坐人數調整後排座椅,第二、第三排座椅完全放倒后,行李廂空間高達913L。歐藍德還搭載智能化電動尾門、8英寸智能DA導航系統、前排真皮座椅電加熱等智能配置,帶來頂尖的駕乘舒適性和便利性。

在擁有專業四驅系統、7座超大空間等強大產品競爭力的情況下,廣汽三菱歐藍德更以15.98萬元-22.38萬元的價格回饋廣大消費者,體現出領先同級的絕對優勢。也正是20萬區間售價、四驅專業性能、和七座超大空間組成的“2047”專業實力,讓歐藍德成為中高級城市SUV的不二之選。

如此盛大的交車場面場面,不僅是歐藍德銷量火爆的最佳證明,更是歐藍德憑藉“2047”的過硬實力,引領中高級城市SUV發展的最好註腳。以廣汽三菱“SUV世家”的品質實力,搭配上歐藍德持續累積的口碑優勢,無疑將有更多車主投入歐藍德“懷抱”,而歐藍德也將憑藉高性能、高品質、高性價比的優勢,繼續搶佔市場份額。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

※推薦台中搬家公司優質服務,可到府估價

台中搬鋼琴,台中金庫搬運,中部廢棄物處理,南投縣搬家公司,好幫手搬家,西屯區搬家

時尚街拍:黑色打底褲神秘性感_台中搬家公司

※推薦台中搬家公司優質服務,可到府估價

台中搬鋼琴,台中金庫搬運,中部廢棄物處理,南投縣搬家公司,好幫手搬家,西屯區搬家

時尚街拍:黑色打底褲神秘性感

打底褲塑造氣質,有了氣質之後,才能讓女人整體的美感更有吸引力,更為精緻。你的腿型更加完美秀氣,打造出十足的休閑范。同時非常的顯精神又非常的減齡,彰顯出年輕美女的青春風采,打造自己的時尚潮流范。打底褲很巧妙的修飾了你的腿型,舒適的剪裁盡顯出淑女的氣質。

搭配白色短袖,是非常經典的黑白搭配,彰顯出楚楚動人的唯美氣質,更加的具有一股青春的活力。有着別具一格的時尚腔調,簡簡單單就可以美美的出門去,張揚了你青春的氣息,在優雅中散發出別緻格調。打底褲美女盡顯高挑身姿,總是給人時尚的女神范!

台中搬家公司教你幾個打包小技巧,輕鬆整理裝箱!

還在煩惱搬家費用要多少哪?台中大展搬家線上試算搬家費用,從此不再擔心「物品怎麼計費」、「多少車才能裝完」

 

打底褲可以拉長腿部的線條,讓你看起來美麗而有能力,並吸引住周圍人的目光,能夠體現出婀娜多姿的風采,讓整體感覺非常高雅大氣,給人一種靚麗的感覺,瞬間讓美女顯得腿兒又細又長。這條打底褲體現了精緻的做工讓你溫度與風度同擁有,輕鬆隨意就能很好的讓自己呈現最美身姿,給人非常好穿感覺的能夠突顯時尚優雅的態度,美女的體造型非常有高雅的格調,穿衣搭配恰好和簡潔的版型相搭配。

整條褲子乾淨利落顯得時尚潮流范十足就算穿的時間長了也不覺得累,真是非常經典的一款,恰到好處的打造慵懶的小韓風感覺提升整體曲線,塑造你的完美曲線和時尚的身材,精選優質的純棉布料緊身顯瘦。柔軟舒適的打底褲裝扮更加合身,不但百搭而且讓美女盡顯大長腿,不僅寬鬆有度而且高品質布料更是彈性貼合,而且眾所周知黑色是所有顏色里最顯瘦的了。

  •  

流利的線條剪裁讓時髦的你指的領有如許一款甜蜜可愛的褲子,而簡略慷慨的穿戴也不會枯燥,夏天凹造型如許的打底褲是很出彩的,展現簡潔隨型的個性並且時髦潮流便是就好。魅力十足的美女氣質羡煞旁人,完全不必擔心會悶熱之類的,打底褲修身顯瘦能很好的修飾身形,襯托出典雅氣質打造出窈窕身材,黑色打底褲比普通牛仔褲更加修身,它的剪裁設計會包裹到雙腿,看起來不僅款式好看也不失大方優雅。能顯現姣好身段的打底褲是冬裝造型質感的關鍵。使得整體簡單大方又不失小個性,在無意中拉長的腿部比例,展現女性優美的身體曲線。乾淨利落效果十分到位,使穿衣搭配更加無拘無束,簡約的款式不簡單的設計。打底褲盡顯女性的優雅氣質,手感也很細膩,高腰剪裁拉長腰線,讓修身顯瘦一步到位,自帶一種高貴的女神風範,穿衣氣勢派頭就要穩重一點。

網站內容來源http://www.online.jx.cn/

台中搬家公司教你幾個打包小技巧,輕鬆整理裝箱!

還在煩惱搬家費用要多少哪?台中大展搬家線上試算搬家費用,從此不再擔心「物品怎麼計費」、「多少車才能裝完」

厲害了我的哥!沃爾沃造三座私人飛機?_台中搬家公司

台中搬家公司教你幾個打包小技巧,輕鬆整理裝箱!

還在煩惱搬家費用要多少哪?台中大展搬家線上試算搬家費用,從此不再擔心「物品怎麼計費」、「多少車才能裝完」

沃爾沃城市安全系統(City Safety)除了駕駛輔助系統,安全輔助系統同樣毫無意外地出現在了S90長軸距豪華轎車上。沃爾沃聲稱的全球首創道路偏離預防及保護系統和第三代城市安全系統(City Safety),白天、黑夜、全氣候、全路口探測前方汽車、人、自行車、甚至大型動物,主動提醒,干預製動,打造最智能的安全移動堡壘。

就在近日,沃爾沃宣布全球首創首款三座超豪華轎車從概念走向量產,S90長軸距T8(E驅混動)三座榮譽版將於2017年供應市場。你並沒有看錯,確實是三座的汽車座椅布局,顛覆了我們對轎車內部空間的認識,另外還有全系標配的高級駕駛輔助系統,使得沃爾沃S90長軸距豪華轎車成為目前所有品牌在華生產的產品中檔次最高、技術含量最高的旗艦車型。

沃爾沃全新S90長軸距豪華轎車

市場獨有的私人飛機概念

沃爾沃任性得把副駕駛位置去掉,徹底顛覆了轎車內部格局,將S90長軸距豪華轎車的一個子型號取消了副駕駛座椅,讓出巨大的空間給後排“老闆座”,再加上軸距的加長,S90長軸距豪華轎車的老闆座所具有的乘坐空間可謂“史無前例”,完全比得上飛機頭等艙座位空間。

體驗過頭等艙的待遇嗎?沃爾沃就能給你,舒適、愜意的乘坐條件,相對獨立而寬敞的乘坐空間,巨大的腿部活動空間,可以大幅度調整坐姿、甚至可以平躺的座椅,適合辦公的商務環境,是頭等艙最重要的特點,而這一切,全新的三座S90長軸距豪華轎車有過之而無不及,

※推薦台中搬家公司優質服務,可到府估價

台中搬鋼琴,台中金庫搬運,中部廢棄物處理,南投縣搬家公司,好幫手搬家,西屯區搬家

簡直是私人飛機的禮遇。

第二代自動駕駛輔助系統(pilot Assist II)

這套系統允許系統在雷達、傳感器和攝像頭的精確配合下,通過識別交通和道路標識,無需跟隨前車即可在130公里/小時內,平順地自動提速/減速或沿道路標線轉向。而在擁堵狀態下,這套系統同樣可以自動識別車道、跟隨前車蠕動,極大降低駕駛員駕駛勞動強度。

沃爾沃城市安全系統(City Safety)

除了駕駛輔助系統,安全輔助系統同樣毫無意外地出現在了S90長軸距豪華轎車上。沃爾沃聲稱的全球首創道路偏離預防及保護系統和第三代城市安全系統(City Safety),白天、黑夜、全氣候、全路口探測前方汽車、人、自行車、甚至大型動物,主動提醒,干預製動,打造最智能的安全移動堡壘。

沃爾沃全新S90 長軸距豪華轎車 T8三座榮譽版

一方面,在沃爾沃看來,中國的豪華車市場還將繼續發展,其潛在的市場規模值得企業為旗艦車型在華設立生產線。但更重要的一方面在於,沃爾沃視中國市場為“第二本土市場”。沃爾沃不止一次在不同場合用這樣的表述表達了其對中國市場的重視,並且在研發等領域已經在中國動作頻頻,設立研發中心並將其納入全球研發體系。而此次將旗艦車型S90長軸距豪華轎車轉移到中國大慶SpA工廠生產,更是显示沃爾沃希望將中國打造為全球研發、生產、市場三位一體的重要基地,並以中國為中心輻射周邊,並出口北美、歐洲市場。

沃爾沃全新S90長軸距豪華轎車全球首秀

而S90長軸距豪華轎車的投產,也使得這款車成為了目前在華投產的豪華車中,產品檔次最高、技術含量最高的旗艦車型,從這個角度來看,這無疑是個裡程碑式的事件。

優秀的品牌擁有優秀的車型,沃爾沃的旗艦車型令我們可以看到沃爾沃的實力,將來更多的入門級和中高級產品才是我們國內消費者最關注的,我們敬請期待吧!本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

台中搬家公司教你幾個打包小技巧,輕鬆整理裝箱!

還在煩惱搬家費用要多少哪?台中大展搬家線上試算搬家費用,從此不再擔心「物品怎麼計費」、「多少車才能裝完」

股神收購天然氣資產 道明尼能源放棄爭議管線案_台中搬家公司

※推薦台中搬家公司優質服務,可到府估價

台中搬鋼琴,台中金庫搬運,中部廢棄物處理,南投縣搬家公司,好幫手搬家,西屯區搬家

摘錄自2020年7月6日中央社報導

美國杜克能源公司(Duke Energy)和道明尼能源公司(Dominion Energy)今(6日)宣布,他們放棄在美國東部建造通過阿帕拉契山脈、具爭議的天然氣管線計畫。

道明尼能源公司也宣布,同意出售天然氣管線和儲存資產給美國億萬富豪「股神」巴菲特(Warren Buffet)的波克夏哈薩威能源公司(Berkshire Hathaway Energy)。

法新社報導,杜克能源和道明尼能源2014年宣布建造大西洋海岸石油管線(Atlantic Coast Pipeline)的計畫,供應天然氣給維吉尼亞州和北卡羅來納州需求日益增長的市場。

台中搬家公司教你幾個打包小技巧,輕鬆整理裝箱!

還在煩惱搬家費用要多少哪?台中大展搬家線上試算搬家費用,從此不再擔心「物品怎麼計費」、「多少車才能裝完」

然而杜克能源和道明尼能源今天在聯合聲明中表示:「不斷的延期和成本不確定性增加…威脅這項計畫的經濟可行性。」

這條預定穿過阿帕拉契山脈的天然氣管線,招來環境保護組織的批評與訴訟。但美國最高法院6月裁定杜克能源和道明尼能源勝訴。

能源議題
能源轉型
國際新聞
天然氣

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

台中搬家公司教你幾個打包小技巧,輕鬆整理裝箱!

還在煩惱搬家費用要多少哪?台中大展搬家線上試算搬家費用,從此不再擔心「物品怎麼計費」、「多少車才能裝完」

昆蟲迅速消失中 德國擬部份禁用室外泛光燈_台中搬家公司

台中搬家公司教你幾個打包小技巧,輕鬆整理裝箱!

還在煩惱搬家費用要多少哪?台中大展搬家線上試算搬家費用,從此不再擔心「物品怎麼計費」、「多少車才能裝完」

摘錄自2020年8月05日自由時報報導

為了保護大幅減少中的昆蟲族群,德國環境部研擬草案,打算禁止黃昏後使用常見於室外照明的泛光燈。

「法新社」5日報導,環境部在草案中提出一些旨在保護昆蟲的新措施,希望10月前獲得內閣批准。草案中說,「昆蟲在生態系統中扮演重要角色……但是在德國,昆蟲數量和多樣性近年已經嚴重減少」。

※推薦台中搬家公司優質服務,可到府估價

台中搬鋼琴,台中金庫搬運,中部廢棄物處理,南投縣搬家公司,好幫手搬家,西屯區搬家

這些措施包括部份禁用泛光燈、更嚴格管控殺蟲劑的使用,以及加強對昆蟲自然棲地的保護。其中,燈光限制部份,禁止室外使用捕蟲燈,一年中有10個月的時間禁止黃昏後使用室外探照燈、天空投射燈等泛光燈。

生物多樣性
國際新聞
德國
昆蟲

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

台中搬家公司教你幾個打包小技巧,輕鬆整理裝箱!

還在煩惱搬家費用要多少哪?台中大展搬家線上試算搬家費用,從此不再擔心「物品怎麼計費」、「多少車才能裝完」