【CAS-Server】CAS中webflow的execution产生

CAS中exection的key产生类

spring-webflow框架中,请求一个已有的流程必须要指定execution才可以正确返回该flow现在都到哪一Step了。所以参数execution对于flow来说非常重要,就类似于session存在前端的cookie中的session id信息一样,如果没有这个值的话,那又只能重新开启一个新的flow了。

spring-webflowexecution产生由FlowExecutionKeyFactory接口定义。在CAS-Server中重新定义了execution的产生算法.具体的实现类由org.apereo.cas.web.flow.executor.ClientFlowExecutionRepository完成。execution对应的实体接口FlowExecutionKey。在CAS_Server中采用ClientFlowExecutionKey类。 toString之后的格式默认是

private static final String KEY_FORMAT = "<uuid>_<base64-encoded-flow-state>";

所以产生的execution的值比较长,基本长下面这个样子:

553360a0-1327-47a0-8b89-cc205d9aa615_ZXlKaGJHY2lPaUpJVXpVeE1pSXNJblI1Y0NJNklrcFhWQ0o5LlBEMi01TkswR0xaV0toOVVGRklRbWcxSEpnTTRqWENNdGEyNzhyREd6YzctZzQxX3hLNGpBTlc1RlJfVUhkMk9LSWN6NGxScFNiSTNQbEZManFBamJxWENtSmJDa0h2MFNvQm9TeHEyQVZJaVJyeTNwLUE5YXpHTGI1SmlqTjB5bFFWa0I4MjJqa0QtVFFpSExNWkJ2YzZjMjMwc3BzeG5VNjNBNnZNRzllc2F5cEhEczlOcEVnSVRkcFAyRXdja3FvNUFvM185QmswbllRRWkwMFpWYkxnOVVsM1hGU1R2Z1hNLTFCMnczdWNQQ3lzdnhZS3VuemNIck56WEN4cFptVDQ3aUkta1BwcU1DZDNfUGVkU3l6UzVrMG9hTDd4NV9ESVlidVlEczNCeTdtMkF1czJHNVdtV1NTbDZfeFlfTjQ5VDZwb3JNbjlsVFpyalVxS3Q3aUJHekpSTGtCcHQxNnY1UFJMbUg0cTRnZXlXTXczUWpFbWZVLXFzeUZoUHhhdzRRR21nakN0WXpsSkJuSVlDUVBJUmdiaVR6QkRjcVZKamNXaE8zdW92YTJfdUVPOWxJeHlPVVU4NDlFS01qakVFeEJZNzYyanFRdklVc1MtYXBIbUhJYm55Uk5CWFI0UGY0c096VjR1ZjE5c0tsOUtGdF8zT29aZy0tcG5NS2hQeDVCTkxZUWdLbFdLQUZ6dzJBLV9WMEpsRTZRR1I3a09GOUl3XzZTY3V2MzVJM1paS3l3cWx4a0t0d1JIOVBZUzl4WTFuUEtWVndIVDVRaFY1WUdmZGV5VjN3bWpUMnBxWVpiYjFLTGQ3Q29XOG1aS1UxakVuMTRuQzhERjBOVDA3WG1Sbmp4VkUtZGpjVVdoMHJIR0picmJscDFNc29qR0NEZHRjcGttSi01OGdyLUh4UG9wcldfaXlCcHdVaUNXcW5MTjlzSVlhQ2pQcVVzYnROa0l0RVV3dGRVNWxmOEZWb1B5SnJJU3JjN3RRRnR6N2pldjh0TW1QTVFCRzQ1UkExQUdVYWtneE95SlJYQk00WHp2NmpvTEVBT0FZX3NteVp6TkJTdWM3LTRORzNpV1ZfNUV5NUQxUEtzTWR6UHNXMkw1M0Z2U00yYmg0VHhWQUJoakduOUx5eWJfQ2pXRnRydmNyS2Fyc0lKa1YyX0FNWXNRQlc2c2ZOUS1SY1dESWpoSE9RakM3am9NQTVlQi0wRmJtNUMtNDNGYnhtV1NWYlByLWxZMHM1dTZKX0R0bEFqdlhrTkN5a3lacUN5UDE3eXBpTERwQkx2RTRCSHBVenlTY212SVFoNEdWdlJ2emhpRDNrNlJINXpfUDFaSHBscGIwZEJadnVadkhQdWVnUXVDSmswLUJvTXBlRXA1cDVHV2dFVWZwUHk0aE4wX2RNcjBNcFZQRExzcm5lc2pFTGFqZC1hX0NlQUc5ZzlST0hBWGVSdzQxekRXa1dERF9qVGtxUzMzalJhb1l2MzdMcHJMMW03MEU4RG1Fb0UtdTRLU005VlNtb1AtOHlITE10cTBHRzhWQ3JfZFdCUHBiSW1BVTdLM3FqOEk3V2NLNXlQelhrZDY3cjZ1V3NCbGJhQUpkNlI2dTZQZE80LU84eWNLOUNManhWWHFNVm5hMXc0cFpDRkF3UHZZaW4xelJ6MjVNMjU1TVdaT2ZKbUF1alAzdkE3bEViek1IYnMzRzVqcEJsRXNDQUpsUWtnek1qdDRneGx2ZEoteXg0WGFyQm9QeFg3djZSeXFBZUpyNU5vNzRBbzB4al81UnU4c2xYS0MtNUFnYVJqMnNnSjZob2xzR0d2WXF4N2E0TW05RjlYcnZ3VWc3NlQwRkhtY0tiVzdPaFJyNlpLWmh6YU9iRzUtazlnemlKNER0SVVfMGVKRkVOZTZZTFg4bmlWQWVvaXRtMF9lTHNRTjN0U1NudzlUbl9kY044Q1BpaU1YUDZpSHo2d1JkOUNjTEVqUTV5VVhpYXJSbXNIanM1VVdOSDJ1Zm4wR1lTMHg3VVZoWHNrM04xcXZoRGlrX2RYbW1jWWN4QlBOOVZqZU5od0V5T2NJaDhucl93dmV4Z2txTTNIUTR5Q1RNalU5VUlCRUYzRjg0bHhQbldVWjg0eEdpZ05OeXp4cWhFbUhPRF9uUzJjd2QxQ2RZelpITDhxUTlwMmFHRk9Ocloxc2w1V1BiQlZndHBHZGVCU0hkNXNyZlE3NEJ0YVJSNDlpc0FZcWpNa1FxVlZKa0gydE1QN2Q0UU9ZWFFEdVFFc3p0WDB6Z3d0bkw0R2NZa0QzTEo1TGZKN2VxZmdOdlpTakhXQTFienV2Tkp6YjlZckhwTGZoUUVVRUZNS2FvZldubkxlZU1uUVhkY1BEZ09EczNDM21SYXo5OG1kZE5QZjN5a202dUszbEt4NGlqUlM5MUdHSl9ocGtKcHpzb2lNR0RMUGpWTmt1YWxIQ0JxN1V1WEtGaElSX19YZW5yYlNqZkdBYXZRWUNSSGQ0YmZNaUp4ODFTY1dyQ3hrOENucWJPR1JhaEhQeTJ1VGVhMUU2SW5MUVQzSk84Z3JTUVlTa0NfZ2w3dTRETHhBV1BlcHV3MEF4ZUFleTdwMkNWWnl5RVhqUkFFTjlEaGdqam42VERYa0Y3VHJVYjlaM3NGbEx0cS1PRFFZUk50N3kyTWF4UnVlYnJpNC1sZ0luZ2tTdkxDR2gzVlg4SWhfM0JKSUR2S3M1WTRicGhkclRxLVhSV2JMdGpybXpjOWtJaURSeU9hb3UyZ1RuR09sQkdyRGkxeDFSXzE4eUdIWU55X1h0NkdpdUtwLWlkNXRDTV9oby1jR0FZbEFwRldKWEpGUXN6RmtZeFRiQzV6ckp6aEoxb0NzaDRobGJ0T0xtaF81V0Zxa2JPbVJVeGtwN2Rzc3l4V0FkNXZEQ21IQ3Zhak5FcDJUeFg3WW12X3JUNTZzeXdLUVg1WWhwVEw1aTE1X3YwVmFLUEtzNi1fRm9jTTY1bnZoNmZGSF9jdVRiTHdmN001SS05RmZFdmVhcEQ5SFhmUzVZVy0tZmxWU1RmcHlZRDIxbGZMdWs3RDBQd25zUUttQjEwSVdLVE5YbV9OWmRQRk9NUFFfbm1vNzVWcmZHaWYtTjVoZTdTZjdyYVRaSnpJNzh3dENQWDRnWjZSY3NwVG1BNWtVN2liQXVTNExuU2hUV1U0ZEUwZDgtdTl1eUZodGRiaFJJX0pmbmpYaGNBRHRoNkZRbHN3ZkZZQVYtNUcwTFdXQlpwck40WWRNWEphc1lCTy1YNFU1YlhzRUhiRVROaGZSSGZEbmpBR3dSUEFNQzE0TjRRd0hiRFUyc1BNeHNzcVRmekdZalFVVlN4YnNHd29FbUZaMV9kTDFvdXhvTlczZ1pMSHgxc3Y4VUh4YXo1bHVDaUhXTWJKUTU1RFdCY2pmaHBqVHNKdnI0LUFCMnN1UGV0V2Y3SDgyUWZITjNOTFBfTDczR0stRGswY0U1MXVfS3J0UVY1aFlsR1RGNDhiMjM3QzZydlRoc2xqSlp6LURXRXp3S295Y3dGdmZYaXM2LUlENmx6d1J5QUR3Wk40LU1XWWJCS3VIR1Bsdy1KbXF0VXBkOFNLRVBNblVJLTRPSlRqbzM4MVotSzNkUHVJc0dVeFhCVjJMYkxnUnJneHR0LWpOV2pGS0xJeFExRmdzcTBWSWdETjhuZ1Axb3dyYlMxSWtTSzBKSzJHWHBHY1N6MXA3enctV1lOVmFydFJRWXpxbm9HallSeUVqOWtBVmkwVklVazExNWsyQjcwejlqeEZTclZzeVA5U2NlUmJNTWg4X3preGxHYXc0OU15OXkxSW9FZllWN0lNWU1NLVhUNXduNDhtdzBEdUpGUXBLX2NmT3Exd1drOHlHUWp5OU9ldnRfVFBQdExCZWt0XzdlUE4tSktrODI5Rm1LbkQ3eDRfaEtmcHVzUXNmZjR4MC1uSVo5a3g1ajVWSnB4ZVJiZUVBVzlLN1VnZVlpMHhxRVMxRGZJTU5pcGloYXBYUWtIMnFxTjZIOExrUmFNbHQxbkJtMkdnU1Q5VmVpRXR0d3ViZ2RIT0tmZWRybFUzQ0dMNWx2eW04dDNheGRzbE9zN2FCbW5fZTZjUHZuRnFDV3dGdWNXTWU4VHZSLUp6c3FycThKb2FMdWl0My03REdFU1k2WVBibzVreUs4WmxxeW5KUEdaTjR6VVRJQU5ESjVGQUREVUdkeWdpNVVnVkdoNG00d2V4T1lCQXRoVmhYLUQyUkRud3dKd3RxSGZzWXpRVkM4RFgwWENHaHl4b21adnBhdDNUTTVycG1PUmZxbGlZeW54b0IwaVRKR3Q1QkEtaTZHSlZlYmNHblZqRWM1TUlPLWRSdm1SeTJlWl9OMmFVQjEwVlhfSVNqd2o0Y3M4VUZvMV80akxyYi1jS1J2WXZZMy1mdFN4VnQxQ0hEbVphdUdCZUFQWlZWQkM0WHpFMHBYWlRZRFZWNUkybmJfclMwSzdScDR5ZVNmWjlUY211a2FZWjgzeTdPV3VKYjBvbkxnY2F1ODE5ZmhxaWl1UWp4UmFOaXZHV1FHYTB1TjE4SUpPS0xJZURvSnQ5VFNvMjRJbmVSa2VuOUlNXzJDblJ2UEdrT3RKX1NXcDhqa0FSVGczTEhYel80R1VFOUdJdnh4YzdLanh6SXhmNV92NzdPTks3dzN3Ympuc1BqWm1kUzh0c3dpSy13cGVKTDhsLXFqX2FMZTNmMWRUV1kyNm5mSGtDek1XNE9qLXBRUVJEcWNoVjAzME5WUHdNY2xkWjFRcDI4bFVDbFdTSlF2VFVHRzNqaWkwSFNZOHcyQmFBYmRkZ2J6bzdMZUZTajhaSHNPcHlyR09HQUF0bjlpQU5kUGxndEhfZ3dpdlE5dHdycjN6ZllaejQ1MnlXQ1Qyb1VuNldDZFlHSjRxUjhQbWNEeUJ6eDI3TVQ2UENtR3p0R2FGZmNmYS56ZUZpM25CNmJEc2FMRkcxNk94eVRLcGJpVWdzeVBCa3RRYk0zTVhONnhpNHlYNHE3LWRxaGwtbl93ZVBhVDNlTzNlbzVFZUV3dDZwMWNVdG4yZXM5dw==

Cas-Server是如何把这个配置进去的

CAS的配置类为CasWebflowContextConfiguration ,在该类中定义流程时会使用FlowExecutor


    @RefreshScope
    @Bean
    @Lazy(false)
    public FlowExecutor loginFlowExecutor() {
        val factory = new WebflowExecutorFactory(casProperties.getWebflow(),
            loginFlowRegistry(), this.webflowCipherExecutor.getObject(),
            FLOW_EXECUTION_LISTENERS);

        return factory.build();
    }

WebflowExecutorFactory中的方法buildFlowExecutorViaClientFlowExecution会使用到ClientFlowExecutionRepository类。该类具有获取executionkey的功能.

    @Override
    public FlowExecutionKey getKey(final FlowExecution execution) {
        try {
            return new ClientFlowExecutionKey(
            	this.transcoder.encode(
            		new SerializedFlowExecutionState(execution)
            	)
            );
        } catch (final Exception e) {
            throw new ClientFlowExecutionRepositoryException("Error encoding flow execution", e);
        }
    }

综上,这里面的几个关键类:

  1. CasWebflowContextConfiguration
  2. WebflowExecutorFactory
  3. FlowExecutor
  4. ClientFlowExecutionRepository
  5. ClientFlowExecutionKey
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值