SpringBoot + Shiro前后端分離權(quán)限
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 所以需要重寫此類
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)證
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- SpringBoot+Shiro+Redis+Mybatis-plus 實(shí)戰(zhàn)項(xiàng)目及問題小結(jié)
- 解決springboot+shiro 權(quán)限攔截失效的問題
- Springboot和bootstrap實(shí)現(xiàn)shiro權(quán)限控制配置過(guò)程
- SpringBoot 整合 Shiro 密碼登錄與郵件驗(yàn)證碼登錄功能(多 Realm 認(rèn)證)
- Springboot shiro認(rèn)證授權(quán)實(shí)現(xiàn)原理及實(shí)例
- 基于springboot實(shí)現(xiàn)整合shiro實(shí)現(xiàn)登錄認(rèn)證以及授權(quán)過(guò)程解析
- SpringBoot整合Shiro實(shí)現(xiàn)登錄認(rèn)證的方法
- Springboot+Shiro+Mybatis+mysql實(shí)現(xiàn)權(quán)限安全認(rèn)證的示例代碼
相關(guān)文章
SpringBoot基于HttpMessageConverter實(shí)現(xiàn)全局日期格式化
這篇文章主要介紹了SpringBoot基于HttpMessageConverter實(shí)現(xiàn)全局日期格式化,使用Jackson消息轉(zhuǎn)換器,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2018-12-12Spring多數(shù)據(jù)源導(dǎo)致配置失效的解決
這篇文章主要介紹了Spring多數(shù)據(jù)源導(dǎo)致配置失效的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01SpringBoot文件上傳控制及Java 獲取和判斷文件頭信息
這篇文章主要介紹了SpringBoot文件上傳控制的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-12-12關(guān)于maven環(huán)境的安裝及maven集成idea環(huán)境的問題
Maven 是一個(gè)基于 Java 的工具,所以要做的第一件事情就是安裝 JDK。本文重點(diǎn)給大家介紹關(guān)于maven環(huán)境的安裝及和idea環(huán)境的集成問題,感興趣的朋友一起看看吧2021-09-09SpringBoot參數(shù)校驗(yàn)的最佳實(shí)戰(zhàn)教程
開發(fā)過(guò)程中,后臺(tái)的參數(shù)校驗(yàn)是必不可少的,下面這篇文章主要給大家介紹了關(guān)于SpringBoot參數(shù)校驗(yàn)的最佳實(shí)戰(zhàn),文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-08-08