SpringBoot + Shiro前后端分離權(quán)限
shiro 驗證通過后的信息保存在session 中,而ajax 每次傳的都是不同的sessionid ,所以主要的區(qū)別就是需要修改shiro獲取sessionid的方式。這里使用的是登錄后將后臺的sessionid 傳到前端然后存放到 cookie(這個存放的地方視情況而定),然后每次請求后端時在Header中攜帶此信息,這里起名為Authorization
shiro 中 默認獲取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 { /** * 獲取請求頭中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; }
然后修改前端,這里前端使用的時Vue.js,登錄成功后將SessionId保存到cookie中,并將請求中攜帶頭信息
util.setCookie("SESSIONID",data.data.sessionId,1); axios.defaults.headers.common['Authorization'] = util.getCookie("SESSIONID");
這樣后端就能根據(jù)這個sessionid判斷出用戶是否通過認證
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
- SpringBoot+Shiro+Redis+Mybatis-plus 實戰(zhàn)項目及問題小結(jié)
- 解決springboot+shiro 權(quán)限攔截失效的問題
- Springboot和bootstrap實現(xiàn)shiro權(quán)限控制配置過程
- SpringBoot 整合 Shiro 密碼登錄與郵件驗證碼登錄功能(多 Realm 認證)
- Springboot shiro認證授權(quán)實現(xiàn)原理及實例
- 基于springboot實現(xiàn)整合shiro實現(xiàn)登錄認證以及授權(quán)過程解析
- SpringBoot整合Shiro實現(xiàn)登錄認證的方法
- Springboot+Shiro+Mybatis+mysql實現(xiàn)權(quán)限安全認證的示例代碼
相關(guān)文章
SpringBoot基于HttpMessageConverter實現(xiàn)全局日期格式化
這篇文章主要介紹了SpringBoot基于HttpMessageConverter實現(xiàn)全局日期格式化,使用Jackson消息轉(zhuǎn)換器,非常具有實用價值,需要的朋友可以參考下2018-12-12SpringBoot文件上傳控制及Java 獲取和判斷文件頭信息
這篇文章主要介紹了SpringBoot文件上傳控制的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-12-12關(guān)于maven環(huán)境的安裝及maven集成idea環(huán)境的問題
Maven 是一個基于 Java 的工具,所以要做的第一件事情就是安裝 JDK。本文重點給大家介紹關(guān)于maven環(huán)境的安裝及和idea環(huán)境的集成問題,感興趣的朋友一起看看吧2021-09-09SpringBoot參數(shù)校驗的最佳實戰(zhàn)教程
開發(fā)過程中,后臺的參數(shù)校驗是必不可少的,下面這篇文章主要給大家介紹了關(guān)于SpringBoot參數(shù)校驗的最佳實戰(zhàn),文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下2021-08-08