小編給大家分享一下SpringBoot + Shiro如何實(shí)現(xiàn)前后端分離權(quán)限,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
成都創(chuàng)新互聯(lián)專注骨干網(wǎng)絡(luò)服務(wù)器租用10多年,服務(wù)更有保障!服務(wù)器租用,遂寧服務(wù)器托管 成都服務(wù)器租用,成都服務(wù)器托管,骨干網(wǎng)絡(luò)帶寬,享受低延遲,高速訪問(wèn)。靈活、實(shí)現(xiàn)低成本的共享或公網(wǎng)數(shù)據(jù)中心高速帶寬的專屬高性能服務(wù)器。
shiro 驗(yàn)證通過(guò)后的信息保存在session 中,而ajax 每次傳的都是不同的sessionid ,所以主要的區(qū)別就是需要修改shiro獲取sessionid的方式。這里使用的是登錄后將后臺(tái)的sessionid 傳到前端然后存放到 cookie(這個(gè)存放的地方視情況而定),然后每次請(qǐng)求后端時(shí)在Header中攜帶此信息,這里起名為Authorization
shiro 中 默認(rèn)獲取Sessionid的類是 DefaultWebSessionManager 所以需要重寫(xiě)此類
import org.apache.commons.lang3.StringUtils; import org.apache.shiro.web.servlet.ShiroHttpServletRequest; import org.apache.shiro.web.session.mgt.DefaultWebSessionManager; import org.apache.shiro.web.util.WebUtils; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import java.io.Serializable; public class PowerShiroSessionManager extends DefaultWebSessionManager { /** * 獲取請(qǐng)求頭中key為“Authorization”的value == sessionId */ private static final String AUTHORIZATION ="Authorization"; private static final String REFERENCED_SESSION_ID_SOURCE = "cookie"; @Override protected Serializable getSessionId(ServletRequest request, ServletResponse response) { // TODO Auto-generated method stub String sessionId = WebUtils.toHttp(request).getHeader(AUTHORIZATION); System.out.println(sessionId); if (StringUtils.isNotEmpty(sessionId)) { request.setAttribute(ShiroHttpServletRequest.REFERENCED_SESSION_ID_SOURCE, ShiroHttpServletRequest.COOKIE_SESSION_ID_SOURCE); request.setAttribute(ShiroHttpServletRequest.REFERENCED_SESSION_ID, sessionId); request.setAttribute(ShiroHttpServletRequest.REFERENCED_SESSION_ID_IS_VALID, Boolean.TRUE); return sessionId; } return super.getSessionId(request, response); } }
然后在配置中配置此類
@Bean public SessionManager sessionManager() { PowerShiroSessionManager shiroSessionManager = new PowerShiroSessionManager(); return shiroSessionManager; } @Bean public SecurityManager securityManager(){ DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); securityManager.setRealm(myShiroRealm()); //自定義session管理 securityManager.setSessionManager(sessionManager()); return securityManager; }
然后修改前端,這里前端使用的時(shí)Vue.js,登錄成功后將SessionId保存到cookie中,并將請(qǐng)求中攜帶頭信息
util.setCookie("SESSIONID",data.data.sessionId,1); axios.defaults.headers.common['Authorization'] = util.getCookie("SESSIONID");
這樣后端就能根據(jù)這個(gè)sessionid判斷出用戶是否通過(guò)認(rèn)證
以上是“SpringBoot + Shiro如何實(shí)現(xiàn)前后端分離權(quán)限”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
文章題目:SpringBoot+Shiro如何實(shí)現(xiàn)前后端分離權(quán)限
URL地址:http://www.rwnh.cn/article24/pgcjje.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、用戶體驗(yàn)、面包屑導(dǎo)航、網(wǎng)站營(yíng)銷、App開(kāi)發(fā)、網(wǎng)站排名
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)