




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Java 课程系列项目课程系列之 Atcrowdfunding尚硅谷 JavaEE 教研组版本:V1.0第一章 SpringSecurity-简介1. 简介ml.htmlSpringSecurity 融合 Spring 技术栈,提供 JavaEE 应用的整体安全解决方案;Spring Security 为基于 Java EE 的企业软件应用提供全面的安全服务。Spring Security 只需要少量配置,就能构建一个强大的安全的应用系统。目前市面上受欢迎的两个安全框架:Apache Shiro、SpringSecurity;SpringSecurity 可以无缝整合 Spring 应用,具有
2、强大的自动化 web 安全管控功能。而 Shiro 是一个轻量级强大的安全框架,可以脱离 web 应用来提供安全管控,但是对于 web 的一些定制安全需要手动编写;SpringBoot 底层默认整合 SpringSecurity 作为安全框架,所以我们推荐 web 应用使用 SpringSecurity 来安全;2. 概念l认证authentication:验证“验证”是指建立主体(principal)的过程,主体就是他们声称是谁(“主体”通常指用户、设备或在应用程序中可以执行动作的其他系统)。也就是“证明你是谁”Java 大数据 前端 python 人工智能资料,可:尚硅谷官网Java 课程
3、系列lauthorization:“”是指确定主体(principal)是否被执行系统中某个动作的过程。 也就是“你能做什么!”l 为了达到“”决策(安全框架决定你是否限做此事),“验证”(authentication)过程已经建立了主体的(Principal)3. 文档Hello Spring Security <> 基于 Java 配置整合示例Hello Spring Security Boot <> 与 SpringBoot 整合案例Hello Spring Security XML <> 基于 XML 方式整合示例Hello Spring MVC S
4、ecurity <> SpringMVC 集成示例Custom Login Form <> 自定义登录表单示例4. 支持的认证模式在验证级别,Spring Security 支持广泛的认证模型。这些认证模型中的大部分要么由第提供,要么由相关标准机构(如互联网工程任务组)开发。此外,SpringSecurity 提供了的一套验证功能。具体而言,Spring Security 当前支持与所有这些技术的验证集成;Java 大数据 前端 python 人工智能资料,可:尚硅谷官网l HTTP BASIC验证标头HTTP BASIC authentication headers
5、(an IETF RFC-based standard)参考:l HTTP Digest验证标头HTTP Digest authentication headers (an IETF RFC-based standard)l HTTP X.509 客户交换HTTP X.509 clientexchange (an IETF RFC-based standard)l LDAP(一种非常常见的跨平台验证方法,特别是在大型环境中)LDAP (a very common approach to cross-platform authentication needs, especially in lar
6、ge environments)Java 课程系列Java 大数据 前端 python 人工智能资料,可:尚硅谷官网l 基于表单的验证(用于简单的用户界面需求)Form-based authentication (for simple user interface needs)l OpenID验证OpenID authenticationl 基于预先建立的请求标头的验证Authentication based on pre-established request headers (such as Computer Associates Siteminder)l Jasig认证服务(也称为 CA
7、S,是一种流行的开源单点登录系统)Jasig Central Authentication Service (otherwise known as CAS, which is a popular open source single sign-on system)l 方法调用(RMI)和 HttpInvoker(Spring协议)的透明验证上下文Transparent authentication context propagation for Remote Method Invocation (RMI) and HttpInvoker (a Spring remoting protocol)
8、l 自动“记住我”验证Automatic "remember-me" authentication (so you can tick a box to avoid re-authentication for a predetermined period of time)l 验证(每个验证自动承担特定的安全)Anonymous authentication (allowing every unauthenticated call to automatically assume a particular security identity)l Runas验证(如果一个调用应继续
9、使用不同的安全标识,则非常有用)Run-as authentication (which is useful if one call should proceed with a different security identity)l Java验证和服务(JAAS)Java Authentication and Authorization Service (JAAS)l JavaEE 容器验证(如果需要,您仍然可以使用容器管理验证)Java EE container authentication (so you can still use Container Managed Authenti
10、cation if desired)l Java 开源单点登录(JOSSO)Java Open Source Single Sign-On (JOSSO) *l OpenNMS管理平台*Java 课程系列5. 模块划分Java 大数据 前端 python 人工智能资料,可:尚硅谷官网Core - spring-security-core.jar模块认证、功能、支持 jdbc-user 功能、支持的Spring 应用Remoting - spring-security-remoting.jar交互模块一般不需要,可以使用 Spring Remoting 功能简化客户端交互Web - spring
11、-security-web.jarweb 安全模块web 项目使用,基于 URL 的(access-control)Config - spring-security-config.jarjava 配置模块必须依赖含xml 方式和 java 注解方式来使用SpringSecurity 功能OpenNMS Network Management Platform *l 您的验证系统Your own authentication systems (see below)l 其他Kerberos AppFuse * AndroMDA * Mule ESB *Direct Web Request (DWR)
12、 * Grails *Tapestry * JTrac * Jasypt * Roller * Elastic Path *Atlassian Crowd *Java 课程系列6.4 种使用方式l一种是全部利用配置文件,将用户、权限、(url)硬编码在 xml 文件中l二种是用户和权限用数据库,而(url)和权限的对应采用硬编码配置l三种是细分和权限,并将用户、权限和均采用数据库,并且自定义过滤器,代替原有的 FilterSecurityInterceptor并 分 别 实 现 AccessDecisionManager 、过滤器, InvocationSecurityMetadataSour
13、ceService 和 UserDetailsService,并在配置文件中进行相应配置。l四是修改 springsecurity 的源代码, 主要是修改 InvocationSecurityMetadataSourceService 和UserDetailsService 两个类。nInvocationSecurityMetadataSourceServiceu 将配置文件或数据库中的(url)提取出来成为 url 和权限列表的 Map 供Security 使用nUserDetailsServiceu 提取用户名和权限组成一个完整的(UserDetails)User对象,该对象可以提供用户的
14、详细信息供 AuthentationManager 进行认证与使用Java 大数据 前端 python 人工智能资料,可:尚硅谷官网LDAP - spring-security-ldap.jarldap(轻量目录协议)支持模块可选依赖包,LDAP 功能支持ACL - spring-security-acl.jarACL 支持ACL(Access-Control-List)列表细粒度的(RBAC+ACL)CAS - spring-security-cas.jarCAS 整合支持CAS(Central Authentication Service)认证服务。开源ApereoCAS 整合OpenID
15、 - spring-security-openid.jar OpenID 认证方式支持OpenID Web验证支持。 用于外部 OpenID 服务器对用户进行验证(,,新浪等第登录)Test - spring-security-test.jar测试模块快速的测试 SpringSecurity 应用Java 课程系列第二章 SpringSecurity-HelloWorld2.1 测试环境搭建2.1.1 创建普通 maven-war 工程:spring-security-helloworldlpom 文件增加依赖Java 大数据前端 python 人工智能资料,可:尚硅谷官网Java 课程系列2
16、.1.2 web.xml 配置2.1.3 spring 配置:spring.xmlJava 大数据 前端 python 人工智能资料,可:尚硅谷官网<?xml version="1.0" encoding="UTF-8"?><beans xmlns=""xmlns:xsi=""xmlns:context=""xmlns:mvc=""xsi:schemaLocation="<servlet><servlet-name>spri
17、ngDispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring.xml</param-value></init-param><load-on-st
18、artup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springDispatcherServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping><version>1.2</version></dependency>Java 课程系列2.1.4 导入实验l导入页面Java 大数据前端 python 人工智能
19、资料,可:尚硅谷官网"><context:component-scan base-package="com.atguigu.security"></context:component-scan><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/views/"><
20、;/property><property name="suffix" value=".jsp"></property></bean><mvc:annotation-driven /><mvc:default-servlet-handler /></beans>Java 课程系列l导入 controllerJava 大数据 前端 python 人工智能资料,可:尚硅谷官网Java 课程系列2.1.5 运试2.2 引入 SpringSecurity 框架2.2.1添加 securi
21、ty-pom 依赖Java 大数据 前端 python 人工智能资料,可:尚硅谷官网Java 课程系列2.2.2 web.xml 中添加 SpringSecurity 的 Filter 进行安全2.2.3 加入 SpringSecurity 配置类lConfiguration、Bean 注解作用2.2.4 启动测试效果l所有受限(包括静态)l需要一个默认的登录页面(框架自带的)l账号错误会有提示Java 大数据 前端 python 人工智能资料,可:尚硅谷官网Java 课程系列l查看登录页面的源码,发现有个 hidden-input;name="_csrf"这是 Sprin
22、gSecurity 帮我们防止“跨站请求”;还可以防止表单重复提交。l。lSpringSecurity-实验第三章3.1实验一:首页和静态l配置类(AppWebSecurityConfig extends WebSecurityConfigurerAdapter)l重写 configure(HttpSecurity http)方法Java 大数据 前端 python 人工智能资料,可:尚硅谷官网Java 课程系列l测试结果n静态和 index.jsp 都可以n不的Java 大数据前端 python 人工智能资料,可:尚硅谷官网Java 课程系列3.2实验二:默认及自定义登录页l开启 formL
23、ogin()功能l静态和 index.jsp 都可以l不的n重定向到登录页n404 错误l总结:默认表单登录页面的规则1)、自动生成一个登录页2)、登录请求被提交到 /loginPOST 下3)、生成隐藏域,可以防重复提交和跨站请求;<input name="_csrf" type="hidden" value="755f0b3c-0965-430b-852e-dcf6c77e7edb" />为了测试方便,先禁用这个功能: http.csrf().disable();4)、默认提交的字段名为:name='passw
24、ord'name='username'l指定登录页nhttp.formLogin().loginPage("/index.jsp"); /去到指定的登录页n静态和 index.jsp 都可以n不的u重定向到自定义登录页u404 错误3.3 实验三:自定义表单登录逻辑分析l表单提交地址:$PATH /index.jspl表单提交请求方式:postl表单提交请求失败,提取错误消息:$SPRING_SECURITY_LAST_EXCEPTION.messagel如何提交表单:Java 大数据 前端 python 人工智能资料,可:尚硅谷官网Java 课程系
25、列n引入 jquery: <script src="$PATH /layui/jquery.min.js"></script>n$("form").submit();n表单提交参数名称: usernamepasswordl提交请求被拒绝暂时禁用 csrf:http.csrf().disable();l登录逻辑分析l测试结果Java 大数据前端 python 人工智能资料,可:尚硅谷官网Java 课程系列3.4 实验四:自定义认证用户信息l自定义认证用户信息lCSRF 跨站请求lSpringSecurity 添加了 csrf 功能【
26、DefaultCsrfToken】,所有的表单提交为了防止跨站请求,我们需要加上_csrf 项; 或者,暂时禁用 http.csrf().disable();<input type="hidden" name="$_csrf.parameterName" value="$_csrf.token"/>n$_csrf=>>>org.springframework.security.web.csrf.DefaultCsrfToken19116cfdn<input type="hidden&quo
27、t; name="_csrf" value="310988c2-3f9d-4651-9e19-6ef4b2c4aa3a"/>Java 大数据 前端 python 人工智能资料,可:尚硅谷官网Java 课程系列l如果不禁用 csrf,默认是开启的状态;页面不设置 csrf 表单域,那么,提交登录请求会报错l令牌值变化:n如果登录(用户名,正确),令牌会被删除,n重新回到登录页或后退网页,令牌会重新生成;n如果登录失败(用户名,错误),令牌不变。n刷新登录页,令牌值也不变l作用:n防止别的数据,提交请求到我们的。Java 大数据 前端 python 人
28、工智能资料,可:尚硅谷官网Java 课程系列l扩展-了解 XSS·XSS,是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写全称跨站,故将跨站缩写为 XSS,XSS 是一种在 web 应用中的计算机安全漏洞,它web 用户将代码植入到提供给其它用户使用的页面中。·CSRF(Cross-site request forgery)跨站请求,也被称为“One Click Attack”或者 Session Riding,通常缩写为 CSRF 或者 XSRF,是一种对的利用。尽管听起来像跨站(XSS),但它与 XSS 非常不同,XSS 利用站点内的信
29、任用户,而 CSRF 则通过成受信任用户的请求来利用受信任的。与 XSS相比,CSRF往往不大流行(因此对其进行防范的也相当稀少)和难以防范,所以被认为比 XSS 更具性。Java 大数据 前端 python 人工智能资料,可:尚硅谷官网Java 课程系列3.5 实验五:用户注销完成l添加注销功能(logout)http.logout()默认规则/logout:系统1)2)如果 csrf 开启,必须 post 方式的/logout 请求,表单中需要增加 csrf token3)logoutUrl();系统需要的请求logoutSuccessUrl();4)系统以后要跳转的页面地址5)addLo
30、goutHandler():自定义注销处理器deleteCookies():指定需要删除的 cookie6)7)invalidateHttpSession():session 失效(DEBUG)3.6 实验六:基于的l设置可以的l注意:n将.anyRequest().authenticated()错误的设置在前面,后面的设置就不起作用了。n设置所有,"/*"都可以,其他再进行的设置就起作用了n设置/level3/*可以不用登录,:.anyRequest().anonymous();l拥有该的可以,否则不可以Java 大数据 前端 python 人工智能资料,可:尚硅谷官网J
31、ava 课程系列3.7 实验七:自定义拒绝处理页面l直接增加处理界面l在器类中增加处理l增加显示页面,将 main.jsp,命名为 unauth.jsp,增加一句提示信息l测试显示效果l自定义异常处理器Java 大数据前端python 人工智能资料,可:尚硅谷官网Java 课程系列3.8 实验八:记住我功能3.8.1 记住我功能-免登录原理lhttp.rememberMe();l默认规则n页面 checkbox 提交 remember-me 参数n默认记住 2 周登录状态:AbstractRememberMeServicesn会在 cookie 中保存名为:remember-me 的 cook
32、iel记住了以前登录的状态,以后再就不用登录了l登录后页面,关闭浏览器,直接:可以,不必登录。l这种方式,token 值是放置在内存中的,服务器端重启 tomcat,token 会失效。需要将 token在数据库持久化才失效。Java 大数据 前端 python 人工智能资料,可:尚硅谷官网Java 课程系列3.8.2 记住我-数据版l引入 pom.xml包Java 大数据前端python 人工智能资料,可:尚硅谷官网Java 课程系列l配置数据源l创建表Java 大数据前端 python 人工智能资料,可:尚硅谷官网create table persistent_logins (userna
33、me varchar(64) not null, series varchar(64) primary key,tokenvarchar(64) not null, last_used timestamp not null)Java 课程系列l设置记住我第四章 认证使用数据库保存/用户数据,完成认证功能4.1:重写 jdbcAuthentication 规则(不推荐)l基于数据库的 RBAC出我们需要的用户以及这些用户的权限(权限标识、)Java 大数据 前端 python 人工智能资料,可:尚硅谷官网Java 课程系列l创建和 SpringSecurity 要求一模一样的表,然后用默认 jd
34、bcAuthenticationl更新 jdbcAuthentication 里面所有我们需要实际运行的 sqllauthoritiesByUsernameQuery:根据用户名他权限的 sqllusersByUsernameQuery:根据用户名用户的 sqll.:的 sql 均可定义4.1.1使用默认的用户语句4.1.2使用默认的权限语句Java 大数据前端 python 人工智能资料,可:尚硅谷官网Java 课程系列4.2:自定义 UserDetailsService 检索用户4.2.1实现 UserDetailService接口username)方法loadUserByUsername
35、(String4.2.2 实验步骤1 创建表结构security 实验security.sql2 配置 configure(AuthenticationManagerBuilder auth)Java 大数据 前端 python 人工智能资料,可:尚硅谷官网Java 课程系列3 编写 UserDetailService 实现:1)接口及已有实现类2)实现 UserDetailService 接口,提供自定义实现类org.springframework.security.core.userdetails.UserDetailsServiceJava 大数据 前端 python 人工智能资料,可:
36、尚硅谷官网Java 课程系列4 运试结果,不一致,跳转到登录页,并提示错误消息Java 大数据 前端 python 人工智能资料,可:尚硅谷官网Java 课程系列4.2.3 debug 测试登录-断点调试1断点-方法栈Java 大数据前端 python 人工智能资料,可:尚硅谷官网Java 课程系列2 自定义 UserDetailService 实现类3 Dao 层认证提供者: DaoAuthenticationProviderDao 层认证提供者 DaoAuthenticationProvider,用于调用自定义的 UserDetailService 实现类方法Java 大数据 前端 pyt
37、hon 人工智能资料,可:尚硅谷官网Java 课程系列4 抽象层用户认证提供者: AbstractUserDetailsAuthenticationProvider抽象层用户认证提供者,获取dao 层查找的认证用户信息,被封装成UserDetails 对象,User类是UserDetails 接口实现类Java 大数据前端 python 人工智能资料,可:尚硅谷官网Java 课程系列1)org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider.DefaultPreAuthe
38、nticationChecks 认证用户账号是否被锁定,是否启用,是否过期;用户表中可以增加这些字段。Java 大数据 前端 python 人工智能资料,可:尚硅谷官网Java 课程系列2)public interface Authentication extends Principal封装表单提交的认证信息认证用户名和;盐值为 nulllJava 大数据 前端 python 人工智能资料,可:尚硅谷官网Java 课程系列l采用 org.springframework.security.authentication.encoding.BasePasswordEncoder 默认加密器对表单提交
39、明文加密(其实并没有进行任何加密,明文无变化)Java 大数据 前端 python 人工智能资料,可:尚硅谷官网Java 课程系列l总结Java 大数据 前端 python 人工智能资料,可:尚硅谷官网Java 课程系列4.3 基于数据库(MD5)认证 (debug)使用数据库保存/用户数据,完成认证功能4.3.1 配置 configure(AuthenticationManagerBuilder auth)org.springframework.security.crypto.password.PasswordEncoder4.3.2 引入 MD5 加密工具类:MD5Util.java4.3
40、.3 PasswordEncoder 接口实现类:AppPasswordEncoderJava 大数据 前端 python 人工智能资料,可:尚硅谷官网Java 课程系列4.3.4 Debug 测试,主要测试 matches 方法的调用过程1.表单提交:rawPasswordJava 大数据 前端 python 人工智能资料,可:尚硅谷官网Java 课程系列2.数据库:encodePassword3.调用自定义验证器4.不一致,抛异常:Bad credentials ;一致,通过认证Java 大数据 前端 python 人工智能资料,可:尚硅谷官网Java 课程系列5.创建 UsernameP
41、asswordAuthenticationToken对象,封装认证信息Java 大数据 前端 python 人工智能资料,可:尚硅谷官网Java 课程系列Java 大数据 前端 python 人工智能资料,可:尚硅谷官网Java 课程系列4.3.5源码参考1 principal 认证主体-数据库中User 数据2 authentication.getCredentials() 认证(表单中)Java 大数据 前端 python 人工智能资料,可:尚硅谷官网Java 课程系列3 authoritiesMapper.mapAuthorities(user.getAuthorities() 认证权限
42、集合该用户拥有的权限,暂时写死在代码中的,后期要根据用户所拥有的权限4 认证细节:包括客户端 ip 和 sessionidorg.springframework.security.web.authentication.WebAuthenticationDetailsJava 大数据 前端 python 人工智能资料,可:尚硅谷官网Java 课程系列5 result 对象(UsernamePasswordAuthenticationToken)详细描述Java 大数据 前端 python 人工智能资料,可:尚硅谷官网Java 课程系列4.4 基于数据库(BCryptPasswordEncoder
43、)加密认证4.4.1 PasswordEncoder 接口4.4.2使用 BCryptPasswordEncoder 进行加密4.4.3本地测试:main 方法Java 大数据 前端 python 人工智能资料,可:尚硅谷官网Java 课程系列4.4.4 服务器运试将 main 方法生成的密文到数据库中(注意:userpswd 字段长度),重新启动服务器进试。第五章 细粒度权限5.1 前置细节【Role 和 Authority 的区别】5.1.1 用户拥有的权限表示lroles("ADMIN","学徒","宗师")lauthoriti
44、es("USER","MANAGER");5.1.2 给授予权限(或权限)Java 大数据 前端 python 人工智能资料,可:尚硅谷官网Java 课程系列5.1.3 权限:【roles 和 authorities 区别】l roles("ADMIN","学徒","宗师")增加"ROLE_"前缀存放:【"ROLE_ADMIN","ROLE_学徒","ROLE_宗师"】表示拥有的权限。一个表示的是多个权限用户传入的不
45、能以 ROLE_开头,否则会报错。ROLE_是自动加上的:直接传入的名字,权限【new SimpleGrantedAuthority("ROLE_" +如果我们保存的用户的role)】保存即可l authorities("USER","MANAGER");原样存放:【"USER","MANAGER"】表示拥有的权限。如果我们保存的是真正的权限;直接传入权限名字,权限【new SimpleGrantedAuthority(role)】保存无论是 Role 还是 Authority 都保List&l
46、t;GrantedAuthority>,每个用户都拥有的权限集合->List<GrantedAuthority>5.1.4 验证用户权限1)通过(权限)验证:.antMatchers("/level1/*").hasRole("学徒").antMatchers("/level1/*").hasAnyRole("学徒","ADMIN")拥有任何一个都可以验证时会自动增加"ROLE_"进行查找验证:【"ROLE_学徒","RO
47、LE_ADMIN"】Java 大数据 前端 python 人工智能资料,可:尚硅谷官网Java 课程系列通过权限验证.antMatchers("/level1/*").hasAuthority("学徒").antMatchers("/level1/*").hasAnyAuthority("学徒","ADMIN")拥有任何一个权限都可以验证时原样查找进行验证:【"学徒","ADMIN"】5.2 细粒度的lauthenticated():通过认证的用
48、户都可以lpermitAll():所有人,即使未登录lauthorizeRequests():更细粒度的laccess(String): SpEL:Spring 表达式.access("hasRole('大师') AND hasAuthority('user:delete') OR hasIpAddress('5')")5.3 细粒度的相应注解使用注解与 SpEl 进行细粒度权限Java 大数据 前端 python 人工智能资料,可:尚硅谷官网Java 课程系列5.3.1 开启注解权限模式EnableW
49、ebSecurity:开启 Spring Security 注解EnableGlobalMethodSecurity(prePostEnabled=true):开启全局的细粒度方法级别权限功能5.3.2 几个权限检查注解1 PreAuthorize:方法执行前检查2 PostAuthorize:方法执行后检查,失败抛异常Java 大数据 前端 python 人工智能资料,可:尚硅谷官网PostAuthorize:方法调用,但是,如果表达式结果为 false 抛出异常/returnObject 可以获取返回对象 useruser 属性 username 是否和该方法的用户对象的用户名一样。不一样则抛出异常。PostAuthorize(&qu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 纺织品设计师证书考试的职业素养提升试题及答案
- 中学生艾滋病知识普及课件
- 驿站合伙合同协议书
- 纺织工程师证书考试解析中的关键试题及答案
- 废旧门窗回收合同协议书
- 《跨国物流操作》课件
- 合同协议书范文
- 合同毁约协议书
- 爱情合同协议书
- 退款合同协议书
- 2025年安徽省C20教育联盟中考三模语文试题(含答案)
- 药品注册与生产作业指导书
- 2025年中考语文备考之课内文言文主题阅读训练主题二:治国劝谏篇(解析版)
- 计算机毕设管理系统答辩
- 2025年湖北行测试题及答案
- 闽教版四年级英语下册全册单元知识点
- 2025视频号内容生态发展白皮书
- 新高考背景下2025年高考物理命题趋势分析与复习备考策略讲座
- 管道焊接施工方案
- 2025年四川成都农业科技职业学院招聘工作人员16人高频重点模拟试卷提升(共500题附带答案详解)
- 2024年全国高考甲卷历史试题含答案解析
评论
0/150
提交评论