第二十二篇:?jiǎn)吸c(diǎn)登錄系統(tǒng)的具體實(shí)現(xiàn)(3)

前言:
前面我們一直都是用工具來(lái)測(cè)試的,接下來(lái)我們?cè)陧?yè)面上展示

1.導(dǎo)入靜態(tài)資源

直接復(fù)制黏貼沒(méi)啥好說(shuō)的


image.png

配置資源映射


image.png

為什么我要配置靜態(tài)資源呢匹涮?
由于web.xml文件當(dāng)中配置的攔截形式是"/",這也就意味著它會(huì)攔截所有的請(qǐng)求槐壳,包括我們的靜態(tài)資源文件然低,我們直接訪問(wèn)的話就會(huì)報(bào)404(找不到資源的錯(cuò)誤),可能有些小白跟我一樣务唐,對(duì)攔截請(qǐng)求不明白雳攘,之所以有攔截器就是為了系統(tǒng)的安全,把一些認(rèn)為不安全的請(qǐng)求給過(guò)濾掉枫笛,以"/"攔截的話會(huì)把所有請(qǐng)求都攔截住吨灭,就是說(shuō),所有的請(qǐng)求都要經(jīng)過(guò)嚴(yán)格的檢查刑巧,如果被攔截下來(lái)的請(qǐng)求在系統(tǒng)中找不到對(duì)應(yīng)的資源或接口來(lái)響應(yīng)的話喧兄,就會(huì)出現(xiàn)404的錯(cuò)誤涩咖。我們見(jiàn)過(guò)以"*.html"為過(guò)濾條件的情景,這種情況下只有".html"結(jié)尾的請(qǐng)求才會(huì)被攔截繁莹,其它請(qǐng)求不會(huì)被攔截。那么小白們可能提出問(wèn)題了特幔,既然所有請(qǐng)求都被攔截了咨演,那么為何我們可以訪問(wèn)Controller中的接口呢?這是由于我們是以Restful的形式來(lái)訪問(wèn)Controller接口的蚯斯,請(qǐng)求被攔截后薄风,發(fā)現(xiàn)Controller中剛好有定義好的請(qǐng)求規(guī)則滿足要求,于是允許訪問(wèn)Controller的該接口拍嵌,如果稍微與Controller層所定義請(qǐng)求規(guī)則不一致則會(huì)報(bào)404的錯(cuò)誤遭赂。同理,我們要訪問(wèn)靜態(tài)資源横辆,請(qǐng)求被攔截后撇他,如果沒(méi)有規(guī)則告訴SpringMVC我們要訪問(wèn)的靜態(tài)資源在哪里的話,就會(huì)報(bào)404的錯(cuò)誤狈蚤,也就是說(shuō)困肩,總得有個(gè)人告訴我我要訪問(wèn)的資源放在哪兒吧(就像Controller那樣,告訴請(qǐng)求脆侮,我這兒定義好了很多規(guī)則锌畸,如果你滿足我的規(guī)則條件,我就讓你訪問(wèn)靖避,否則潭枣,免談),只把請(qǐng)求攔截下來(lái)幻捏,啥也不告訴它盆犁,它就蒙圈了,不知道要怎么訪問(wèn)了篡九。

為了解決靜態(tài)資源被攔截而無(wú)法訪問(wèn)的問(wèn)題蚣抗,我們?cè)趕pringmvc.xml文件中配置下資源映射(也相當(dāng)于制定好訪問(wèn)規(guī)則)如上圖所示,我們之所以只配置了css瓮下、images翰铡、js的資源映射,而沒(méi)有配置jsp的映射是由于我們并不會(huì)直接去訪問(wèn)jsp資源文件讽坏,而是會(huì)經(jīng)過(guò)Controller接口锭魔,返回邏輯視圖,通過(guò)邏輯視圖去springmvc.xml文件中的視圖解析器配置(如上圖“視圖解析器配置”)當(dāng)中去匹配要訪問(wèn)的資源文件路呜,視圖解析器會(huì)自動(dòng)幫我們?cè)诜祷氐倪壿嬕晥D后面加上".jsp"迷捧,而且指定路徑就在WEB-INF/jsp/目錄下织咧,因此我們的jsp文件一定要放在WEB-INF下(除非你配置的視圖解析器的位置是別的目錄)

2.實(shí)現(xiàn)登錄,注冊(cè)頁(yè)面的跳轉(zhuǎn)

  • 功能分析
    請(qǐng)求的url:
    登錄:/page/login
    注冊(cè):/page/register
    參數(shù):無(wú)
    返回結(jié)果:邏輯視圖String
@Controller
public class PageController {

    @RequestMapping("/page/register")
    public String showRegister() {
        return "register";
    }
    
