1. 程式人生 > >springboot整合shiro時登入成功但是卻不跳轉問題

springboot整合shiro時登入成功但是卻不跳轉問題

最近在使用springboot專案中整合shiro做登入以及許可權驗證,整合的過程中,我自己在shiro的配置類ShiroConfig中配置了登入成功後的跳轉路徑,如下圖:

然而當我成功登入時卻沒有跳轉到我指定的頁面,經過查詢相關資料,發現是authc(即FormAuthenticationFilter)攔截器的問題,分析FormAuthenticationFilter中成功登入部分的原始碼:

protectedbooleanonLoginSuccess(AuthenticationToken token, Subject subject,
                                     ServletRequest request, ServletResponse response)
throws Exception
{ issueSuccessRedirect(request, response); //we handled the success redirect directly, prevent the chain from continuing: return false; }

登入成功後會執行:

protectedvoidissueSuccessRedirect(ServletRequest request, ServletResponse response)throws Exception {
        WebUtils.redirectToSavedRequest(request, response, getSuccessUrl());
    }

該方法具體程式碼如下:

   publicstaticvoidredirectToSavedRequest(ServletRequest request, ServletResponse response, String fallbackUrl)throws IOException {
        String successUrl = null;
        boolean contextRelative = true;
        SavedRequest savedRequest = WebUtils.getAndClearSavedRequest(request);
        if
(savedRequest != null && savedRequest.getMethod().equalsIgnoreCase(AccessControlFilter.GET_METHOD)) { successUrl = savedRequest.getRequestUrl(); contextRelative = false; } if (successUrl == null) { successUrl = fallbackUrl; } if (successUrl == null) { throw new IllegalStateException("Success URL not available via saved request or via the " + "successUrlFallback method parameter. One of these must be non-null for " + "issueSuccessRedirect() to work."); } WebUtils.issueRedirect(request, response, successUrl, null, contextRelative); }

這裡可以看到successUrl = savedRequest.getRequestUrl(),會把successUrl重新賦值,配置的/home失效,所以即使配置了successUrl也不能跳轉。

解決方法:寫一個攔截器繼承FormAuthenticationFilter,重寫onLoginSucess方法,程式碼如下:

public classMyFormAuthenticationFilterextendsFormAuthenticationFilter{
    @Override
    protectedbooleanonLoginSuccess(AuthenticationToken token, Subject subject, ServletRequest request, ServletResponse response)throws Exception {
        String successUrl = "/home";
        WebUtils.issueRedirect(request,response,successUrl);
        return false;
    }
}

然後在shiro的配置類中加入該攔截器即可,如下圖所示:

如此,此問題解決

相關推薦

springboot整合shiro登入成功但是問題

最近在使用springboot專案中整合shiro做登入以及許可權驗證,整合的過程中,我自己在shiro的配置類ShiroConfig中配置了登入成功後的跳轉路徑,如下圖:然而當我成功登入時卻沒有跳轉到我指定的頁面,經過查詢相關資料,發現是authc(即FormAuthent

解決java後臺發起重定向響應成功,前端頁面問題

Java後臺使用了 “redirect:/”重定向的操作 前端進行請求該介面時,如果直接訪問該介面,可以跳轉指定的頁面,但如果在頁面中訪問該介面,發現頁面並不發生跳轉,檢視控制檯,請求是成功的。 跳轉的地址也顯示請求成功 但是頁面內容不發生跳轉,還是原來的頁面 問題主要在前端

springboot整合shiro認證出現報錯(Submitted credentials for token...)

springboot整合shiro時認證出現報錯無非就是密碼不匹配 可能發生的原因: 前端傳的密碼是明文,而後臺儲存的是hash值,導致先後臺不匹配報錯 如果資料庫儲存的密碼是加密的 那麼要 從前端獲取密碼後,在Java裡將其轉換成hash值 如果jav

Springboot整合shiro出現的靜態資源無法訪問的問題

使用Springboot整合shiro之後,我的靜態資源竟然不見了,講真,第一次整合shiro,完全不知道是什麼原理怎麼辦,百度原來是shiro把它給攔截了,找了很多文章,整了一堆話,都不是我想要的,後來看到一篇文章,一語中的http://412887952-qq-com.i

Springboot整合shiro靜態資源被攔截的問題

目錄結構如下在自己配置的ShiroConfig中已經放行了filterChainDefinitionMap.put("/static/**", "anon");login.ftl也引用了靜態資源<link rel="stylesheet" type="text/css"

shiro登入成功後,沒有到Success

debug後跟進去觀察後發現FormAuthenticationFilter成功登陸後,會呼叫它的onLoginSuccess方法。 protected boolean onLoginSuccess

django頁面沒反應/一直處於載入中/請求成功:兩種常見情況

使用Django的時候,頁面請求正常,也沒有報任何錯誤,甚至連警告都沒有的情況下,頁面卻還是原地不動或者閃一下或者無限顯示載入動畫的情況適用本文。 這個問題描述比較籠統,但根據我目前遇到過兩種情況來看,似乎都比較重要而且實用,所以打算分別講述一下。 第一種:URL配置錯誤

springboot整合shiro認證"username"更改為"account"或自定義的ShiroConfig配置

springboot整合shiro認證時"username"更改為"account"或自定義的配置package com.sxt.zhy.springboot.config; import java.util.HashMap; import java.util.Linked

SpringBoot整合Shiro登入認證和授權(附demo)

SpringBoot整合Shiro登入認證和授權 廢話不多說,直接上程式碼: 程式碼有點多,想直接拿demo的直接拉到底 ps:demo忘了在哪拿的了,在他的基礎上改了一些 步驟一:pom.xml匯入依賴jar包 <dependencies

SpringBoot學習:整合shiro自動登入功能(rememberMe記住我功能)

首先在shiro配置類中注入rememberMe管理器 /** * cookie物件; * rememberMeCookie()方法是設定Cookie的生成模版,比如cookie的name,cookie的有效時間等等。 * @return */ @Bean public

springboot-整合shiro和vue的驗證登入和許可權

springboot-整合shiro和vue的驗證登入和許可權 文章目錄 springboot-整合shiro和vue的驗證登入和許可權 1.配置 1.1資料表 1.2工程說明: 1.3springboot

spring-boot(八) springboot整合shiro-登入認證和許可權管理

Apache Shiro What is Apache Shiro? Apache Shiro是一個功能強大、靈活的,開源的安全框架。它可以乾淨利落地處理身份驗證、授權、企業會話管理和加密。 Apache Shiro的首要目標是易於使用和理解。安全通常很複雜,甚至讓人感到很痛苦,但是Shiro卻不是

springboot整合shiro-登入失敗次數限制(八)

這次講講如何限制使用者登入嘗試次數,防止壞人多次嘗試,惡意暴力破解密碼的情況出現,要限制使用者登入嘗試次數,必然要對使用者名稱密碼驗證失敗做記錄,Shiro中使用者名稱密碼的驗證交給了CredentialsMatcher 所以在CredentialsMatc

springboot(十四):springboot整合shiro-登入認證和許可權管理

這篇文章我們來學習如何使用Spring Boot整合Apache Shiro。安全應該是網際網路公司的一道生命線,幾乎任何的公司都會涉及到這方面的需求。在Java領域一般有Spring Security、Apache Shiro等安全框架,但是由於Spring Sec

整合shiro登入請求無法捕捉UnknownAccountException

程式碼寫累了,關於整合shiro,寫個文章記錄下一個簡單但是困擾了我好久的問題:無論登陸時包什麼異常,在controll中獲取的都是異常的父類AuthenticationException。 框架使用ssm,在整合shiro時,自定義一個realm,命名為MyAuthorR

springboot整合shiro-線上人數以及併發登入人數控制(七)

專案中有時候會遇到統計當前線上人數的需求,也有這種情況當A 使用者在邯鄲地區登入 ,然後A使用者在北京地區再登入 ,要踢出邯鄲登入的狀態。如果使用者在北京重新登入,那麼又要踢出邯鄲的使用者,這樣反覆。 這樣保證了一個帳號只能同時一個人使用。那麼下面來講解一

springboot整合shiro-登入認證和許可權管理

這篇文章我們來學習如何使用Spring Boot整合Apache Shiro。安全應該是網際網路公司的一道生命線,幾乎任何的公司都會涉及到這方面的需求。在Java領域一般有Spring Security、Apache Shiro等安全框架,但是由於Spring Securit

SpringBoot(十四):springboot整合shiro-登錄認證和權限管理

sets man throws 將不 匹配 跳轉 ida 管理員 領域 原文出處: 純潔的微笑 這篇文章我們來學習如何使用Spring Boot集成Apache Shiro。安全應該是互聯網公司的一道生命線,幾乎任何的公司都會涉及到這方面的需求。在Java領域一般有Spri

springboot整合shiro應用

exceptio dst over sql version ges sub star images 1、Shiro是Apache下的一個開源項目,我們稱之為Apache Shiro。它是一個很易用與Java項目的的安全框架,提供了認證、授權、加密、會話管理,與spr

springBoot整合shiro

shiro依賴包 <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId> <version>1.