使用Shiro實(shí)現(xiàn)登錄成功后跳轉(zhuǎn)到之前的頁面
這個問題是之前在做登錄注冊模塊時遇到的需求,如何用戶直接訪問登錄頁面,可以控制直接跳到首頁,但是如果是用戶沒有登錄直接訪問了購物車等需要經(jīng)過身份認(rèn)證的頁面,或者是因?yàn)閟ession超時,用戶需要重新登錄,那么這時跳回之前的頁面就是提升用戶體驗(yàn)的事情。實(shí)現(xiàn)此功能比較好的方法是用ajax的方式登陸,這樣直接在當(dāng)前頁面彈窗讓用戶登錄既可,二是把用戶未登錄前的url存在session中,login成功之后先檢查session中是否存在這樣的一個url。下面通過一段代碼給大家分享下:
項(xiàng)目中集成了shiro,里面就有這么個功能,防止WebUtils工具類里面。
廢話了這么多,其實(shí)網(wǎng)上也有人寫過這么一篇關(guān)于這個功能實(shí)現(xiàn)的的博文,這個大神寫的shiro教程也是蠻值得一看的,只不過我在使用
SavedRequest savedRequest = WebUtils.getSavedRequest(request);的時候,savedRequest 對象一直為空,囧了一段時間,后面再群里遇到高人指點(diǎn),發(fā)現(xiàn)是自己的配置文件沒寫好,即shiroFilter中的filterChainDefinitions,所需要攔截的url沒有寫完全,像下面這段配置
<!-- Shiro的Web過濾器 --> <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"> <property name="securityManager" ref="securityManager" /> <property name="loginUrl" value="/cooka-user-web/login" /> <property name="unauthorizedUrl" value="/unauthorized " /> <property name="filters"> <util:map> <entry key="authc"> <bean class="org.apache.shiro.web.filter.authc.PassThruAuthenticationFilter" /> </entry> </util:map> </property> <property name="filterChainDefinitions"> <value> # 無需認(rèn)證便可以訪問的的文件放在前面 /js/* = anon /css/* = anon /img/* = anon /images/* = anon /user-web/login = anon /logout = logout /user-web/* = authc /backend-web/* = authc </value> </property> </bean>
只有/user-web/* (除去login,這里url的匹配使用短路機(jī)制,即最先匹配原則)和/backend-web/ 后面的url,才會被允許存入到session中,這樣,當(dāng)用戶沒有登陸就去訪問包含以上兩種鏈接前綴的時候,登陸成功后就會跳轉(zhuǎn)到之前的界面了。
以上內(nèi)容就是本文全部介紹,希望能夠幫助到大家
相關(guān)文章
spring boot 2.x html中引用css和js失效問題及解決方法
這篇文章主要介紹了spring boot 2.x html中引用css和js失效,需要的朋友可以參考下2018-11-11java的Jackson將json字符串轉(zhuǎn)換成泛型List
這篇文章主要介紹了java的Jackson將json字符串轉(zhuǎn)換成泛型List ,這里整理了詳細(xì)的代碼,有需要的小伙伴可以參考下。2017-02-02java堆棧類使用實(shí)例(java中stack的使用方法)
java中stack的使用方法,堆棧是一種"后進(jìn)先出"(LIFO) 的數(shù)據(jù)結(jié)構(gòu), 只能在一端進(jìn)行插入(稱為"壓棧") 或刪除 (稱為"出棧")數(shù)據(jù)的操作,下面看示例吧2013-12-12Java多線程中線程的兩種創(chuàng)建方式及比較代碼示例
這篇文章主要介紹了Java多線程中線程的兩種創(chuàng)建方式及比較代碼示例,簡單介紹了線程的概念,并行與并發(fā)等,然后通過實(shí)例代碼向大家展示了線程的創(chuàng)建,具有一定參考價值,需要的朋友可以了解下。2017-11-11解析ConcurrentHashMap: put方法源碼分析
ConcurrentHashMap是由Segment數(shù)組結(jié)構(gòu)和HashEntry數(shù)組結(jié)構(gòu)組成。Segment的結(jié)構(gòu)和HashMap類似,是一種數(shù)組和鏈表結(jié)構(gòu),今天給大家普及java面試常見問題---ConcurrentHashMap知識,一起看看吧2021-06-06redis 使用lettuce 啟動內(nèi)存泄漏錯誤的解決方案
這篇文章主要介紹了redis 使用lettuce 啟動內(nèi)存泄漏錯誤的解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04