Spring&SpringBoot攔截器使用相關問題
- 攔截轉發别用
的方式response.getWriter()
- 原因 : 使用
或response.getWriter().println()
方法向前端回寫JavaScript片段進行攔截頁面跳轉的方式 . 當未登入且你請求的url被攔截成功并成功執行該方法後 , 你請求的的這個url就會被永久性的綁定該JavaScript片段 . 後續你登入後再請求該url , 不會被攔截器攔截,但是因為這個url已經被永久綁定了那個頁面跳轉的JavaScript片段 , 是以本次請求還是會跳轉至JavaScript片段指定的路徑 . 而你直接進行登入授權不被攔截器攔截的話就不會有這個場景複現.response.getWriter().writer()
- 解決 : 直接使用
方法進行重定向 , 如果覺得直接重定向至登入授權頁面沒提示資訊不太好 , 可以重定向至一個中間提示的HTML頁面 , 在這個頁面提示後再重定向至登入授權頁面response.sendRedirect()
- 解決 : 直接使用
- 原因 : 使用
- 使用ehcache進行靜态資源緩存時 , 别對.html , .jsp 等頁面檔案進行緩存
- 原因 : 如果使用了ehcache對頁面檔案進行緩存 , 在登入授權後通路過被攔截的一個頁面檔案後 , 後續就算登出了登入授權 , 再次通路該頁面檔案時 , 因為存在緩存 , 會直接傳回緩存中的頁面檔案進行顯示 , 而不會經過攔截器對其進行攔截 , 這樣就會使得攔截器失去了意義
- 解決 : SimplePageCachingFilter的配置中 ,
方法别映射addUrlPatterns
檔案即可.html
- 解決 : SimplePageCachingFilter的配置中 ,
- 原因 : 如果使用了ehcache對頁面檔案進行緩存 , 在登入授權後通路過被攔截的一個頁面檔案後 , 後續就算登出了登入授權 , 再次通路該頁面檔案時 , 因為存在緩存 , 會直接傳回緩存中的頁面檔案進行顯示 , 而不會經過攔截器對其進行攔截 , 這樣就會使得攔截器失去了意義
- 浏覽器如果
中開啟了緩存 , 在登入授權後通路過被攔截的一個頁面檔案後 , 後續登出了登入授權 , 再次通路該頁面檔案時 , 因為存在緩存 , 會直接傳回緩存中的頁面檔案進行顯示 , 而不會經過攔截器對其進行攔截 , 但該緩存存活時間極短 , 第二次請求同一個頁面檔案時就不會走緩存而是請求伺服器進入攔截器網絡欄
- 目前沒有找到解決方法 , 但因其生存時間的特殊性 , 應該不會産生什麼影響