91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用gateway后靜態資源失效怎么辦

發布時間:2021-07-05 14:32:47 來源:億速云 閱讀:178 作者:小新 欄目:開發技術

這篇文章主要介紹了使用gateway后靜態資源失效怎么辦,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

關于使用gateway后靜態資源失效問題

配置文件方式對應服務配置文件目錄提供參考

使用gateway后靜態資源失效怎么辦

F12可以看到靜態資源路徑全部都是加載失敗。這是因為我們沒有對靜態文件進行路由導致。

配置文件方式

貼出主要配置:/static/**表示對靜態資源的路由

routes:
        - id: home-service
          uri: lb://home-service #lb表示從注冊中心找到服務
          predicates: #路由規則
            - Path=/home-service/**, /static/**
        - id: user-service
          uri: lb://user-service
          predicates:
            - Path=/user-service/**, /static/**

對應服務配置文件

spring:
  resources:
    static-locations: 靜態資源路徑

目錄提供參考

使用gateway后靜態資源失效怎么辦

記錄一次SSO gateway=true 失效的問題

問題發生場景:

當用戶在門戶登錄后(門戶集成sso(4.0 版本)單點登錄,門戶使用自己的登錄界面,使用sso中的gateway=true特性實現),經過一段時間后,用戶刷新門戶,如果門戶會話狀態和全局sso失效,按照設想是會回到門戶登錄界面,而不是sso的登錄界面,但是有時卻回到sso的登錄界面,并且瀏覽器地址欄帶有“gateway=true”查詢參數。

用戶在刷新一次瀏覽器才能回到門戶登錄界面。

一開始想到是sso中的gateway=true參數失效,在login-webflow.xml文件中增加一個action-state用來再次檢查gateway參數,并在decision-state id 為“gatewayRequestCheck”中使用新增加的action-state 對gateway再一次檢查。

配置以及代碼如下:

xml配置

login-webflow.xml

	<decision-state id="gatewayRequestCheck">
		<if
			test="requestParameters.gateway != '' and requestParameters.gateway != null and flowScope.service != null"
			then="gatewayServicesManagementCheck" else="gatewayParameterCheck" />
	</decision-state>
	
	<!-- 增加再次對gateway參數檢查 -->
	<action-state id="gatewayParameterCheck">
		<evaluate expression="gatewayParameterCheck"/>
		<transition on="yes" to="gatewayServicesManagementCheck" />
		<transition on="no" to="serviceAuthorizationCheck" />
	</action-state>
	<!-- 增加再次對gateway參數檢查 #-->

cas-servlet.xml

  <!-- 檢查gateway參數 -->  
  <bean id="gatewayParameterCheck" class="com.wisdragon.cas.web.flow.GatewayParameterCheck"
    c:servicesManager-ref="servicesManager" />
  <!-- 檢查gateway參數# -->

Java代碼:

public class GatewayParameterCheck extends AbstractAction { 
    private final Logger logger = LoggerFactory.getLogger(this.getClass());    
    @NotNull
    private final ServicesManager servicesManager; 
    /**
     * Initialize the component with an instance of the services manager.
     * @param servicesManager the service registry instance.
     */
    public GatewayParameterCheck(final ServicesManager servicesManager) {
        this.servicesManager = servicesManager;
    }
 
    @Override
    protected Event doExecute(final RequestContext context) throws Exception {    	
        final Service service = WebUtils.getService(context);
        final HttpServletRequest request = WebUtils.getHttpServletRequest(context);        
        String gateWayV = request.getParameter("gateway");
        if (StringUtils.hasText(gateWayV) && service != null) {        	
        	if ("true".equals(gateWayV)) {        		
        		logger.info("gateway參數校驗,校驗信息:gateway={}, 請求服務信息:{}", gateWayV, service.toString());
        		return  yes();
        	}
        } 
        return no();
    }
}

更新到生產環境后,經用戶測試發現此方案無效。此方案無效后,只能再次去回歸login-webflow的登錄流程,總結的流程圖如下:

使用gateway后靜態資源失效怎么辦

上圖只是涉及到登錄部分簡單截圖,不涉及到TGT以及ST。

由上圖可以發現,在“ticketGrantingTicketCheck”節點之后,如果TGT不存在,則會去檢查gateway參數,如果gateway存在,則會去到節點“gatewayServicesManagementCheck”,如果不存在,則回到節點“serviceAuthorizationCheck”,到該節點一般也就會到sso的登錄界面了。

之前在節點“gatewayRequestCheck”后增加了gateway參數再次檢查的節點“gatewayParameterCheck”發現無效果。

因此可以排除走這條線的可能性,剩下的只有TGT存在無效到sso登錄界面這條線了。在這個action-state之中只是對tgt相關的cookie進行清除,并沒有對gateway參數進行檢查,因此有可能是問題的所在。

驗證猜想。

1. 將TGT的存活時間暫時設置為60秒(默認為2小時),方便測試。

修改配置文件:ticketExpirationPolicies.xml

<!-- TicketGrantingTicketExpirationPolicy: Default as of 3.5 -->
    <!-- Provides both idle and hard timeouts, for instance 2 hour sliding window with an 8 hour max lifetime 
    "-->
    <bean id="grantingTicketExpirationPolicy" class="org.jasig.cas.ticket.support.TicketGrantingTicketExpirationPolicy"
          p:maxTimeToLiveInSeconds="${tgt.maxTimeToLiveInSeconds:28800}"
          p:timeToKillInSeconds="${tgt.timeToKillInSeconds:60}"/>

2. 重新發布sso程序,從門戶認證成功后,等待60秒過后,再次刷新門戶系統,發現果然到sso登錄界面。重復實現多次發現都時一樣。由此可以得出,由于門戶使用的TGT失效,并沒有檢查gateway參數因此跳轉到sso的登錄界面。

3. 解決方案:只需在action-state 節點中增加對gateway參數的檢查邏輯,根據檢查的結果到不同的節點即可。新的流程圖如下:

使用gateway后靜態資源失效怎么辦

在上圖中增加節點 “terminateSession”的 條件為“gateway”的transition,當請求中存在gateway參數時,讓流程到gatewayRequestCheck節點。

代碼:

final HttpServletResponse response = WebUtils.getHttpServletResponse(context);
        this.ticketGrantingTicketCookieGenerator.removeCookie(response);
        this.warnCookieGenerator.removeCookie(response);
        
        /**
         * 檢查gateway參數,如果為true,走gatewayRequestCheck
         */
        final String hasGateWayParameter = WebUtils.getHttpServletRequest(context).getParameter("gateway");
        if (!VTools.StringIsNullOrSpace(hasGateWayParameter) && "true".equals(hasGateWayParameter)) {        	
        	 return new Event(this, "gateway");
        }        
        return this.eventFactorySupport.success(this);

感謝你能夠認真閱讀完這篇文章,希望小編分享的“使用gateway后靜態資源失效怎么辦”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

泗洪县| 通许县| 吴堡县| 汾阳市| 阿拉善右旗| 瓮安县| 寿光市| 柘荣县| 扶绥县| 高雄市| 启东市| 攀枝花市| 仁化县| 木兰县| 临洮县| 呼和浩特市| 那曲县| 莱芜市| 东方市| 西畴县| 芒康县| 中西区| 木里| 正宁县| 延安市| 洪雅县| 青川县| 繁昌县| 黎川县| 黑龙江省| 手游| 江口县| 五大连池市| 苏州市| 班戈县| 鹤壁市| 古交市| 石阡县| 安溪县| 大竹县| 凤山市|