公司項目集成了第三方的單點登錄 實際上使用的還是cas 只不過他們做了進一步的封裝 集成中總共發現如下問題
1.springboot加載第三方過濾器問題
傳統方式時放在web.xml中 由於springboot並沒有web.xml 所以採用代碼方式進行加載
@Configuration public class UcfilterConfig { @Bean public FilterRegistrationBean ssoFilter() throws IOException { //創建 過濾器註冊bean FilterRegistrationBean registrationBean = new FilterRegistrationBean(); FilterChainProxy filterChainProxy = new FilterChainProxy(); registrationBean.setFilter(filterChainProxy); List urls = new ArrayList(); urls.add("/*"); //給所有請求加過濾器 //設置 有效url registrationBean.setUrlPatterns(urls); Map<String, String> initParameters=new HashMap<>(); initParameters.put("uc-config",this.getClass().getClassLoader().getResource("uc-client.properties").getPath()); initParameters.put("timeOut","30"); registrationBean.setInitParameters(initParameters); return registrationBean; } }
2.讀取文件問題
Springboot打成jar後運行 使用如下方式會拋異常 讀取不到配置文件
this.getClass().getClassLoader().getResource("uc-client.properties").getPath()
所以換了種寫法 在linux主機生成臨時文件讀取
// 臨時目錄
String tempPath =System.getProperty("java.io.tmpdir") +"/"+ System.currentTimeMillis()+"uc-client.properties";
File f = new File(tempPath);
logger.info("uc-client.properties臨時存儲路徑" + tempPath);
IOUtils.copy(resource.getInputStream(),new FileOutputStream(f));
f.getAbsolutePath()即可獲取到
@Configuration public class UcfilterConfig { private Logger logger = LogManager.getLogger(UcfilterConfig.class); @Bean public FilterRegistrationBean ssoFilter() throws IOException { //創建 過濾器註冊bean FilterRegistrationBean registrationBean = new FilterRegistrationBean(); FilterChainProxy filterChainProxy = new FilterChainProxy(); registrationBean.setFilter(filterChainProxy); List urls = new ArrayList(); urls.add("/*"); //給所有請求加過濾器 //設置 有效url registrationBean.setUrlPatterns(urls); ClassPathResource resource = new ClassPathResource("uc-client.properties"); // 臨時目錄 String tempPath =System.getProperty("java.io.tmpdir") +"/"+ System.currentTimeMillis()+"uc-client.properties"; File f = new File(tempPath); logger.info("uc-client.properties臨時存儲路徑" + tempPath); IOUtils.copy(resource.getInputStream(),new FileOutputStream(f)); Map<String, String> initParameters=new HashMap<>(); initParameters.put("uc-config",f.getAbsolutePath()); initParameters.put("timeOut","30"); registrationBean.setInitParameters(initParameters); return registrationBean; } }
2 toekn問題
採用
window.location.href="http://61.190.70.197:8800/uccp-server/login?service=http://127.0.0.1:24001/talent/index.html時 雖然登錄後可以回跳成功 但是無法獲取到token信息 後使用接口重定向方法解決 猜測是走後臺接口重定向 會攜帶ticket參數被攔截器獲取到 而前臺地址攜帶ticket 後臺並未獲取 進行驗證操作
window.location.href="http://61.190.70.197:8800/uccp-server/login?service=http://127.0.0.1:8001/rest/redirectIndex
3測試環境集成問題
本地集成測試完畢 在測試環境會出現登錄回跳 連接超時問題 經與第三方人員溝通 初步確認 配置文件中的接口地址爲他們的外網地址 而測試環境不通外網 造成重定向後臺接口 被攔截器截取驗證ticket連接驗證接口失敗 導致連接超時 待進一步驗證