    @RequestMapping("/page/login")
    public String showLogin() {
        return "login";
    }
}

  • 測(cè)試
    image.png

    image.png

    PS:
    1.頁(yè)面里面的某些跳轉(zhuǎn)還有很多不完善的漠秋,我改了一部分笙蒙,直接拿過(guò)去用就好了。如果還有一些跳轉(zhuǎn)到404就改成正確的地址就好了
    2.登錄的時(shí)候可能會(huì)提示說(shuō)XXXXXXX為空庆锦,那是因?yàn)闆](méi)有判斷token為空捅位,加上這句代碼就好了
    image.png
  • 測(cè)試
    啟動(dòng)taotao-manager、taotao-content搂抒、taotao-search艇搀、taotao-manager-web、taotao-portal-web求晶、taotao-search-web焰雕、taotao-item-web、taotao-sso芳杏、taotao-sso-web工程
    輸入賬號(hào)密碼矩屁。我們可以看到跳轉(zhuǎn)到了首頁(yè)。


    image.png

    image.png

    觀察上面首頁(yè)爵赵,可以看到我們的登錄狀態(tài)是已經(jīng)登錄的狀態(tài)

3.JS跨域問(wèn)題

登錄的時(shí)候我們把token寫(xiě)到了cookie當(dāng)中档插,登錄成功后,我們查看Cookie信息亚再,如下圖所示郭膛,發(fā)現(xiàn)是有token信息的。


image.png

我們回到登錄頁(yè)面氛悬,可以看到token信息则剃。如下圖所示∪缤保可以看到與淘淘商城首頁(yè)的token信息是完全一致的棍现。


image.png

不同的端口就已經(jīng)屬于跨域了
什么是跨域:

1、域名不同
2镜遣、域名相同端口不同己肮。
接著說(shuō)下什么是jsonp?
jsonp不是新技術(shù)悲关,它只是一種解決方案谎僻,使用js的特性繞過(guò)跨域請(qǐng)求,利用的特性便是js可以跨域加載js文件T⑷琛艘绍!舉個(gè)非常常見(jiàn)的例子,我們?cè)趆tml頭部一般都會(huì)引入很多js秫筏,甚至我們直接引用在線的js诱鞠,比如我們引用官方網(wǎng)站的jQuery路徑加載進(jìn)來(lái)也是可以的挎挖。JQuery的官方域名與我們的工程所在的域名肯定是不一樣的,但是不影響使用航夺,這就是我們所說(shuō)的js可以跨域請(qǐng)求js文件蕉朵!
跨域的特點(diǎn)是什么呢?我們可以在"Network"一欄看到請(qǐng)求的token信息阳掐,在Headers當(dāng)中發(fā)現(xiàn)服務(wù)端已經(jīng)正常響應(yīng)了始衅,如下圖所示。


image.png

我們?cè)倏聪翿esponse一欄锚烦,發(fā)現(xiàn)沒(méi)有任何信息,其實(shí)流程是這樣的帝雇,我們使用ajax調(diào)用服務(wù)端的接口涮俄,服務(wù)端不管你請(qǐng)求是否是同一個(gè)域下,只管響應(yīng)尸闸,于是 我們可以看到服務(wù)端響應(yīng)的頭信息彻亲,但是當(dāng)數(shù)據(jù)經(jīng)過(guò)瀏覽器時(shí),瀏覽器判斷出js訪問(wèn)的數(shù)據(jù)來(lái)自不同的域吮廉,于是便拒絕將數(shù)據(jù)返給頁(yè)面苞尝。我們拿不到Response信息,也就無(wú)法展示內(nèi)容了宦芦。
image.png

那么jsonp是怎樣解決跨域問(wèn)題的呢宙址?流程圖如下,圖的上半部分展示的是傳統(tǒng)跨域請(qǐng)求调卑,這種請(qǐng)求我們是獲取不到Response數(shù)據(jù)的抡砂,下半部分是介紹jsonp跨域獲取數(shù)據(jù)的方案的。我們現(xiàn)在要跨域獲取信息的js當(dāng)中添加一個(gè)函數(shù)恬涧,該函數(shù)有返回值參數(shù)data注益,發(fā)起跨域請(qǐng)求的一端引入服務(wù)端定義好的一個(gè)js文件,請(qǐng)求的參數(shù)中是帶callback回調(diào)函數(shù)的溯捆,并且callback=mycall中的"mycall"一定是與我們添加的那個(gè)函數(shù)的名稱一致的丑搔,服務(wù)端接收到請(qǐng)求,就進(jìn)行響應(yīng)提揍,并且判斷參數(shù)中是否有callback參數(shù)啤月,如果有callback參數(shù)的話,就對(duì)要返回的數(shù)據(jù)進(jìn)行處理劳跃,加工成一段js代碼(很簡(jiǎn)單顽冶,就是把一個(gè)json串包裝成一個(gè)js函數(shù),如下圖mycall({id:1,name:z});)然后響應(yīng)售碳,js本來(lái)就是要請(qǐng)求訪問(wèn)服務(wù)端的一個(gè)js文件强重,現(xiàn)在返回的也是js代碼绞呈,于是瀏覽器將不再進(jìn)行攔截,由于返回的是js代碼间景,而且js語(yǔ)句有個(gè)特點(diǎn)就是佃声,一旦響應(yīng)到瀏覽器端便立即執(zhí)行,我們已經(jīng)添加了該函數(shù)倘要,于是便調(diào)用我們添加的那個(gè)函數(shù)圾亏,我們只需把數(shù)據(jù)做下處理并進(jìn)行展示就可以了!7馀 志鹃!
image.png

