已攔截跨源請求:同源策略禁止讀取位於 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 響應頭中有這...
前後端分離
關於前後端分離的一些好的文章推薦 前端框架 為什麼前後端分離 最直白的理解,我認為是因為在開發過程中,前端總是需要等待後端的環境搭建好之後,前端才能獲取相關資料,對於前端的開發影響很大,事實上前端並不關心後端的開發,那麼有沒有方法不讓後端影響前端的開發呢?其實後端提供的是什麼?乙個執行伺服器,乙個就...