版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
單元6SpringBoot安全控制學(xué)習(xí)目標(biāo)01掌握在SpringBoot項(xiàng)目中使用SpringSecurity的基本方法02運(yùn)用Token實(shí)現(xiàn)權(quán)限認(rèn)證03運(yùn)用SSO實(shí)現(xiàn)單點(diǎn)登錄認(rèn)證04運(yùn)用JWT集成實(shí)現(xiàn)對(duì)信息加密任務(wù)6.1實(shí)現(xiàn)管理員與教職工角色認(rèn)證學(xué)習(xí)目標(biāo)01理解Token的基本概念和工作原理Token是服務(wù)端生成并返回給客戶端的請(qǐng)求操作通行證。用戶首次登錄后,服務(wù)器生成Token并返回給客戶端,作為后續(xù)請(qǐng)求數(shù)據(jù)的通行證。在Token有效期內(nèi),客戶端使用Token訪問服務(wù)器,無需再次驗(yàn)證用戶名和密碼。掌握基于Token的認(rèn)證流程從請(qǐng)求中獲取Token信息。解析Token有效期并判斷其是否仍在有效期內(nèi)。Token過期時(shí)要求用戶重新登錄,更新Token信息。使用結(jié)束后從Redis中刪除用戶Token令牌。了解Token的存儲(chǔ)和刪除利用Redis等緩存數(shù)據(jù)庫存儲(chǔ)Token,便于讀取和更新。用戶注銷或Token過期時(shí),從Redis中刪除Token令牌,確保系統(tǒng)安全。培養(yǎng)運(yùn)用Token實(shí)現(xiàn)權(quán)限認(rèn)證的技能理解SSO的基本概念和工作原理SSO(SingleSignOn)是一種用戶只需一次登錄,即可訪問多個(gè)關(guān)聯(lián)系統(tǒng)的功能。主要流程包括:獲取ticket令牌、從令牌獲取用戶名、判斷用戶名是否為error、判斷用戶名是否存在、判斷用戶對(duì)象是否存在、生成Token并創(chuàng)建cookie。培養(yǎng)運(yùn)用SSO實(shí)現(xiàn)單點(diǎn)登錄認(rèn)證的技能03用戶在一個(gè)系統(tǒng)登錄成功后,該系統(tǒng)生成并返回唯一的Ticket令牌給客戶端。01掌握SSO認(rèn)證的實(shí)現(xiàn)方法02各系統(tǒng)共享一個(gè)統(tǒng)一的Ticket令牌。培養(yǎng)運(yùn)用SSO實(shí)現(xiàn)單點(diǎn)登錄認(rèn)證的技能客戶端在訪問其他系統(tǒng)時(shí),將Ticket令牌攜帶在請(qǐng)求中。其他系統(tǒng)驗(yàn)證Ticket令牌的有效性,通過則允許訪問。了解SSO認(rèn)證的優(yōu)勢和挑戰(zhàn)培養(yǎng)運(yùn)用SSO實(shí)現(xiàn)單點(diǎn)登錄認(rèn)證的技能培養(yǎng)運(yùn)用SSO實(shí)現(xiàn)單點(diǎn)登錄認(rèn)證的技能優(yōu)勢提供統(tǒng)一、便捷的登錄方式,保護(hù)用戶隱私和安全。挑戰(zhàn)需要系統(tǒng)間的協(xié)調(diào)、令牌的唯一性和安全性,以及用戶隱私和數(shù)據(jù)安全問題。理解JWT基本概念和工作原理01JWT是包含頭、有效載荷和簽名的開放標(biāo)準(zhǔn),用于跨域身份認(rèn)證。頭包含元數(shù)據(jù),有效載荷傳遞具體數(shù)據(jù),簽名確保數(shù)據(jù)完整性和安全性。掌握J(rèn)WT生成和驗(yàn)證流程02生成JWT需創(chuàng)建頭、有效載荷,并用指定算法簽名后拼接。驗(yàn)證時(shí),服務(wù)器解析并驗(yàn)證簽名。通過則允許訪問資源。了解JWT的優(yōu)勢和挑戰(zhàn)03JWT優(yōu)勢在于跨域身份認(rèn)證和數(shù)據(jù)加密安全校驗(yàn)。但需考慮有效期、存儲(chǔ)和傳輸安全等挑戰(zhàn)。培養(yǎng)運(yùn)用JWT集成實(shí)現(xiàn)對(duì)信息加密的技能知識(shí)準(zhǔn)備02SpringSecurity簡介要點(diǎn)三強(qiáng)大的認(rèn)證管理SpringSecurity提供了多種認(rèn)證方式,包括基于表單的登錄、基于HTTPBasic的登錄、基于LDAP的登錄等。同時(shí),它還支持多種用戶信息存儲(chǔ)方式,包括從數(shù)據(jù)庫、LDAP服務(wù)器等獲取用戶信息。0102精細(xì)的授權(quán)管理SpringSecurity提供了靈活的授權(quán)管理機(jī)制,可以通過角色、權(quán)限等方式對(duì)用戶進(jìn)行授權(quán)。同時(shí),它還支持面向方面的權(quán)限控制,可以對(duì)不同的請(qǐng)求進(jìn)行不同的權(quán)限控制。完善的安全特性SpringSecurity還提供了其他安全特性,如CSRF防護(hù)、HTTP請(qǐng)求頭校驗(yàn)等,可以保護(hù)應(yīng)用程序免受攻擊和濫用。03SpringSecurity的功能與SpringMVC的集成SpringSecurity可以與SpringMVC框架無縫集成,通過注解和配置的方式,輕松實(shí)現(xiàn)安全認(rèn)證和授權(quán)管理。與SpringBoot的集成SpringBoot是一個(gè)快速構(gòu)建Spring應(yīng)用程序的框架,SpringSecurity可以與SpringBoot完美結(jié)合,提供全面的安全保護(hù)。與SpringCloud的集成SpringCloud是Spring家族中用于構(gòu)建微服務(wù)的框架,SpringSecurity可以與SpringCloud集成,實(shí)現(xiàn)微服務(wù)之間的安全通信和身份認(rèn)證。010203SpringSecurity與Spring框架的集成HTTPSecurity簡介目的:配置Web應(yīng)用中的授權(quán)策略,確定哪些請(qǐng)求需要何種權(quán)限才能訪問。mvcMatchers方法:指定需授權(quán)的Controller方法。例如,`.mvcMatchers("GET","/hello")`將匹配所有到`/hello`的GET請(qǐng)求。權(quán)限設(shè)置:在指定URL或方法后,可調(diào)用`permitAll`允許所有用戶訪問,或`authenticated`只允許已認(rèn)證的用戶訪問。antMatchers方法:通過此方法,可指定需授權(quán)的URL模式。例如,`.antMatchers("/admin/")`將匹配所有以`/admin/`開頭的URL。HTTPSecurity簡介authorizeRequests()功能配置基于表單的登錄方式。loginPage方法用于指定登錄頁面的URL。例如,.loginPage("/login")將登錄頁面設(shè)置為/login。usernameParameter和passwordParameter方法用于指定用戶名和密碼的參數(shù)名。默認(rèn)情況下,用戶名參數(shù)名為username,密碼參數(shù)名為password。登錄方式在配置formLogin后,用戶需通過提交表單的方式登錄系統(tǒng)。HTTPSecurity簡介formLogin()功能配置基于HTTPBasic的認(rèn)證方式。HTTPBasic認(rèn)證一種簡單的認(rèn)證方式,通過在請(qǐng)求頭中發(fā)送用戶名和密碼進(jìn)行認(rèn)證。realmName方法指定領(lǐng)域名,出現(xiàn)在WWW-Authenticate響應(yīng)頭中。用戶登錄配置httpBasic后,用戶需提供用戶名和密碼登錄系統(tǒng)。HTTPSecurity簡介httpBasic()Logout()用于配置和實(shí)現(xiàn)用戶注銷登錄的功能。注銷登錄功能通過`logoutUrl`方法,可以設(shè)定用戶注銷后跳轉(zhuǎn)的URL地址。例如,`.logoutUrl("/logout")`會(huì)將注銷后的跳轉(zhuǎn)地址設(shè)為"/logout"。指定注銷URL使用`deleteCookies`方法,可以設(shè)定在注銷過程中需要?jiǎng)h除的Cookie。例如,`.deleteCookies("JSESSIONID")`會(huì)在用戶注銷時(shí)刪除名為"JSESSIONID"的Cookie。刪除指定Cookie在正確配置了Logout功能后,用戶可以通過訪問之前設(shè)定的注銷URL來執(zhí)行注銷操作。訪問注銷URL進(jìn)行注銷HTTPSecurity簡介Logout()開啟Session管理:通過`sessionManagement`方法。開啟SessionFixation保護(hù):使用`sessionFixationProtection`方法。SpringSecurity管理:配置后,SpringSecurity將管理應(yīng)用中的Session并采取安全措施保護(hù)用戶信息。SessionFixation保護(hù):防止攻擊者利用SessionFixation攻擊竊取用戶信息的安全機(jī)制。用途:配置Session管理策略。HTTPSecurity簡介sessionManagerment()HTTPSecurity簡介01配置“記住我”功能:`rememberMe()`函數(shù)用于配置網(wǎng)站的“記住我”功能,使用戶在下次訪問時(shí)無需重新登錄。02指定Cookie名稱:通過`rememberMeCookieName()`方法,可以自定義“記住我”功能的Cookie名稱,如`.rememberMeCookieName("remember-me")`將設(shè)置Cookie名稱為"remember-me"。03設(shè)置Cookie的HTTPOnly屬性:`rememberMeCookieHttpOnly`屬性用于指定Cookie是否僅用于HTTP請(qǐng)求,不允許通過JavaScript訪問,增強(qiáng)安全性。04用戶登錄時(shí)選擇“記住我”:在用戶登錄時(shí),可以提供“記住我”選項(xiàng),選擇后系統(tǒng)將自動(dòng)記錄用戶信息,實(shí)現(xiàn)下次自動(dòng)登錄。rememberMe()01使用`Csrf()`方法配置CSRF防護(hù)。02CSRF攻擊手段簡介,可能竊取用戶信息或執(zhí)行惡意操作。03通過`csrfTokenRepository`方法指定CSRF令牌存儲(chǔ)策略,如存儲(chǔ)在HttpOnlyCookie中。04可以通過`disabled`方法禁用CSRF防護(hù),但會(huì)降低系統(tǒng)安全性,不推薦使用。HTTPSecurity簡介Csrf()用戶請(qǐng)求控制相關(guān)的主要方法01用于匹配MVC風(fēng)格的請(qǐng)求路徑模式。在SpringSecurity中,可以使用Ant風(fēng)格或MVC風(fēng)格的路徑模式來匹配請(qǐng)求。功能描述02該方法接受一個(gè)字符串參數(shù),表示要匹配的請(qǐng)求路徑模式。例如,`mvcMatchers("/admin/")`將匹配所有以"/admin/"開頭的請(qǐng)求路徑。參數(shù)說明03mvcMatchers還可以與and方法一起使用,以構(gòu)建更復(fù)雜的請(qǐng)求路徑模式。例如,mvcMatchers("/admin/").and().mvcMatchers("/user/")將匹配所有以"/admin/"或"/user/"開頭的請(qǐng)求路徑。與and方法聯(lián)合使用04在使用時(shí),需要關(guān)注路徑模式的精確性和可維護(hù)性。過于具體的路徑模式可能導(dǎo)致不必要的請(qǐng)求路徑被匹配。建議盡可能使用相對(duì)通用的路徑模式。注意事項(xiàng)mvcMatchers(Stringpatterns)主要作用組織多個(gè)路徑模式的匹配關(guān)系,通過鏈?zhǔn)秸{(diào)用,將多個(gè)路徑模式組合成完整的請(qǐng)求路徑模式集合。功能描述and()方法是SpringSecurity中用于連接多個(gè)請(qǐng)求路徑模式的方法,接受mvcMatchers或antMatchers作為參數(shù),返回新的連接對(duì)象,用于繼續(xù)添加路徑模式或認(rèn)證配置。返回值與用法and()方法返回連接對(duì)象,需進(jìn)行鏈?zhǔn)秸{(diào)用,避免直接賦值給非鏈?zhǔn)秸{(diào)用的對(duì)象,以確保表達(dá)式的完整性。and()方法定義anyRequest是SpringSecurity中用于匹配所有請(qǐng)求的方法,無參數(shù),返回一個(gè)特殊匹配器對(duì)象,表示匹配所有請(qǐng)求路徑。全局認(rèn)證策略常用于配置全局的認(rèn)證策略,例如對(duì)所有請(qǐng)求進(jìn)行身份認(rèn)證或授權(quán)處理,可以與認(rèn)證或授權(quán)配置結(jié)合使用。使用策略雖然可以匹配所有請(qǐng)求,但應(yīng)根據(jù)具體業(yè)務(wù)需求確定是否使用。對(duì)于特定請(qǐng)求路徑的認(rèn)證或授權(quán)處理,建議使用更精確的匹配方法,如`mvcMatchers`或`antMatchers`。anyRequest()access方法是SpringSecurity中用于配置訪問控制的方法,接受ACL表達(dá)式作為參數(shù)。access方法可與認(rèn)證配置結(jié)合,實(shí)現(xiàn)基于用戶角色的訪問控制,如access("hasRole('ADMIN')")。ACL表達(dá)式支持復(fù)雜的權(quán)限控制需求,如使用通配符(*)表示任意角色或權(quán)限,或使用逗號(hào)分隔多個(gè)角色或權(quán)限。access(Stringattribute)方法定義hasAnyRole是SpringSecurity中用于匹配具有任意指定角色的用戶的方法。它接受一個(gè)由逗號(hào)分隔的角色列表字符串作為參數(shù)。應(yīng)用場景該方法常與認(rèn)證配置結(jié)合,用于實(shí)現(xiàn)基于用戶角色的訪問控制。例如,`hasAnyRole("ADMIN,USER")`允許ADMIN或USER角色的用戶訪問資源。使用注意事項(xiàng)雖然`hasAnyRole`簡化了角色匹配,但具體使用需根據(jù)業(yè)務(wù)需求。若只需匹配特定角色,建議使用更精確的`hasRole`方法。hasAnyRole(Stringroles)任務(wù)實(shí)施03SpringBoot中使用SpringSecurity的基本流程在pom.xml文件中添加spring-boot-starter-security依賴在perties或application.yml文件中配置spring.security的相關(guān)屬性,例如用戶名、密碼等。添加SpringSecurity依賴010203創(chuàng)建一個(gè)繼承WebSecurityConfigurerAdapter的配置類,該類用于配置SpringSecurity的相關(guān)參數(shù)。在該類中重寫configure方法,用于配置認(rèn)證邏輯、授權(quán)策略等??梢酝ㄟ^@EnableWebSecurity注解啟用SpringSecurity。創(chuàng)建SecurityConfig配置類可以使用http.formLogin()方法配置基于表單的登錄方式,通過http.logout()方法配置注銷登錄的方式。在SecurityConfig配置類中,通過http.authorizeRequests().antMatchers("/login").permitAll()方法配置訪問控制,允許所有用戶訪問登錄頁面。通過http.authorizeRequests().anyRequest().authenticated()方法配置其他請(qǐng)求的訪問控制,要求用戶登錄后才能訪問。配置認(rèn)證邏輯基于Token的認(rèn)證流程簡述
從請(qǐng)求中獲取Token信息客戶端在發(fā)起請(qǐng)求時(shí),需要在請(qǐng)求頭或請(qǐng)求參數(shù)中攜帶Token信息。在服務(wù)器端,我們可以從請(qǐng)求頭或請(qǐng)求參數(shù)中提取Token信息。提取出的Token信息可能是一個(gè)字符串,我們需要將其解析為可讀的格式,例如JSON或XML。根據(jù)用戶身份信息,我們可以在服務(wù)器端的用戶庫中查找該用戶的具體信息,例如用戶名、用戶角色等。如果找到了用戶信息,我們就可以根據(jù)用戶角色和其他信息,判斷該用戶是否有權(quán)訪問請(qǐng)求的資源。在解析Token后,我們可以獲得Token中攜帶的用戶身份信息,例如用戶的唯一標(biāo)識(shí)(如UUID)或用戶名等。從Token中獲取用戶身份信息123Token過期后無效,需拒絕請(qǐng)求并返回錯(cuò)誤信息。驗(yàn)證Token是否過期被篡改的Token同樣無效,需拒絕請(qǐng)求并返回錯(cuò)誤信息。檢查Token是否被篡改若Token有效且未過期,根據(jù)用戶身份信息執(zhí)行相應(yīng)的權(quán)限認(rèn)證操作。執(zhí)行權(quán)限認(rèn)證操作驗(yàn)證Token有效性在驗(yàn)證完令牌的有效性之后,需要在Redis中更新過期的token信息。將現(xiàn)在的系統(tǒng)時(shí)間更新到用戶對(duì)象loginUser中,然后通過將系統(tǒng)現(xiàn)在的時(shí)間,加上令牌有效時(shí)間,計(jì)算出該對(duì)象的令牌下一次失效的時(shí)間。更新過期的token信息用戶使用結(jié)束后,需要從Redis中刪除當(dāng)前用戶的token令牌。從token令牌中獲取用戶的userKey信息,并調(diào)用刪除方法將其刪除。刪除當(dāng)前用戶的token令牌基于SSO的認(rèn)證SSO認(rèn)證的流程為:(1)通過@RequestParam注解,在用戶get請(qǐng)求上獲取ticket令牌(2)通過TokenUtils.roam_check(ticket)方法,從令牌上獲取用戶的用戶名(3)判斷用戶的用戶名是否為error,如果用戶名為error則提示用戶重新登錄(4)判讀用戶的用戶名是否存在,如果用戶名存在,根據(jù)用戶名查找用戶對(duì)象(5)判斷查找的用戶對(duì)象是否存在,如果用戶為空則創(chuàng)建一個(gè)新的用戶對(duì)象(6)根據(jù)查詢到的用戶對(duì)象的用戶名生成Token,并創(chuàng)建cookie,將Token驗(yàn)證放到cookie中基于SSO的認(rèn)證認(rèn)證失敗處理使用AuthenticationFailureHandler接口:在認(rèn)證失敗時(shí),利用SpringSecurity的AuthenticationFailureHandler接口來處理。該接口提供的onAuthenticationFailure方法可用于打印訪問失敗的提示信息。配置SecurityConfig:在SecurityConfig類中,使用authenticationManagerBuilder對(duì)象的.and()方法,通過.authenticationFailureHandler()方法,將自定義的AuthenticationFailureHandler實(shí)現(xiàn)類注入到SpringSecurity中。自定義AuthenticationFailureHandler:在自定義的AuthenticationFailureHandler實(shí)現(xiàn)類中,獲取用戶訪問的頁面地址和認(rèn)證失敗原因,然后打印相應(yīng)的提示信息。打印訪問失敗提示信息自定義認(rèn)證失敗處理類在onAuthenticationFailure方法中,我們可以獲取到用戶想要訪問的頁面地址和認(rèn)證失敗的原因,然后打印出相應(yīng)的提示信息。我們可以創(chuàng)建一個(gè)自定義的認(rèn)證失敗處理類,該類需要實(shí)現(xiàn)AuthenticationFailureHandler接口,并重寫onAuthenticationFailure方法。我們需要在SecurityConfig配置類中,通過authenticationManagerBuilder對(duì)象的.and()方法,調(diào)用.authenticationFailureHandler()方法,將自定義的AuthenticationFailureHandler實(shí)現(xiàn)類注入到SpringSecurity中。在SecurityConfig配置類中,我們可以通過Lambda表達(dá)式來處理認(rèn)證失敗的情況。具體實(shí)現(xiàn)方式是在authenticationManagerBuilder對(duì)象的.and()方法中,調(diào)用.authenticationFailureHandler((request,response,exception)->{...})方法,然后在Lambda表達(dá)式中處理認(rèn)證失敗的情況。在Lambda表達(dá)式中,我們可以獲取到用戶想要訪問的頁面地址和認(rèn)證失敗的原因,然后打印出相應(yīng)的提示信息。使用Lambda表達(dá)式處理認(rèn)證失敗注銷登錄配置從token令牌中獲取userKey在注銷時(shí),首先從token令牌解析出userKey。此key是用戶登錄時(shí)由系統(tǒng)生成并存于Redis的。通過userKey獲取用戶對(duì)象利用獲取的userKey,調(diào)用登錄用戶的方法從Redis中查找并返回相應(yīng)的用戶對(duì)象。檢查用戶對(duì)象是否存在在獲取用戶對(duì)象后,檢查其是否存在。若不存在,則表示用戶已注銷,返回相關(guān)提示信息;若存在,則繼續(xù)注銷操作。獲取已登錄用戶的認(rèn)證信息調(diào)用tokenService的delLoginUser方法在用戶對(duì)象獲取后,調(diào)用此方法來傳遞當(dāng)前用戶的token信息,以便從Redis中刪除相應(yīng)的令牌。檢查Redis中的token信息在調(diào)用delLoginUser方法后,檢查Redis中是否仍存在該用戶的token信息。若不存在,則返回成功刪除的提示;若存在,則繼續(xù)排查原因。檢查tokenService和RedisCache的工作狀態(tài)在Redis中存在用戶的token信息時(shí),檢查這兩個(gè)組件是否正常工作。若有故障,及時(shí)排查并修復(fù);若均正常,進(jìn)一步分析原因并采取相應(yīng)措施。從Redis中刪除當(dāng)前用戶的token信息JWT集成概述JWT定義JWT,即JSONWebToken,是一種用于Web應(yīng)用之間安全傳輸信息的開放標(biāo)準(zhǔn),常用于身份驗(yàn)證和授權(quán)。JW
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 貴州城市職業(yè)學(xué)院《操作系統(tǒng)概論》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年江蘇省安全員C證考試(專職安全員)題庫附答案
- 2025山東省建筑安全員A證考試題庫
- 飼草種植加工基地建設(shè)項(xiàng)目可行性研究報(bào)告-畜牧業(yè)需求持續(xù)擴(kuò)大
- 貴陽人文科技學(xué)院《過程設(shè)備機(jī)械基礎(chǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年江蘇省安全員B證考試題庫及答案
- 廣州現(xiàn)代信息工程職業(yè)技術(shù)學(xué)院《用戶調(diào)研》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣州鐵路職業(yè)技術(shù)學(xué)院《園藝作物育種學(xué)總論》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年-遼寧省安全員-C證考試(專職安全員)題庫附答案
- 2025遼寧建筑安全員-B證考試題庫及答案
- 2024年國投信托有限公司招聘筆試參考題庫含答案解析
- 自身免疫性肝炎的護(hù)理查房
- 《卜算子-黃州定慧院寓居作》理解性默寫(含答案)
- 少先隊(duì)大隊(duì)輔導(dǎo)員勝任力模型研究
- 人才隊(duì)伍建設(shè)實(shí)施方案
- 建設(shè)項(xiàng)目管理費(fèi)用(財(cái)建2016504號(hào))
- 德欽縣云嶺鄉(xiāng)、佛山鄉(xiāng)部分村落生活垃圾處置工程環(huán)評(píng)報(bào)告
- 毒理學(xué)基礎(chǔ)期末考試試題整理大全附答案
- 瑞幸咖啡案例分析
- LDA型電動(dòng)單梁起重機(jī)參數(shù)
- 寒假安全教育主題班會(huì)PPT-
評(píng)論
0/150
提交評(píng)論