下面我們便來(lái)實(shí)現(xiàn)jsonp請(qǐng)求,上圖所介紹的方法是比較復(fù)雜的泽西,如果我們用jquery的話曹铃,如下圖所示
image.png

image.png

我們刷新下淘淘商城首頁(yè),可以看到請(qǐng)求中自動(dòng)為我們加上了回調(diào)函數(shù)捧杉,而且隨機(jī)為我們添加了函數(shù)名為"jQuery3257776"的函數(shù)陕见。


image.png

現(xiàn)在我們要做的便是修改服務(wù)端的代碼,以便能夠配合客戶端完成整個(gè)請(qǐng)求過(guò)程味抖,修改的方法如下圖所示评甜,我們將原來(lái)返回一個(gè)Map類型改為返回String類型,而且添加了callback參數(shù)仔涩,判斷下是否有callback參數(shù)忍坷,如果有就說(shuō)明是jsonp請(qǐng)求,我們要將result轉(zhuǎn)換成json串并且包裝成一個(gè)js函數(shù)返回熔脂。如果不是jsonp請(qǐng)求承匣,那就直接將result轉(zhuǎn)換成json串返回。

    //獲取用戶信息
    @RequestMapping(value = "/user/token/{token}",method = RequestMethod.GET)
    @ResponseBody
    public String getUserByToken(@PathVariable String token,String callback){
        TaotaoResult result = userService.getUserMessageByToken(token);
        if(StringUtils.isNotBlank(callback)) {
            return callback + "(" + JsonUtils.objectToJson(result) + ");";
        }
        return JsonUtils.objectToJson(result);
    }

  • 測(cè)試
    測(cè)試的結(jié)果如上圖所示(我們可以到admin已經(jīng)登錄的信息)

參考博文:
https://blog.csdn.net/u012453843/article/details/73033114

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末锤悄,一起剝皮案震驚了整個(gè)濱河市韧骗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌零聚,老刑警劉巖袍暴,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異隶症,居然都是意外死亡政模,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門(mén)蚂会,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)淋样,“玉大人,你說(shuō)我怎么就攤上這事胁住〕煤铮” “怎么了刊咳?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)儡司。 經(jīng)常有香客問(wèn)我娱挨,道長(zhǎng),這世上最難降的妖魔是什么捕犬? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任跷坝,我火速辦了婚禮,結(jié)果婚禮上碉碉,老公的妹妹穿的比我還像新娘柴钻。我一直安慰自己,他們只是感情好垢粮,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布贴届。 她就那樣靜靜地躺著,像睡著了一般足丢。 火紅的嫁衣襯著肌膚如雪粱腻。 梳的紋絲不亂的頭發(fā)上庇配,一...
    開(kāi)封第一講書(shū)人閱讀 49,730評(píng)論 1 289
  • 那天斩跌,我揣著相機(jī)與錄音,去河邊找鬼捞慌。 笑死耀鸦,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的啸澡。 我是一名探鬼主播袖订,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼嗅虏!你這毒婦竟也來(lái)了洛姑?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤皮服,失蹤者是張志新(化名)和其女友劉穎楞艾,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體龄广,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡硫眯,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了择同。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片两入。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖敲才,靈堂內(nèi)的尸體忽然破棺而出裹纳,到底是詐尸還是另有隱情择葡,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布痊夭,位于F島的核電站刁岸,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏她我。R本人自食惡果不足惜虹曙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望番舆。 院中可真熱鬧酝碳,春花似錦、人聲如沸恨狈。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)禾怠。三九已至返奉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間吗氏,已是汗流浹背芽偏。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留弦讽,地道東北人污尉。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像往产,于是被迫代替她去往敵國(guó)和親被碗。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

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