入職一家初創公司第一周的血與淚
也可用于面試題:
你在作業中遇到過哪些難題?你都是怎么解決的?
問題:Springboot在Window與Linux中圖片回顯不出來
小程式后臺管理系統,學員頁面,學員編輯資訊時,頭像上傳提示成功后,沒有回顯出來,回傳的用戶頭像圖片地址也是404,而且還要實作不登錄的情況下,可以訪問到圖片資源,然后這個問題也是改了兩天天,
處理程序:
第一天,想看后臺報錯日志,但是服務器連接不上去,因為這個服務器是只有內網才能訪問,外部訪問需要借助他們提供的VPN工具,用賬號密碼登錄,還要發送短信后,才能進去里面的堡壘機,然后再在這個堡壘機平臺上設定我們本地的ssh和ftp工具的本地地址,進行連接和傳輸檔案,然后我的電腦是前同事剛剛刷機后的機子,前面用的是linux的系統,刷成了WIN10給我,我自己重新又搭了一套環境,然后第一天就是堡壘機平臺登錄上去,本地的ssh、ftp工具一直調不起來,連接不上內網服務器,而且用戶也一直在催,也是搞到凌晨一點半
第二天,請教醫院提供這個VNP的技術,說這個VPN工具是基于IE內核開發的,只能用IE瀏覽器,然后還是調不起來ssh工具,后面換了一臺電腦嘗試,是可以的,是我的電腦問題,開始正式排查,日志里面是沒有報錯的,上傳圖片后地址也是回傳的,就是報的404,沒有這個資源,然后我們就開始改Nginx的組態檔,考慮是不是配置路徑的問題,中午還來了個被老板叫來幫忙的之前已經面過試的人過來幫忙,也沒幫上什么忙,只能自己想辦法,最后是在晚上凌晨開始陸續解決問題,四點鐘到的家,花了半個小時總結,
最后解決:映射與Shiro攔截
是找資料,發現需要在Spring的一個ResourcesConfig.java檔案中,可以重寫addResourceHandlers()方法,然后在里面加一個訪問引數,用于映射本地路徑的配置,這樣他就可以訪問到本地的圖片了,
代碼塊一,如下所示:
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
/** 圖片訪問映射地址 Linux*/
// registry.addResourceHandler("/home/img/**").addResourceLocations("file:/home/img/");
/** 圖片訪問映射地址 Window*/
registry.addResourceHandler("/home/img/**").addResourceLocations("file:D:/dev/");
}
還有一個問題是,如果我們在沒有登錄的情況下,去訪問圖片的介面地址時,是會被重定向到登錄頁面的,但圖片一般是不用登錄,就可以直接用連接訪問的,然后我發現他用是Shiro,有個ShiroConfig.java的檔案,在里面配置一下可以直接訪問的引數路徑就行了,代碼塊一第六行配置對應代碼塊二的第十六行配置,
代碼塊二,如下所示:
/**
* Shiro過濾器配置
*/
@Bean
public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) {
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
// Shiro的核心安全介面,這個屬性是必須的
shiroFilterFactoryBean.setSecurityManager(securityManager);
// 身份認證失敗,則跳轉到登錄頁面的配置
shiroFilterFactoryBean.setLoginUrl(loginUrl);
// 權限認證失敗,則跳轉到指定頁面
shiroFilterFactoryBean.setUnauthorizedUrl(unauthorizedUrl);
// Shiro連接約束配置,即過濾鏈的定義
LinkedHashMap<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
// 對靜態資源設定匿名訪問
filterChainDefinitionMap.put("/home/img/**" , "anon");
filterChainDefinitionMap.put("/favicon.ico**" , "anon");
filterChainDefinitionMap.put("/ruoyi.png**" , "anon");
filterChainDefinitionMap.put("/login.png**" , "anon");
filterChainDefinitionMap.put("/IMvideo/**" , "anon");
filterChainDefinitionMap.put("/css/**" , "anon");
filterChainDefinitionMap.put("/docs/**" , "anon");
filterChainDefinitionMap.put("/fonts/**" , "anon");
filterChainDefinitionMap.put("/img/**" , "anon");
filterChainDefinitionMap.put("/ajax/**" , "anon");
filterChainDefinitionMap.put("/js/**" , "anon");
filterChainDefinitionMap.put("/ruoyi/**" , "anon");
filterChainDefinitionMap.put("/captcha/captchaImage**" , "anon");
// 退出 logout地址,shiro去清除session
filterChainDefinitionMap.put("/logout" , "logout");
// 不需要攔截的訪問
filterChainDefinitionMap.put("/system/file/**" , "anon,captchaValidate");
filterChainDefinitionMap.put("/login" , "anon,captchaValidate");
filterChainDefinitionMap.put("/system/SzjjCurriculum/idQuertUserCurriculum" , "anon,captchaValidate");
filterChainDefinitionMap.put("/wx/minproject/**" , "anon,captchaValidate");
filterChainDefinitionMap.put("/wx/getopenid/**" , "anon,captchaValidate");
filterChainDefinitionMap.put("/wx/im/**" , "anon,captchaValidate");
filterChainDefinitionMap.put("/wx/model/**" , "anon,captchaValidate");
filterChainDefinitionMap.put("/wx/guard/**" , "anon,captchaValidate");
// 系統權限串列
// filterChainDefinitionMap.putAll(SpringUtils.getBean(IMenuService.class).selectPermsAll());
Map<String, Filter> filters = new LinkedHashMap<String, Filter>();
filters.put("onlineSession" , onlineSessionFilter());
filters.put("syncOnlineSession" , syncOnlineSessionFilter());
filters.put("captchaValidate" , captchaValidateFilter());
filters.put("kickout" , kickoutSessionFilter());
// 注銷成功,則跳轉到指定頁面
filters.put("logout" , logoutFilter());
shiroFilterFactoryBean.setFilters(filters);
// 所有請求需要認證
filterChainDefinitionMap.put("/**" , "user,kickout,onlineSession,syncOnlineSession");
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
return shiroFilterFactoryBean;
}
注意:上傳路徑
上面兩個代碼塊只是用于映射路徑和訪問權限的配置,還有一個需要注意的是,“回傳的用戶頭像圖片地址也是404”,這個問題排查思路是:
1、首先是排查,圖片有沒有上傳成功,服務器或者本地磁盤有沒有這個圖片,
2、沒有的話,是不是路徑有問題,上傳的路徑有問題,路徑推薦用絕對路徑:例如:“D:/imges/“,一下其中一條用戶資料的頭像地址變成了這樣:
3、檔案確認是上傳成功后,訪問圖片地址還是404,那就需要排查,這個用戶資訊中的圖片地址是不是正確的,有可能是這樣的:http://localhost:8099D:/imges/20211023165144/47e84d7a-7bb1-47d7-8e69-6b57148c96ee.jpg,
4、其中的“D:/imges/” 是圖片存放的實際地址,發現也被拼到圖片訪問地址中去啦,
這種問題,我們就需要呼叫介面來debug除錯了,也可以著重看是不是編輯用戶資訊時,選擇完照片上傳后,點擊保存,保存的時候,拼錯啦,
5、正確做法應該是,這個路徑中,”D:/imges/“,這個拼接的引數,實際應該是需要和代碼塊一的圖片訪問映射地址對應上的,正確拼法應該是:
http://localhost:8099/home/img/20211023165144/47e84d7a-7bb1-47d7-8e69-6b57148c96ee.jpg,
6、到這里可能還是會有疑惑,一個是實際存放圖片的地址,一個是域名引數,這個兩個東西,我在上傳頭像點擊保存后,具體怎么配置呢?很簡單,兩點,第一是用戶在編輯頁面的時候,點擊圖片 > 選擇圖片 > 確定上傳圖片后,后端需要將圖片存盤到實際的目錄地址下,然后回傳給前端一個拼接了域名引數的圖片地址(可以著重對比第三點和第五點的兩個地址),用戶點擊保存后,到資料的資訊,
學到的經驗:面對經驗要放松,冷靜、適當逃離壓力區
這個問題實際上是挺簡單的,也就是 一個域名引數與Shiro攔截的問題,處理了兩天,主要的問題是抗壓能力的問題,什么是抗壓能力呢?我覺得是在客戶、老板、上級、同事給到任務進度提醒或者作業質量問題的時候,能夠較好的立馬改成處理好,
那么,我現在就是沒有處理好,我面對這種問題的時候,表現的是無助、無奈、甚至是有點自我放棄的想法與心態,還好自己是堅持了下來,這一點非常好,那么,我現在把這個問題處理了,我下次應該怎么處理呢?第一點就是,接手到問題的時候,應該將問題分析清楚,具體包括、問題的具體展現,是什么錯?正常應該是什么樣的?那么不正常的時候、大概是哪一步不正常,盡量分析清楚再進行排查,第二步、就是實際排查,一般都是做了什么操作然后才會造成什么樣的問題,那么就在本地重現問題,然后改好問題,本地重現不了,那么肯定是資料或者環境問題,再逐一排查就行,就這兩步,
其中排查問題的時候,最容易出現的問題,就是以上我出現的問題,無助、無奈、自我放棄,遇到這種情況最好的辦法是,不要一直坐在電腦顯示屏前,苦思冥想,或者到處尋思問診,我覺得最好的辦法是,逃離這個壓力區,去上個洗手間,然后去個陽臺吹吹風,好好縷一縷,是不是排查思路的問題,現在定位的問題點是不是定位錯啦、沒有錯的話,除了現在已經想到的辦法,還有沒有其他立刻可以改好的方案,線上bug,最重要的肯定是效率,思路盡量捋清楚后,再回去接著干,還有就是不要加班到太晚,一個問題如果是停留了一個小時之久,一定是思路問題,加班也是沒用的,還不如回去路上想一想,第二天養好精力再干,當然除了說,領導指定加班干完,不然還是回去吧,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/336239.html
標籤:其他
下一篇:線性表之順序存盤結構(順序表)
