- 浏览: 307783 次
-
文章分类
最新评论
-
流年末年:
那四个参数还是没看懂.....能不能解释下showPassst ...
我写的密码强度验证方法(原创) -
kingcs2008:
// 验证pws.jsshowPassstrength(&qu ...
我写的密码强度验证方法(原创) -
h957355152:
请问博主这个怎么用呢?我直接放到jsp里面调用showPass ...
我写的密码强度验证方法(原创) -
qq_15138059:
我写的全国省市县三级联动菜单,拿出来和大家分享了(原创) -
valenon:
评论呢?从MAIL FROM命令开始貌似就出错了:500 Er ...
如何发送伪造的电子邮件
实现自定义的 AuthenticationProvider
在很多场景下,你的应用需要跳出 Spring Security 功能的边界,可能会需要实现自己的 AuthenticationProvider 。回忆在第二章中 AuthenticationProvider 的角色,在整个认证过程中,它接受安全实体请求提供的凭证(即 Authentication 对象或 authentication token )并校验其正确性和合法性。
通过AuthenticationProvider 实现一个简单的单点登录
通常,应用允许以用户或客户端方式登录。但是,有一种场景也很常见,尤其是在广泛使用的应用中,即允许系统中的不同用户以多种方式登录。
假设我们的系统与一个简单的“单点登录”提供者进行集成,用户名和密码分别在 HTTP 头中的 j_username 和 j_password 发送。除此以外, j_signature 头信息包含了用户名和密码的随意编码算法形成的字符串,以辅助安全请求。
【不要使用这个例子作为真实单点登录的解决方案。这个例子很牵强,只是为了说明实现一个完全自定义 AuthenticationProvider 的步骤。真正的 SSO 解决方案显然会更安全并涉及到几次的握手以建立可信任的凭证。 Spring Security 支持几种 SSO 解决方案,包括中心认证服务( CAS )和 SiteMinder ,我们将会在第十章:使用中心认证服务实现单点登录中介绍。实际上, Spring Security 提供了一个类似的过滤器用来进行 SiteMinder 请求头的认证,即 o.s.s.web.authentication.preauth.RequestHeaderAuthenticationFilter ,也是这种类型功能的一个好例子。】
对于 admin 用户的登录,我们的算法期望在请求头中包含如下的数据:
请求头 |
值 |
j_username |
admin |
j_password |
admin |
j_signature |
admin|+|admin |
一般来讲, AuthenticationProvider 将会寻找特定的 AuthenticationToken ,而后者会在过滤器链中位置比较靠前的 servlet filter 里面进行填充赋值(明确会在 AuthenticationManager 访问检查执行之前),如下图描述:
在这种方式中, AuthenticationToken 的提供者与其消费者 AuthenticationProvider 有一点脱离关系了。所以,在实现自定义 AuthenticationProvider 时,通常还需要实现一个自定义的 servlet 过滤器,其作用是提供特定的 AuthenticationToken 。
自定义认证 token
我们实现自定义的方法会尽可能的使用 Spring Security 的基本功能。基于此,我们会扩展并增强基本类如 UsernamePasswordAuthenticationToken ,并添加一个新的域来存储我们已编码的签名字符串。最终的类 com.packtpub.springsecurity.security.SignedUsernamePasswordAuthenticationToken ,如下:
- package com.packtpub.springsecurity.security;
- // imports omitted
- public class SignedUsernamePasswordAuthenticationToken
- extends UsernamePasswordAuthenticationToken {
- private String requestSignature;
- private static final long serialVersionUID =
- 3145548673810647886L;
- /**
- * Construct a new token instance with the given principal,
- credentials, and signature.
- *
- * @param principal the principal to use
- * @param credentials the credentials to use
- * @param signature the signature to use
- */
- public SignedUsernamePasswordAuthenticationToken(String principal,
- String credentials, String signature) {
- super (principal, credentials);
- this .requestSignature = signature;
- }
- public void setRequestSignature(String requestSignature) {
- this .requestSignature = requestSignature;
- }
- public String getRequestSignature() {
- return requestSignature;
- }
- }
我们可以看到 SignedUsernamePasswordAuthenticationToken 是一个简单的 POJO 类,扩展自 UsernamePasswordAuthenticationToken 。 Tokens 并不需要太复杂——它们的主要目的就是为后面的校验封装凭证信息。
实现对请求头处理的 servlet 过滤器
现在,我们要写 servlet 过滤器的代码,它负责将请求头转换成我们新定义的 token 。同样的,我们扩展对应的 Spring Security 基本类。在本例中, o.s.s.web.authentication.
AbstractAuthenticationProcessingFilter 满足我们的要求。
【基本过滤器 AbstractAuthenticationProcessingFilter 在 Spring Security 中是很多进行认证过滤器的父类(包括 OpenID 、中心认证服务以及基于 form 的用户名和密码登录)。这个类提供了标准的认证逻辑并适当织入了其它重要的资源如 RememberMeServices 和 ApplicationEventPublisher (本章的后面将会讲解到)。】
现在,让我们看一下代码:
- // imports omitted
- public class RequestHeaderProcessingFilter extends
- AbstractAuthenticationProcessingFilter {
- private String usernameHeader = "j_username" ;
- private String passwordHeader = "j_password" ;
- private String signatureHeader = "j_signature" ;
- protected RequestHeaderProcessingFilter() {
- super ( "/j_spring_security_filter" );
- }
- @Override
- public Authentication attemptAuthentication
- (HttpServletRequest request,HttpServletResponse response)
- throws AuthenticationException,
- IOException, ServletException {
- String username = request.getHeader(usernameHeader);
- String password = request.getHeader(passwordHeader);
- String signature = request.getHeader(signatureHeader);
- SignedUsernamePasswordAuthenticationToken authRequest =
- new SignedUsernamePasswordAuthenticationToken
- (username, password, signature);
- return this .getAuthenticationManager().authenticate(authRequest);
- }
- // getters and setters omitted below
- }
可以看到,这个比较简单的过滤器查找三个已命名的请求头,正如我们已经规划的那样(如果需要的话,可以通过 bean 属性进行配置),并监听默认的 URL /j_spring_security_filter 。正如其它的 Spring Security 过滤器那样,这是一个虚拟的 URL 并被我们的过滤器的基类 AbstractAuthenticationProcessingFilter 所识别,基于此这个过滤器采取行动尝试创建 Authentication token 并认证用户的请求。
【区分参与认证 token 流程的各个组件。在这个功能中,很容易被这些术语、接口和类的名字搞晕。代表要认证的 token 接口是 o.s.s.core.Authentication ,这个接口的实现将以后缀 AuthenticationToken 结尾。这是一个很简单的方式来区分 Spring Security 提供的认证实现类。】
在本例中,我们尽可能将错误检查最小化(译者注:即参数的合法性与完整性的检查)。可能在实际的应用中,会校验是否所有头信息都提供了以及在发现用户提供信息不正确的时候要抛出异常或对用户进行重定向。
一个细小的配置变化是需要将我们的过滤器插入到过滤器链中:
- < http auto-config = "true" ... >
- < custom-filter ref = "requestHeaderFilter"
- before = "FORM_LOGIN_FILTER" />
- </ http >
你可以看到过滤器代码最后请求 AuthenticationManager 来进行认证。这将最终委托配置的 AuthenticationProvider ,它们中的一个要支持检查 SignedUsernamePasswordAuthenticationToken 。接下来,我们需要书写一个 AuthenticationProvider 来做这件事情。
实现基于请求头的 AuthenticationProvider
现在,我们写一个 AuthenticationProvider 的实现类,即 com.packtpub.springsecurity.security.SignedUsernamePasswordAuthenticationProvider ,负责校验我们自定义 Authentication token 的签名。
- package com.packtpub.springsecurity.security;
- // imports omitted
- public class SignedUsernamePasswordAuthenticationProvider
- extends DaoAuthenticationProvider {
- @Override
- public boolean supports(Class<? extends Object> authentication) {
- return (SignedUsernamePasswordAuthenticationToken . class .isAssignableFrom(authentication));
- }
- @Override
- protected void additionalAuthenticationChecks
- (UserDetails userDetails,
- UsernamePasswordAuthenticationToken authentication)
- throws AuthenticationException {
- super .additionalAuthenticationChecks
- (userDetails, authentication);
- SignedUsernamePasswordAuthenticationToken signedToken =
- (SignedUsernamePasswordAuthenticationToken) authentication;
- if (signedToken.getRequestSignature() == null ) {
- throw new BadCredentialsException(messages.getMessage(
- "SignedUsernamePasswordAuthenticationProvider
- .missingSignature", " Missing request signature"),
- isIncludeDetailsObject() ? userDetails : null );
- }
- // calculate expected signature
- if (!signedToken.getRequestSignature()
- .equals(calculateExpectedSignature(signedToken))) {
- throw new BadCredentialsException(messages.getMessage
- ("SignedUsernamePasswordAuthenticationProvider
- .badSignature", " Invalid request signature"),
- isIncludeDetailsObject() ? userDetails : null );
- }
- }
- private String calculateExpectedSignature
- (SignedUsernamePasswordAuthenticationToken signedToken) {
- return signedToken.getPrincipal() + "|+|" +
- signedToken.getCredentials();
- }
- }
你可以看到我们再次扩展了框架中的类 DaoAuthenticationProvider ,因为有用的数据访问代码仍然需要进行实际的用户密码校验以及通过 UserDetailsService 加载 UserDetails 。
这个类有些复杂,所以我们将分别介绍其中的每个方法。
Supports 方法,是重写父类的方法,向 AuthenticationManager 指明当前 AuthenticationProvider 要进行校验的期望运行时 Authentication token 。
接下来, additionalAuthenticationChecks 方法被父类调用,此方法允许子类对 token 进行特有的校验。这正适合我们的策略,所以添加上我们对 token 新的签名检查。基本上已经完成了我们自定义“简单 SSO ”的实现,仅剩一处配置了。
连接AuthenticationProvider
一个常见的要求就是将一个或更多的 AuthenticationProvider 接口连接起来,因为用户可能会以几种校验方式中的某一种登录系统。
因为到目前为止,我们还没有了解其它的 AuthenticationProvider ,我们可以假设以下的需求,即使用标准的用户名和密码基于 form 的认证以及前面实现的自定义简单 SSO 认证。当配置了多个 AuthenticationProvider 时,每个 AuthenticationProvider 都会检查过滤器提供给它的 AuthenticationToken ,仅当这个 token 类型它支持时才会处理这个 token 。以这种方式,你的应用同时支持不同的认证方式并不会有什么坏处。
连接多个 AuthenticationProvider 实际上很简单。只需要在我们的 dogstore-security.xml 配置文件中声明另一个 authentication-provider 引用。
- < authentication-manager alias = "authenticationManager" >
- < authentication-provider ref = "signedRequestAuthenticationProvider" />
- < authentication-provider user-service-ref = "jdbcUserService" >
- < password-encoder ref = "passwordEncoder" >
- < salt-source ref = "saltSource" />
- </ password-encoder >
- </ authentication-provider >
- </ authentication-manager >
与我们安全配置文件中引用的其它 Spring bean 一样, signedRequestAuthenticationProvider 引用就是我们的 AuthenticationProvider ,它将在 dogstore-base.xml 中与其它的 Spring bean 一起进行配置。
- < bean id = "signedRequestAuthenticationProvider" class ="com.packtpub.springsecurity.security
- .SignedUsernamePasswordAuthenticationProvider">
- < property name = "passwordEncoder" ref = "passwordEncoder" />
- < property name = "saltSource" ref = "saltSource" />
- < property name = "userDetailsService" ref = "jdbcUserService" />
- </ bean >
我们自定义的 AuthenticationProvider 的 bean 属性其实都是父类所需要的。这些也都指向了我们在 AuthenticationManager 的中第二个 authentication-provider 声明中的那些 bean 。
最终已经完成了支持这个简单单点登录功能的编码和配置,至此可以给自己一个小小的喝彩。但是,还有一个小问题——我们应该怎样操作请求的 http 头以模拟我们的 SSO 认证提供者呢?
使用请求头模拟单点登录
尽管我们的场景比较牵强,但是有一些商业和开源的单点登录解决方案,它们能够被配置以通过 HTTP 请求头发送凭证信息,最具有代表性的是 CA (以前的 Netegrity ) SiteMinder 。
【需要特别注意的是,与 SSO 方案集成的应用是不能通过用户的直接请求访问的。通常情况下, SSO provider 功能作为代理,通过它确定用户的请求流程(是安全的)或 provider 持有关于密码的信息并将这些信息与单个的安全应用隔离。在没有完全了解一个其使用的硬件、网络和安全设施之前,不要部署 SSO 应用。】
Mozilla Firefox 的浏览器扩展,名为 Modify Headers (可以在以下地址获得: http://modifyheaders.mozdev.org ),是一个很简单的工具能够用来模拟伪造 HTTP 头的请求。以下的截图表明了如何使用这个工具添加我们的 SSO 方案所希望得到的请求头信息:
将所有的头信息标示为
Enabled
,访问这个
URL
:
http://localhost:8080/JBCPPets/j_spring_security_filter
,会发现我们能够自动登录系统。你可能也会发现我们给予
form
的登录还能继续可用,这是因为保留了这两个
AuthenticationProvider
实现以及过滤器链中对应的过滤器。
(译者注:说实话,作者这个实现自定义 AuthenticationProvider 的例子真的是比较牵强,但是还算完整描述出了其实现方式,想深入了解 AuthenticationProvider 自定义的朋友,可以参照 Spring Security 提供的 CasAuthenticationProvider 等实现。)
实现自定义AuthenticationProviders 时要考虑的事项
尽管我们刚刚看到的例子并没有阐述你想构建的 AuthenticationProvider ,但是任何自定义 AuthenticationProvider 的步骤是类似的。这个练习的关键在于:
l 基于用户的请求完成一个 Authentication 实现的任务一般情况下会在过滤器链中的某一个中进行。取决于是否校验凭证的数据,这个校验组件可能要进行扩展;
l 基于一个合法的 Authentication 认证用户的任务需要 AuthenticationProvider 的实现来完成。请查看我们在第二章中讨论过的 AuthenticationProvider 所被期望拥有的功能;
l 在一些特殊的场景下,如果未认证的 session 被发现,可能会需要自定义的 AuthenticationEntryPoint 。我们将会在本章接下来的部分更多了解这个接口,也会在第十章介绍中心认证服务( CAS )时,介绍一些 AuthenticationEntryPoint 的实际例子。
如果你能时刻记住它们的角色,当你在开发应用特定的 AuthenticationProvider 时,会在实现和调试过程中少很多的迷惑。
发表评论
-
spring-security3 配置和使用(二)承上
2011-12-22 06:42 10832、xml配置,配置内容如下: Xml代码 ... -
spring-security3 配置和使用 (一)(转载)
2011-12-22 06:43 982最近项目中要使用到spring-security,可能研究 ... -
SpringSecurity3.X--一个简单实现(转载)
2011-12-22 06:43 2712作者对springsecurity研究不深,算是个初学者吧,最 ... -
SpringSecurity3.X--验证码(转载)
2011-12-22 06:44 1083一般来说,登录时都会要求用户输入验证码,以防止恶意登录。 可 ... -
SpringSecurity3.X--前台与后台登录认证(转载)
2011-12-23 06:33 3473不过一般我们在管理系统时都会分前台与后台,也就是说,前台与后台 ... -
SpringSecurity3.X--remember-me(转载)
2011-12-22 06:44 1756笔者在SpringSecurity中配置remember-me ... -
《Spring Security3》第六章第七部分翻译(认证事件处理与小结)
2011-12-23 06:34 1363认证事件处理 ... -
《Spring Security3》第六章第六部分翻译(Spring Security基于bean的高级配置)
2011-12-23 06:34 1079Spring Security 基于bean 的高级配 ... -
《Spring Security3》第六章第五部分翻译(手动配置Spring Security设施的bean)(转载)
2011-12-23 06:34 1053手动配置Spring Security 设施的be ... -
《Spring Security3》第六章第四部分翻译(异常处理)(转载)
2011-12-23 06:34 1262理解和配置异常处理 ... -
《Spring Security3》第六章第三部分翻译(Session的管理和并发)(转载)
2011-12-24 10:20 4237Session 的管理和并发 ... -
《Spring Security3》第六章第一部分翻译(自定义安全过滤器)(转载)
2011-12-24 10:21 1150第六章 高级配置和扩展 到目前为止,我 ... -
《Spring Security3》第五章第四部分翻译(方法安全的高级知识和小结)(转载)
2011-12-24 10:22 1076方法安全的高级知 ... -
《Spring Security3》第五章第三部分翻译(保护业务层)
2011-12-24 10:22 914保护业务层 到目前为止,在 ... -
《Spring Security3》第五章第二部分翻译下(实现授权精确控制的方法——页面级权限)(转载)
2011-12-25 00:47 1036使用控制器逻辑进行有条件渲染内容 ... -
《Spring Security3》第五章第二部分翻译上(实现授权精确控制的方法——页面级权限)(转载)
2011-12-25 00:47 1004实现授权精确控制的方法 精确的授权指的是基于用 ... -
《Spring Security3》第五章第一部分翻译(重新思考应用功能和安全) (转载)
2011-12-25 00:47 959第五章 精确的 ... -
《Spring Security3》第四章第四部分翻译(Remember me后台存储和SSL)(转载)
2011-12-25 00:47 1295将 Remember me 功能 ... -
《Spring Security3》第四章第三部分翻译下(密码加salt)(转载)
2011-12-25 00:48 1827你是否愿意在密码上添加点salt ? 如果安 ... -
《Spring Security3》第四章第三部分翻译上(配置安全的密码)(转载)
2011-12-26 00:41 1038配置安全的密码 我们 ...
相关推荐
SOH-SVM算法:斑点鬣狗优化技术对支持向量机的改进与解析,优化算法助力机器学习:SOH-SVM改进及源码解析与参考,SOH-SVM:斑点鬣狗优化算法改进支持向量机:SOH-SVM。 代码有注释,附源码和参考文献,便于新手理解,~ ,SOH-SVM; 斑点鬣狗优化算法; 代码注释; 源码; 参考文献,SOH-SVM算法优化:附详解代码与参考
美赛教程&建模&数据分析&案例分析
GESPC++3级大纲
电动汽车充电负荷预测:基于出行链分析与OD矩阵的蒙特卡洛模拟研究,电动汽车充电负荷预测:基于出行链分析与OD矩阵的蒙特卡洛模拟方法,电动汽车充电负荷预测,出行链,OD矩阵,蒙特卡洛模拟 ,电动汽车充电负荷预测; 出行链; OD矩阵; 蒙特卡洛模拟,基于出行链的电动汽车充电负荷预测研究:蒙特卡洛模拟与OD矩阵分析
柯尼卡美能达Konica Minolta bizhub 205i 驱动
内容概要:本文全面介绍使用示波器进行一系列电学实验和项目的内容。从基础实验,如示波器的操作入门和常见波形的测量,再到进阶部分,比如电路故障排除与复杂项目设计,旨在帮助学生掌握示波器的各项技能。文中不仅提供了详尽的操作流程指导,还包括针对每个阶段的学习目标设定、预期成果评估和所需注意事项。最终通过对示波器的深入理解和熟练运用,在实际应用场景(如构造简单设备或是进行音频处理)达到创新解决问题的目的。 适用人群:面向有志于深入理解电工仪器及其应用的学生或者技术人员,尤其是刚开始接触或正在强化自己这方面能力的学习者。 使用场景及目标:①作为培训材料支持初学者快速上手专业级电工测试设备—示波器;②用于教学环节辅助讲解电学概念以及实际操作技巧;③鼓励用户参与更高层次的DIY工程任务从而培养解决问题的能力.
标题中的“ntc热敏电阻 MF52AT 10K 3950精度1%STM32采集带数字滤波”表明我们要讨论的是一个使用STM32微控制器进行数据采集的系统,该系统中包含NTC热敏电阻MF52AT作为温度传感器。NTC热敏电阻是一种负温度系数的电阻器,其阻值随温度升高而降低。MF52AT型号的热敏电阻具有10K欧姆的标称电阻和3950的B值,表示在特定温度下(通常为25℃)的阻值和温度特性曲线。精度1%意味着该电阻的阻值有1%的允许误差,这对于温度测量应用来说是相当高的精度。 描述中提到的“MF52AT热敏电阻STM32数据采集2路”,暗示我们有两个这样的热敏电阻连接到STM32微控制器的模拟输入端口,用于采集温度数据。STM32是一款基于ARM Cortex-M内核的微控制器,广泛应用于各种嵌入式系统中,包括温度监测等应用。由于STM32内部集成了多个ADC(模拟数字转换器),因此它可以同时处理多路模拟输入信号。 "带滤波,项目中实际运用,温差范围在±0.5度",这表明在实际应用中,数据采集系统采用了某种数字滤波技术来提高信号质量,可能是低通滤波、滑动平均滤波或更复杂的数字信号处理算法。
SSM框架整合是Java开发中常见的技术栈,包括Spring、SpringMVC和Mybatis三个核心组件。这个压缩包提供了一个已经验证过的整合示例,帮助开发者理解和实践这三大框架的协同工作。 Spring框架是Java企业级应用的基石,它提供了一种依赖注入(Dependency Injection,DI)的方式,使得对象之间的依赖关系得以解耦,便于管理和服务。Spring还提供了AOP(面向切面编程)功能,用于实现如日志记录、事务管理等跨切面关注点的处理。 SpringMVC是Spring框架的一部分,专门用于构建Web应用程序。它采用了模型-视图-控制器(Model-View-Controller,MVC)设计模式,将业务逻辑、数据展示和用户交互分离,提高了代码的可维护性和可扩展性。在SpringMVC中,请求被DispatcherServlet接收,然后分发到相应的处理器,处理器执行业务逻辑后返回结果,最后由视图解析并展示给用户。 Mybatis是一个优秀的持久层框架,它简化了JDBC的繁琐操作,支持SQL语句的动态编写,使得开发者可以直接使用SQL来操作数据库,同时还能保持数
分割资源UE5.3.z25
Matlab 2021及以上版本:电气工程与自动化仿真实践——电力电子变换器微网建模与仿真研究,涵盖Boost、Buck整流逆变器闭环控制及光伏蓄电池电路等多重电气仿真,基于Matlab 2021及以上的电气工程与自动化仿真研究:电力电子变换器微网建模与Boost、Buck整流逆变器闭环控制及光伏蓄电池电路等多电气仿真分析,电气工程及其自动化仿真 Matlab simulink 电力电子变器微网建模仿真 仅限matlab版本2021及以上 Boost,Buck,整流逆变器闭环控制 光伏蓄电池电路等多种电气仿真 ,电气工程; Matlab simulink; 电力电子变换器; 微网建模仿真; Boost; Buck; 整流逆变器; 闭环控制; 光伏蓄电池电路; 电气仿真,Matlab 2021版电气工程自动化仿真研究:微网建模与控制策略
移动机器人路径规划,python入门程序
《DeepSeek从入门到精通》是清华大学推出的一套深度学习学习资源,内容涵盖基础知识、实用技巧和前沿应用,适合不同水平的学习者。通过系统化的学习路径,帮助你在深度学习领域快速成长。无论你是初学者还是
考虑新能源消纳的火电机组深度调峰策略:建立成本模型与经济调度,实现风电全额消纳的优化方案,考虑新能源消纳的火电机组深度调峰策略与经济调度模型研究,考虑新能源消纳的火电机组深度调峰策略 摘要:本代码主要做的是考虑新能源消纳的火电机组深度调峰策略,以常规调峰、不投油深度调峰、投油深度调峰三个阶段,建立了火电机组深度调峰成本模型,并以风电全额消纳为前提,建立了经济调度模型。 约束条件主要考虑煤燃烧约束、系统旋转备用功率约束、启停、爬坡、储热约束等等。 复现结果非常良好,结果图展示如下: 1、代码非常精品,有注释方便理解; ,核心关键词:新能源消纳;火电机组深度调峰策略;常规调峰;不投油深度调峰;投油深度调峰;成本模型;经济调度模型;煤燃烧约束;系统旋转备用功率约束;启停约束;爬坡约束;储热约束。,新能源优化调度策略:火电机组深度调峰及经济调度研究
"数字设计原理与实践" 数字设计是计算机科学和电子工程两个领域的交叉点,涉及到数字电路的设计和实现。本书籍《数字设计-原理与实践》旨在为读者提供一个系统的数字设计指南,从基本原理到实际应用,涵盖了数字设计的方方面面。 1. 数字设计的定义和目标 数字设计是指使用数字电路和系统来实现特定的功能目标的设计过程。在这个过程中,设计师需要考虑到各种因素,如电路的可靠性、功耗、面积等,以确保设计的数字电路能够满足实际应用的需求。 2. 数字设计的基本原理 数字设计的基本原理包括数字电路的基本元件,如逻辑门、 Flip-Flop、计数器、加法器等,以及数字电路的设计方法,如Combinational Logic、Sequential Logic和 Finite State Machine等。 3. 数字设计的设计流程 数字设计的设计流程通常包括以下几个步骤: * 需求分析:确定设计的目标和约束条件。 *电路设计:根据需求设计数字电路。 * 仿真验证:使用软件工具对设计的数字电路进行仿真和验证。 * 实现和测试:将设计的数字电路实现并进行测试。 4. 数字设计在实际应用中的应用 数字设计在实际应用中
基于Simulink仿真的直流电机双闭环控制系统设计与分析:转速电流双闭环PWM控制策略及7天报告研究,基于Simulink仿真的直流电机双闭环控制系统分析与设计报告:转速电流双闭环PWM控制策略的7天实践,直流电机双闭环控制系统仿真 simulink仿真 7d 转速电流双闭环 PWM 含有报告哈 ,直流电机; 双闭环控制系统; Simulink仿真; 7d; 转速电流双闭环; PWM; 报告,7天完成双闭环控制系统仿真报告:直流电机转速电流PWM管理与Simulink仿真研究
三目标微电网能量调度优化:经济、环境友好与高效能分配的协同策略研究,微粒群算法在三目标微电网能量调度中的应用:经济、环境友好与优化调度的综合研究,微电网 能量调度 三目标微网调度, 经济调度 环境友好调度 优化调度 微电网能量调度问题的求解 问题描述: - 微电网:包含多个能量源,包括DG(分布式发电设备,如太阳能光伏板、微型燃气轮机等)、MT(燃油发电机)和FC(燃料电池)。 - 目标:通过合理分配各种能源的发电功率,满足负荷需求,同时使得微电网的发电成本最小化。 解决方法: 微粒群算法(Particle Swarm Optimization, PSO): - 步骤: - 初始化微粒群:根据给定的微电网问题约束,随机生成一定数量的微粒(粒子),每个粒子代表一种发电方案,包含DG、MT和FC的发电功率分配情况。 - 适应度函数:对每个粒子,计算其对应的发电成本,作为其适应度值。 - 更新速度和位置:根据当前适应度值和历史最优适应度值,通过PSO算法的公式,更新每个粒子的速度和位置,以寻找更优的发电功率分配。 - 约束处理:根据问题约束条件,
《无感滑膜技术:Microchip1078代码移植至ST芯片的实践指南》——新手必备的反正切算法与电子资料整合方案,《无感滑膜技术:Microchip1078代码移植至ST芯片的实践指南》——新手必备的反正切算法与电子资料全解析,无感滑膜,反正切,microchip1078代码移植到st芯片上,新手学习必备。 可以提供提供相应文档和keil工程,电子资料, ,无感滑膜; 反正切; microchip1078代码移植; ST芯片; 新手学习; 文档; Keil工程; 电子资料,无感滑膜算法移植至ST芯片的Microchip1078代码迁移指南
风光柴储混合微电网系统中的储能电池与互补能量管理技术研究及MATLAB模拟实现,风光柴储混合微电网系统中的储能电池与互补能量管理技术:基于MATLAB的智能调控体系,风光柴储+混合微电网+储能电池系统+互补能量管理+MATLA ,核心关键词:风光柴储; 混合微电网; 储能电池系统; 互补能量管理; MATLA;,风光柴储混合微网能量管理系统及储能电池应用
永磁同步电机PMSM无感FOC驱动与位置估算源码分享:跨平台兼容、高速动态响应、无需初始角度辨识,永磁同步电机PMSM无感FOC驱动与位置估算源码分享:跨平台兼容、高速动态响应、无需初始角度辨识,永磁同步电机pmsm无感foc驱动代码 位置估算源码 无刷直流电机无感foc源码,无感foc算法源码 若需要,可提供硬件 速度位置估算部分代码所使用变量全部使用国际标准单位,使用不到60行代码实现完整的位置速度观测器。 提供完整的观测器文档,供需要的朋友参考 程序使用自研观测器,代码全部是源码,不含任何库文件 送simulink仿真 代码可读性极好,关键变量注明单位 模块间完全解耦 高级工程师磁链法位置估算代码 跨平台兼容,提供ti平台或at32平台工程 电流环pi参数自动计算 效果如图 实现0速闭环启动 2hz以内转速角度收敛 动态响应性能好 无需初始角度辨识 电阻电感允许一定误差 ,核心关键词: 1. 永磁同步电机 (PMSM) 无感 FOC 驱动代码 2. 位置估算源码 3. 无刷直流电机无感 FOC 源码 4. 无感 FOC 算法源码 5. 硬件支持(可选) 6. 速度位置估算部分
模型可以通过管理器下载,一个sdxlbase一个sdxl refiner。 refiner的作用是先刷小图,满意了再提高分辨率,兼顾速度和质量。 导入ComfyUI可立即使用。