springboot集成shiro的session污染問題


問題起因是這樣的,有兩套系統,系統a和系統b。兩套系統均使用shiro做的權限管理,之前部署在兩台機器上。使用瀏覽器打開a系統后另開頁簽打開b系統,互不干擾都能正常使用,后因業務遷移,兩套系統部署到了一個機器上,再使用瀏覽器打開a系統后再開b系統。問題就出現了,之前a系統要求重新登錄。

        原因分析,shiro是基於session會話的權限管理,那么瀏覽器打開一次就會產生一個session,在session活躍期間,只要你瀏覽器不關閉,session信息是一直有效的。其session信息是寫在cookie里的。如果你是兩個域的話,session信息不回互相干擾。但如果你是一個域問題就來了,a登錄后session信息會寫入瀏覽器cookie里,當b登錄時session信息更新此域的信息。a原始登錄的session信息就會失效。因此b登錄后,會擠占a的session信息

 原因分析明白,如何解決,其實很簡單:

  在shiro配置文件的sessionManager()方法里修改session的key值

@Bean
    public DefaultWebSessionManager sessionManager() {
        DefaultWebSessionManager sessionManager = new DefaultWebSessionManager();
        Cookie cookie=sessionManager.getSessionIdCookie();
        cookie.setName("newsessid");
        return sessionManager;
	
    }

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM