前後的分離配置shrio

2021-10-03 12:29:03 字數 3388 閱讀 7071

已攔截跨源請求:同源策略禁止讀取位於 http://localhost/payment/page 的遠端資源。(原因:cors 頭缺少 『access-control-allow-origin』)。

已攔截跨源請求:同源策略禁止讀取位於 http://localhost/payment/page 的遠端資源。(原因:cors 請求未能成功)。

error: network error

原因:前後端分離專案中,ajax請求沒有攜帶cookie,所以後台無法通過cookie獲取到sessionid,從而無法獲取到session物件。而shiro的認證與授權都是通過session實現的

解決:1.前後端需要建立會話機制

通過token的機制建立前端和後端的會話管理機制

1)登入成功後返回token,並以後每次ajax請求都要攜帶token

contrller

1.登入成功加上

//獲取到登入成功儲存到系統上下文中的使用者名稱密碼,強轉成user型別

user principal =

(user)subject.

getprincipal()

;//將密碼設定為null再傳給前台

principal.

setpassword

(null)

;//定義乙個map集合拿來儲存需要返回的值

hashmap

map =

newhashmap

<

>()

;//將登入成功的物件存入map

map.

put(

"user"

, principal)

;//將sessionid儲存到map

map.

put(

"token"

, subject.

getsession()

.getid()

);//將map存到封裝好的返回格式工具類中

ajaxresult.

setresultobj

(map)

;

2.前端main.js

//傳送請求之前 攔截 把token設定到請求頭裡面

axios.interceptors.request.

use(config =>

console.

debug

('config'

,config)

return config

}, error =>

);

3.傳統結構專案中,shiro從cookie中讀取sessionid以此來維持會話,在前後端分離的專案中,因此需要重寫shiro獲取sessionid的方式。 * 自定義sessionmanager類繼承defaultwebsessionmanager類,重寫getsessionid方法

public

class

crmsessionmanager

extends

defaultwebsessionmanager

else

}}

3.1注入重寫方法獲取sessionid的物件
"sessionmanager"

class

="com.edu.zhy.crm.crmsessionmanager"

/>

<

!--shiro的核心物件 realm--

>

"securitymanager"

class

="org.apache.shiro.web.mgt.defaultwebsecuritymanager"

>

<

!--配置realm--

>

"realm" ref=

"authrealm"

/>

<

!-- 呼叫自己獲取sessionid的方法--

>

"sessionmanager" ref=

"sessionmanager"

>

<

/property>

<

/bean>

4.自定義shrio身份認證過濾器 繼承formauthenticationfilter

/*

* 自定義身份認證過濾器

* */

public

class

myauthenticationfilter

extends

formauthenticationfilter

return

super

.isaccessallowed

;}

配置上自己重寫的過濾器

<

!-- 配置過濾器--

>

bean注入自己重寫過濾器

"authfilter"

class

="com.edu.zhy.crm.shrio.filter.myauthfilter"

>

<

/bean>

<

!--shiro的過濾器配置 web.xml的**過濾器名稱一樣--

>

"shirofilter"

class

="org.apache.shiro.spring.web.shirofilte***ctorybean"

>

"securitymanager" ref=

"securitymanager"

/>

"loginurl" value=

"/s/login"

/>

"successurl" value=

"/s/index"

/>

"unauthorizedurl" value=

"/s/unauthorized"

/>

<

!--使用自定義過濾器--

>

"filters"

>

"authfilter" value-ref=

"authfilter"

>

<

/entry>

<

/map>

<

/property>

"filterchaindefinitions"

>

/login = anon

/** /**= myauthc**/

<

/value>

<

/property>

<

/bean>

前後端的分離

對於大部分應用,已經不需要從後端讀取html頁面或者模板,前端完全可以根據資料自行渲染頁面 模板,這樣,前後臺互動就可以簡化為資料的增刪改查。利用ajax技術,實現頁面區域性重新整理,促使了前後臺分離的可能性。那麼,如何利用前後端分離開發模式,開始乙個專案呢?1.產品文件 產品經理會先設計好整個產品...

前後端分離及使用前後端分離的原因

前後端分離指的是前端採用純html頁面,通過ajax向後台請求資料。使用前後端分離的原因,通過在後台設定引數,可以控制html在遊覽器的快取時間,遊覽器訪問頁面時不需要向後台傳送請求。減少了後台伺服器的壓力。判斷遊覽器是否取的是快取 cache control max age 3600 響應頭中有這...

前後端分離

關於前後端分離的一些好的文章推薦 前端框架 為什麼前後端分離 最直白的理解,我認為是因為在開發過程中,前端總是需要等待後端的環境搭建好之後,前端才能獲取相關資料,對於前端的開發影響很大,事實上前端並不關心後端的開發,那麼有沒有方法不讓後端影響前端的開發呢?其實後端提供的是什麼?乙個執行伺服器,乙個就...