最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解決使用gateway后靜態(tài)資源失效的問(wèn)題

 更新時(shí)間:2021年07月05日 09:18:10   作者:阿木木fe  
這篇文章主要介紹了解決使用gateway后靜態(tài)資源失效的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

關(guān)于使用gateway后靜態(tài)資源失效問(wèn)題

配置文件方式對(duì)應(yīng)服務(wù)配置文件目錄提供參考

F12可以看到靜態(tài)資源路徑全部都是加載失敗。這是因?yàn)槲覀儧](méi)有對(duì)靜態(tài)文件進(jìn)行路由導(dǎo)致。

配置文件方式

貼出主要配置:/static/**表示對(duì)靜態(tài)資源的路由

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

對(duì)應(yīng)服務(wù)配置文件

spring:
  resources:
    static-locations: 靜態(tài)資源路徑

目錄提供參考

在這里插入圖片描述

記錄一次SSO gateway=true 失效的問(wèn)題

問(wèn)題發(fā)生場(chǎng)景:

當(dāng)用戶在門(mén)戶登錄后(門(mén)戶集成sso(4.0 版本)單點(diǎn)登錄,門(mén)戶使用自己的登錄界面,使用sso中的gateway=true特性實(shí)現(xiàn)),經(jīng)過(guò)一段時(shí)間后,用戶刷新門(mén)戶,如果門(mén)戶會(huì)話狀態(tài)和全局sso失效,按照設(shè)想是會(huì)回到門(mén)戶登錄界面,而不是sso的登錄界面,但是有時(shí)卻回到sso的登錄界面,并且瀏覽器地址欄帶有“gateway=true”查詢參數(shù)。

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

一開(kāi)始想到是sso中的gateway=true參數(shù)失效,在login-webflow.xml文件中增加一個(gè)action-state用來(lái)再次檢查gateway參數(shù),并在decision-state id 為“gatewayRequestCheck”中使用新增加的action-state 對(duì)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>
	
	<!-- 增加再次對(duì)gateway參數(shù)檢查 -->
	<action-state id="gatewayParameterCheck">
		<evaluate expression="gatewayParameterCheck"/>
		<transition on="yes" to="gatewayServicesManagementCheck" />
		<transition on="no" to="serviceAuthorizationCheck" />
	</action-state>
	<!-- 增加再次對(duì)gateway參數(shù)檢查 #-->

cas-servlet.xml

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

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參數(shù)校驗(yàn),校驗(yàn)信息:gateway={}, 請(qǐng)求服務(wù)信息:{}", gateWayV, service.toString());
        		return  yes();
        	}
        } 
        return no();
    }
}

更新到生產(chǎn)環(huán)境后,經(jīng)用戶測(cè)試發(fā)現(xiàn)此方案無(wú)效。此方案無(wú)效后,只能再次去回歸login-webflow的登錄流程,總結(jié)的流程圖如下:

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

由上圖可以發(fā)現(xiàn),在“ticketGrantingTicketCheck”節(jié)點(diǎn)之后,如果TGT不存在,則會(huì)去檢查gateway參數(shù),如果gateway存在,則會(huì)去到節(jié)點(diǎn)“gatewayServicesManagementCheck”,如果不存在,則回到節(jié)點(diǎn)“serviceAuthorizationCheck”,到該節(jié)點(diǎn)一般也就會(huì)到sso的登錄界面了。

之前在節(jié)點(diǎn)“gatewayRequestCheck”后增加了gateway參數(shù)再次檢查的節(jié)點(diǎn)“gatewayParameterCheck”發(fā)現(xiàn)無(wú)效果。

因此可以排除走這條線的可能性,剩下的只有TGT存在無(wú)效到sso登錄界面這條線了。在這個(gè)action-state之中只是對(duì)tgt相關(guān)的cookie進(jìn)行清除,并沒(méi)有對(duì)gateway參數(shù)進(jìn)行檢查,因此有可能是問(wèn)題的所在。

驗(yàn)證猜想。

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

修改配置文件: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. 重新發(fā)布sso程序,從門(mén)戶認(rèn)證成功后,等待60秒過(guò)后,再次刷新門(mén)戶系統(tǒng),發(fā)現(xiàn)果然到sso登錄界面。重復(fù)實(shí)現(xiàn)多次發(fā)現(xiàn)都時(shí)一樣。由此可以得出,由于門(mén)戶使用的TGT失效,并沒(méi)有檢查gateway參數(shù)因此跳轉(zhuǎn)到sso的登錄界面。

3. 解決方案:只需在action-state 節(jié)點(diǎn)中增加對(duì)gateway參數(shù)的檢查邏輯,根據(jù)檢查的結(jié)果到不同的節(jié)點(diǎn)即可。新的流程圖如下:

在上圖中增加節(jié)點(diǎn) “terminateSession”的 條件為“gateway”的transition,當(dāng)請(qǐng)求中存在gateway參數(shù)時(shí),讓流程到gatewayRequestCheck節(jié)點(diǎn)。

代碼:

        final HttpServletResponse response = WebUtils.getHttpServletResponse(context);
        this.ticketGrantingTicketCookieGenerator.removeCookie(response);
        this.warnCookieGenerator.removeCookie(response);
        
        /**
         * 檢查gateway參數(shù),如果為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);

本地重新編譯測(cè)試后發(fā)現(xiàn)可正常跳轉(zhuǎn)回門(mén)戶登錄界面。將TGT的存活時(shí)間恢復(fù)默認(rèn)值,發(fā)布到線上后,留意一段時(shí)間,發(fā)現(xiàn)沒(méi)有出現(xiàn)改問(wèn)題,至此解決問(wèn)題。

總結(jié):

sso login-webflow 登錄流程較為復(fù)雜,出現(xiàn)問(wèn)題時(shí),應(yīng)該根據(jù)登錄流程圖分析判斷問(wèn)題出現(xiàn)在哪些節(jié)點(diǎn)上,然后修改相關(guān)參數(shù)重現(xiàn)問(wèn)題,之后修改相關(guān)邏輯驗(yàn)證以及解決問(wèn)題。

相關(guān)文章

  • SpringBoot如何實(shí)現(xiàn)各種參數(shù)校驗(yàn)

    SpringBoot如何實(shí)現(xiàn)各種參數(shù)校驗(yàn)

    文章詳細(xì)介紹了SpringValidation的使用,包括簡(jiǎn)單使用、requestBody參數(shù)校驗(yàn)、requestParam/PathVariable參數(shù)校驗(yàn)、統(tǒng)一異常處理、分組校驗(yàn)、嵌套校驗(yàn)、集合校驗(yàn)、自定義校驗(yàn)、編程式校驗(yàn)、快速失敗、@Valid和@Validated的區(qū)別以及實(shí)現(xiàn)原理
    2024-12-12
  • Java拷貝數(shù)組方法Arrays.copyOf()是地址傳遞的證明實(shí)例

    Java拷貝數(shù)組方法Arrays.copyOf()是地址傳遞的證明實(shí)例

    今天小編就為大家分享一篇關(guān)于Java拷貝數(shù)組方法Arrays.copyOf()是地址傳遞的證明實(shí)例,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-10-10
  • Java中對(duì)象的克隆詳解

    Java中對(duì)象的克隆詳解

    這篇文章主要介紹了Java中對(duì)象的克隆詳解,Java中對(duì)象的復(fù)制分為淺復(fù)制與深復(fù)制的不同之處就在于深復(fù)制還會(huì)復(fù)制對(duì)象的引用對(duì)象,需要的朋友可以參考下
    2023-08-08
  • Java之String字符串在JVM中的存儲(chǔ)及其內(nèi)存地址的問(wèn)題

    Java之String字符串在JVM中的存儲(chǔ)及其內(nèi)存地址的問(wèn)題

    這篇文章主要介紹了Java之String字符串在JVM中的存儲(chǔ)及其內(nèi)存地址的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Java中Runnable與Callable接口的區(qū)別詳解

    Java中Runnable與Callable接口的區(qū)別詳解

    這篇文章主要為大家詳細(xì)介紹了Java中Runnable與Callable接口的區(qū)別,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Java有一定的幫助,需要的可以參考一下
    2023-03-03
  • 解決idea找不到setting.xml文件的問(wèn)題

    解決idea找不到setting.xml文件的問(wèn)題

    這篇文章主要介紹了解決idea找不到setting.xml文件的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • redis深入淺出分布式鎖實(shí)現(xiàn)上篇

    redis深入淺出分布式鎖實(shí)現(xiàn)上篇

    在單體應(yīng)用中,如果我們對(duì)共享數(shù)據(jù)不進(jìn)行加鎖操作,會(huì)出現(xiàn)數(shù)據(jù)一致性問(wèn)題,我們的解決辦法通常是加鎖。下面我們一起聊聊使用redis來(lái)實(shí)現(xiàn)分布式鎖
    2022-08-08
  • 詳解Java線程池如何實(shí)現(xiàn)優(yōu)雅退出

    詳解Java線程池如何實(shí)現(xiàn)優(yōu)雅退出

    這篇文章我們將從源碼角度深度解析線程池是如何優(yōu)雅的退出程序的,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)java線程池有一定幫助,需要的可以參考一下
    2022-07-07
  • 基于Java實(shí)現(xiàn)無(wú)向環(huán)和有向環(huán)的檢測(cè)

    基于Java實(shí)現(xiàn)無(wú)向環(huán)和有向環(huán)的檢測(cè)

    這篇文章主要介紹了如何在?Java?中實(shí)現(xiàn)無(wú)向環(huán)和有向環(huán)的檢測(cè),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Java有一定的幫助,需要的可以參考一下
    2022-04-04
  • Java中策略設(shè)計(jì)模式的實(shí)現(xiàn)及應(yīng)用場(chǎng)景

    Java中策略設(shè)計(jì)模式的實(shí)現(xiàn)及應(yīng)用場(chǎng)景

    策略設(shè)計(jì)模式是Java中一種常用的設(shè)計(jì)模式,它通過(guò)定義一系列算法并將其封裝成獨(dú)立的策略類,從而使得算法可以在不影響客戶端的情況下隨時(shí)切換。策略設(shè)計(jì)模式主要應(yīng)用于系統(tǒng)中存在多種相似的算法、需要靈活調(diào)整算法邏輯或者需要擴(kuò)展新的算法等場(chǎng)景
    2023-04-04

最新評(píng)論

乐山市| 隆安县| 江门市| 通化县| 永安市| 江永县| 永宁县| 鄂尔多斯市| SHOW| 司法| 定安县| 彭山县| 分宜县| 巢湖市| 徐汇区| 河南省| 林甸县| 新民市| 德保县| 桐乡市| 高雄市| 小金县| 建宁县| 贡山| 盐池县| 云安县| 临城县| 道真| 南部县| 乌鲁木齐市| 麟游县| 墨竹工卡县| 旬邑县| 嘉善县| 祥云县| 北宁市| 平武县| 延寿县| 南岸区| 抚顺县| 丽水市|