当前位置: 首页 > 编程日记 > 正文

DotNet关键知识点——WCF篇(六)

关于WCF消息通信的安全性论题。

1. 传输层面的安全性

一般方法:
binding单元中加security单元,security一般含mode属性,一般将其设置为"Transport",随后在security单元中加入transport单元,并对其参数作设置。(配置文件中单元名称为起首小写,对应代码中名称为起首大写)
传输层面安全性能够保证信息私密和完整性,而其能力依赖于支持传输的协议。

Binding类型使用特性和说明
basicHttpBindingSecurity:类型BasicHttpSecurity
Securty.Mode:类型BasicHttpSecurityMode,取值Message,None,Transport,TransportCredentialOnly,TransportWithMessageCredential
Security.Transport:类型HttpTransportSecurity
Security.Transport.ClientCredentialType:类型HttpClientCredentialType,取值Basic(明文发送credentials),Certificate,Digest(credentials传输前hash),None,Ntlm,Windows(客户端Windows帐号)
Security.Transport.ProxyCredentialType:类型HttpProxyCredentialType,取值Basic,Digest,None,Ntlm,Windows
string Security.Transport.Realm:类型string
目标服务支持:ASMX v1, WSE apps; Basic Profile (WS-I); basic security profile WS-I。安全传输协议:HTTPS
IIS兼容

唯一的默认状态下不开启安全性的内建绑定类型
wsHttpBindingSecurity:类型WSHttpSecurity
Security.Mode:类型SecurityMode,取值None,Transport,Message,TransportWithMessageCredential
Security.Transport同上
目标服务支持:SOAP v1.2和WS-Addressing。安全传输协议:HTTPS
wsDualHttpBinding/不支持传输层安全性配置(因需要两侧都有支持安全性的监听)
netTcpBindingSecurity:类型NetTcpSecurity
Security.Mode:类型SecurityMode
Security.Transport:类型TcpTransportSecurity
Security.Transport.ClientCredentialType:类型TcpClientCredentialType,取值Certificate,None,Windows(默认)
Security.Transport.ProtectionLevel:类型ProtectionLevel,取值EncryptAndSign(消息加密并签名),None,Sign(仅签名)
基于TCP协议层
netNamedPipeBindingSecurity:类型NetNamedPipeSecurity
Security.Mode:类型SecurityMode
Security.Transport:类型TcpTransportSecurity
基于命名管道,其配置类似于TCP绑定
msmqIntegrationBindingSecurity:类型MsmqIntegrationSecurit
Security.Mode:类型MsmqIntegrationSecurityMode,取值None,Transport
Security.Transport:类型MsmqTransportSecurity
~.MsmqAuthenticationMode:类型~,取值Certificate,None,WindowsDomain
~.MsmqEncryptionAlgorithm:类型~,取值Aes, RC4Stream
~.MsmqProtectionLevel:类型ProtectionLevel
~.MsmqSecureHashAlgorithm:类型MsmqSecureHashAlgorithm,取值MDS,Sha1,Sha256,Sha512
整合非WCF的MSMQ端点
认证模式:Certificate在非AD DS场合是仅有的提供认证支持的方法
WCF必须能够接入AD DS才能有效地加密信息。
EncryptionAlgorithm指定消息编码算法,HashAlgorithm用于设置签名的散列算法。
netMsmqBindingSecurity:类型NetMsmqSecurity
Security.Mode:类型NetMsmqSecurityMode,取值None,Both,Message,Transport
Security.Transport:类型MsmqTransportSecurity


基于HTTP的Binding采用SSL保证传输层面安全,其他的如基于TCP的绑定一般用ProtectionLevel属性等设置加密签名等安全特性。

关于SSL配置(详细参考教材和相关文档)
1. binding的security中将mode设为含Transport,其clientCredentialType可设为Windows;address中使用支持SSL的协议
2. 用makecert生成根证书(公/私钥对),-n选项设置x509name,形如CN=…
3. 用certmgr将根证书加入Trusted Root Certificate Authority(在Server 2008尝试,就直接用UI操作即可,其效果类同mmc中Certificates中选取Current User模式)
4. 用makecert根据根证书生成并安装供localhost端口使用的certificate
5. 在mmc的Certificates管理Local Computer模式中找到以上安装的证书,取出thumbprint
6. 用netsh http add sslcert为端口配置SSL,参数包括上述thumbprint和一个随机任意的guid。
至此SSL传输配置完毕。


证书查看
在mmc中可以查看Local Computer(Administrator登录)和User Account的Certificate,也可通过Internet Explorer的选项观看证书。

参考:
Configuring Server Certificates in IIS: http://technet.microsoft.com/en-us/library/cc732230(WS.10).aspx
Install an Inernet Server Certificate (IIS 7): http://technet.microsoft.com/en-us/library/cc771816(WS.10).aspx
How to Configure a Port with an SSL Certificate: http://msdn.microsoft.com/en-us/library/ms733791.aspx
Working with Certificates: http://msdn.microsoft.com/en-us/library/ms731899.aspx
How to Create Temporary Certificates for Use During Development: http://msdn.microsoft.com/en-us/library/ms733813.aspx
Certificate Creation Tool (makecert.exe) http://msdn.microsoft.com/en-us/library/bfsktky3(VS.80).aspx
How to Use Transport Security with Message Credentials: http://msdn.microsoft.com/en-us/library/ms789011.aspx

2. 消息层面的安全性

1. 对消息本身加密,因此在端到端(或中继)之外的流程消息也是加密的。
2. 支持对消息的各部分采用不同的加密策略;可对各部分加密,也可对整体加密。
3. 底层协议为WS-Security,因此具有协议无关性。
4. Credentials和消息一起提供(传输层面安全性则通过外部机制实现Credentials认证,如握手和AD DS)

binding单元中加入security单元,和security单元并列加入message单元并设置其clientCredentialType属性,包括:Certificate, IssueToken, None, UserName, Windows。消息层面安全过程和用户层身份认证联系紧密,详见下一节。
binding中的security设置:
binding的Security属性上的Message属性(呈XXXMessageSecurityYYY类型)和config文件中message对应。

消息层面安全性的加密算法,message的algorithmSuite(WS-SecurityPolicy)
algorithmSuite描述算法属性,包括:
Encryption type; Digest type…
Symmetric (always HmacSha1) / asymmetric (always RsaSha1) key signature
Symmetric / asymmetric key wrap
The computed key (always PSha1)
Maximum (always 256 bits) / minimum key lengths for symmetric key
Maximum (always 4096 bits) / minimum (always 1024) key lengths for asymmetric key
参考:http://fusesource.com/docs/framework/2.2/security/MsgProtect-SOAP-SpecifyAlgorithmSuite.html
algorithmSuite不支持队列和命名管道相关bindings。

message的establishSecurityContext属性(WS-SecureConversation)
默认设置为true,用于C/S来回通信的安全环境保障,仅适用于WS-HTTP系列的部分bindings。

message的negotiateServiceCredential属性
为消息层面安全建立而进行的协商。当设置为true,自动用Windows的SPNEGO协商;设为false时,当clientCredentialType为None, UserName和Certificate时,Client采用Service端提供的certificate(serviceCredentials行为中serviceCertificate定义),当为Windows时,必须在同一个域内,并使用Kerberos认证。
仅适用于WS-HTTP系列的bindings。

绑定所支持的安全性模式:

BindingTransport ModeMessage ModeTransport with
MessageCredential
basicHttpBindingYYY (an additional ‘transport-credential only’ mode)
wsHttpBindingYYY
wsDualHttpBindingNYN
netTcpBindingYYY
netNamedPipeBindingYNN
netMsmqBindingYYN  (an additional ‘Both’ mode)
msmqIntegrationBindingYNN
wsFederationBindingNYY


参考:见下一节。

3. 身份鉴定 (Authentication)

以下仅列出在配置文件中的声明式配置,代码配置可类似推导。
仅basicHttpBinding只支持UserName和Certificate方式。

方式对应凭据类型(MessageCredentialType类型)配置方法(service侧配置文件)说明
无认证None
WindowsWindows设置binding内消息安全性的credentialType为"Windows"
行为配置(代码为例):proxy.ClientCredentials.Windows
.ClientCredential(用户名、密码、域信息), .AllowImpersonationLevel, .AllowNtlm
当实行(C/S)双向认证时,必须关闭AllowNtlm,因为只有Kerberos支持
是message默认的clientCredentialType
用户名和密码UserName设置:proxy.ClientCredentials.UserName
.UserName, .Password
X.509证书Certificate设置binding内消息安全性的credentialType为"Certificate"
增加behavior设置(cfg为例)加入<serviceCredentials><serviceCertificate findValue=... x509FindType ... />
或者调用host.Credentials.ServiceCertificate.SetCertificate
(ServiceCertificate类型为X509CertificateRecipient???Credential,ClientCertificate为X509CertificateInitiator???Credential,???在host处为Service,proxy处为Client)
令牌发行IssuedToken在端点中增加:<identity><certificateReference findValue="…" x509FindType="FindByThumbprint" storeLocation="LocalMachine" storeName="My" /> 用于证明service的identity。
(storeName的可能值:AddressBook,AuthRoot,CertificateAuthority,Disallowed,My,Root,TrustedPeople,TrustedPublisher;x509FindType中DistinguishedName指严格匹配)
设置binding内消息安全性的credentialType为"IssuedToken"
增加behavior设置,内含<serviceCredentials><serviceCertificate .../>,采用的certificate同以上identity
由第三方发行令牌,客户端将令牌和请求一同发给服务,服务再从该第三方获得请求者信息

自定义认证n/a1. message的clientCredentialType必须设为UserName,service必须因此而附一个含公/私钥的certificate,其中公钥用于让client对UserName进行加密传送
2. 可继承UserNamePasswordValidator创建一个认证类,重载void Validate(un, pwd) throws SecurityTokenValidationException,并将其设置在serviceCredentials的userNameAuthentication中,userNamePasswordValidationMode改为Custom,用以替换Service默认的对其进行Windows认证的行为



参考:
Set the Security Mode: http://msdn.microsoft.com/en-us/library/ms731884.aspx
Message Security in WCF: http://msdn.microsoft.com/en-us/library/ms733137.aspx
How to Secure a Service with an X.509 Certificate: http://msdn.microsoft.com/en-us/library/ms788968.aspx
ASP.NET的Membership Provider(不依赖于Windows Domain: http://msdn.microsoft.com/en-us/library/ms731049.aspx
Implementing Transport and Message Layer Security: http://msdn.microsoft.com/en-us/library/aa480582.aspx
Implementing Message Layer Security with Kerberos in WSE 3.0: http://msdn.microsoft.com/en-us/library/aa480577.aspx
Implementing Message Layer Security with X.509 Certificate in WSE 3.0: http://msdn.microsoft.com/en-us/library/aa480581.aspx; <x509> element: http://msdn.microsoft.com/en-us/library/aa529251.aspx
Service Identity and Authentication: http://msdn.microsoft.com/en-us/library/ms733130.aspx; How to Create a Custom Identity Verifier: http://msdn.microsoft.com/en-us/library/ms734778.aspx
How to Use Separate X.509 Certificates for Signing and Encryption: http://msdn.microsoft.com/en-us/library/ms729856.aspx
How to Change the Cryptographic Provider for an X.509 Certificate's Private Key: http://msdn.microsoft.com/en-us/library/ms733772.aspx
How to Configure Credentials on a Federation Service: http://msdn.microsoft.com/en-us/library/ms730131.aspx; Federations and Issued Tokens: http://msdn.microsoft.com/en-us/library/ms731161.aspx; (Federation Overview: http://msdn.microsoft.com/en-us/library/ms730908.aspx)
How to Use a Custom User Name and Password Validator: http://msdn.microsoft.com/en-us/library/aa702565.aspx
UserNamePasswordValidator Classhttp://msdn.microsoft.com/en-us/library/system.identitymodel.selectors.usernamepasswordvalidator.aspx
Overriding the Identity of a Service for Authentication: http://msdn.microsoft.com/en-us/library/bb628618.aspx


 4. 授权 (Authorization)

不许可授权均抛出异常:SecurityException

方法1. 基于.NET CLR的Identity/Principal(Identity+Roles)


方法2. 基于主张的授权机制(Claims-based Authorization)

1. requester提供的安全令牌
2. administrator设定的配置、记录信息等
3. service authorization manager做出决定

ServiceSecurityContext实例在OperationConext.Current.ServiceSecurityContext上提供。

实现IAuthorizationPolicy提供自定义的authorization policy(参见7. 定制Token)。
在serviceBehaviors中添加behavior,<serviceAuthorization principalPermissionMode=".../Custom" {roleProviderName="..."}><authorizationPolicies><add policyType="例如DemoService.SpecificRoleAuthorizationPolicy, DemoService"/>

Role Provider在<system.web>中添加<roleManager enabled="true" defaultProvider="..."><providers><add name="..." type="System.Web.Security.XXXProvider" .../>


参考:
ASP.NET的Role Provider(不依赖于Windows Domain): http://msdn.microsoft.com/en-us/library/ms734774.aspx
ASP.NET的Authorization Manager Role Provider (AzManRoleProvider): http://msdn.microsoft.com/en-us/library/ms734774.aspx
Access Control Mechanisms: http://msdn.microsoft.com/en-us/library/ms733106.aspx
Managing Claims and Authorization with the Identity Model: http://msdn.microsoft.com/en-us/library/ms729851.aspx
Claims and Tokens: http://msdn.microsoft.com/en-us/library/aa347996.aspx
Claims Creation and Resource Values: http://msdn.microsoft.com/en-us/library/aa347788.aspx
How to Restrict Access with the PrinciplePermissionAttribute Class: http://msdn.microsoft.com/en-us/library/ms731200.aspx
How to Create a Custom Authorization Policy: http://msdn.microsoft.com/en-us/library/ms729794.aspx; ServiceAuthorizationManager Class: http://msdn.microsoft.com/en-us/library/system.servicemodel.serviceauthorizationmanager.aspx
How to Create a Custom Principal Identity: http://msdn.microsoft.com/en-us/library/aa702720.aspx

5. 模仿(Impersonation)

模仿要求请求(request)具有一个Windows Identity

模仿级别:
None  - 未指定级别
Anonymous - 不发生任何模仿行为(服务无法得到客户的身份信息)
Identification - 服务可以得到客户的身份信息,但不能扮演客户访问信息
Impersonation - 服务可以扮演客户访问本地信息
Delegation - 服务可以扮演客户访问本地和远程信息

传输层面模仿

HTTP Authentication和基于SOAP的模仿
Basic - 仅支持Delegate,其余级别均提升到Delegate
Digest - Impersonate和Delegate
NTLM - 仅Delegate
Kerberos - 所有

使用模仿

请求必须具有一个Windows Identity

Declarative方式:
[OperationBehaviorAttribute(Impersonation=ImpersonationOption.???)]
Allowed - 仅在服务权限不够时方援引模仿
Required - 服务总是使用模仿,甚至模仿造成权限下降

Imperative方式:
1. 从ServiceSecurityContext.Current.WindowsIdentity中得到WindowsIdentity实例
2. 调用WindowsIdentity实例上Impersonate()方法,获得WindowsImpersonateContext实例(最好用using)

全局打开(服务行为设置):
1. 在ServiceHost实例中上:调用~.Description.Behavior.Find(),获得ServiceAuthorizationBehavior实例behavior
2. behavior.ImpersionateCallerForAllOperations = true

Cached Token Impersonation: 客户端使用Windows Credential或能映射到Windows Identity(ws...Binding, netTcpBinding ;basic...Binding需将security mode设为TransportWithMessageCredentials;custom binding需要开启requireCancellation)
S4U Impersonation: 客户端credential能映射到Windows Identity提供Kerberos提供的令牌(Token),令牌直接用于提供impersonation信息(ws...Binding, netTcpBinding;custom binding关闭requireCancellation, 用Windows或UserName credentials)。

参考:
How to Impersonate a Client on a Service: http://msdn.microsoft.com/en-us/library/ms731090.aspx
How to Create a Stateful Security Context Token for a Secure Session: http://msdn.microsoft.com/en-us/library/ms731814.aspx (Stateful SCT不支持Impersonation,也必须使用一个含user profile的用户帐号)
WindowsClientCredential.AllowedImpersonationLevel Property: http://msdn.microsoft.com/en-us/library/system.servicemodel.security.windowsclientcredential.allowedimpersonationlevel.aspx
Delegation and Impersonation with WCF: http://msdn.microsoft.com/en-us/library/ms730088.aspx
Impersonating the Client: http://msdn.microsoft.com/en-us/library/ms751513.aspx


6. 定制Credentials

ClientCredentials和SeviceCredentials : abstract SecurityCredentialsManager,需要实现CreateSecurityTokenManager方法。

ClientCredentials实例在client的endpoint behavior即client.ChannelFactory.Endpoint.Behaviors.Add添加;在config文件中添加:
需要先继承ClientCredentialsElement,重载Properties,其中注册自定义的元素属性;重载CreateBehavior,其中调base.ApplyConfiguration应用Credentials。随后在<system.serviceModel><extensions><behaviorExtensions><add name=”%name%” type=”…类型说明…”/>中加入这个类型,然后在<endpointBehaviors><behavior><%name% 自定义元素属性…>加载这个Credentials。

ServiceCredentials实例在service的behavior即ServiceHost实例.Description.Behaviors.Add添加;在config中添加类似,只是这个ServiceCredentialsElement在serviceCredentials中加载。

7. 定制Token

1. 继承SecurityToken,重载SecurityKeys属性,返回SecurityKey集合,SecurityKeys用于加密信息。
  (例如:继承X509AsymmetricSecurityKey : .. : SecurityKeys可定制X509证书的加密模式,继承X509SecurityToken : … : SecurityToken包装该Key实例)
2. 继承SecurityTokenParameters,描述SecurityToken,供WCF系统参考。继承CloneCore, Support…,InitializeSecurityTokenRequirement(SecurityToken的类型,用于SecurityTokenProvider生成合适的Token实例),CreateKeyIdentifierClause(WCF引用SecurityToken实例时参考)
3. 继承WSSecurityTokenSerializer创建Serializer已完成Token在通道中的转换(Token随同Message经历Pipeline),重载实现CanRead/WriteTokenCore,Read/WriteTokenCore。
4. 继承SecurityTokenProvider,用于产生Token。重载实现GetTokenCore,提供对应的SecurityToken的实例。
5. 继承SecurityTokenAuthenticator,重载实现CanValidateTokenCore,ValidateTokenCore(返回ReadOnlyCollection<IAuthorizationPolicy>,其中加入Token的ClaimSet),用于鉴定解序列化后的Token。
    实现IAuthorizationPolicy接口定制授权策略,即上述需要返回的Policy。实现Id, Issuer属性和Evaluate方法,Evaluate方法中EvaluationContext代表策略的结果,它往往包含一组ClaimSets。
6. 继承ClientCredentialsSecurityTokenManager和ServiceCredentialsSecurityTokenManager,重载CreateSecurityTokenProvider/Authenticator和CreateSecurityTokenSerializer,产生上述的对象。
7. 继承ClientCredentials和ServiceCredentials,重载CloneCore,CreateSecurityTokenManager,产生上述Manager。
8. 集成到Binding中:例如用Service的Certificate公钥加密:
    创建SymmetricSecurityBindingElement实例(最终加入Binding):
       ~.EndpointSupportingTokenParameters.SignedEncrypted.Add(步骤2创建的Parameters对象)
       ~.ProtectionTokenParameters = X509SecurityTokenParameters实例
       ~.InclusionMode = SecurityTokenInclusionMode.Never

转载于:https://www.cnblogs.com/quanben/archive/2010/04/09/3128922.html

相关文章:

AAC_LC用LATM封装header信息解析 Audio Specific Config格式分析

通常来说AAC的头信息在编解码过程中是可以获取到的&#xff0c;但今天需要根据音频参数生成相应的AAC头。项目中使用的是AAC_LC&#xff0c;今天先对它的结构进行分析。 项目中使用ffmpeg进行音频编码&#xff0c;音频编码库为FAAC&#xff0c;好吧&#xff0c;直接看代码吧。 …

【怎样写代码】对象克隆 -- 原型模式(二):解决方案

如果喜欢这里的内容&#xff0c;你能够给我最大的帮助就是转发&#xff0c;告诉你的朋友&#xff0c;鼓励他们一起来学习。 If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn together.

计算机二级周小丹,亲爱的设计丨周小丹:始终认真,才能保持“天真”

从事室内设计&#xff0c;女性好像天然占了一些优势&#xff0c;比如对色彩和美学的敏感性、更强的沟通能力以及相较大多数男性而言更细致的观察力等等。但在实操层面&#xff0c;室内设计这一行实则非常考验女性设计师的“体能”&#xff0c;比如下工地、熬夜赶图等等。从北京…

最近在招标中评审出一个政府信息化软件

发布时间&#xff1a; &#xff1a;2010-03-31 18:42 浏览次数&#xff1a; &#xff1a; 5 产品名称&#xff1a; 卓技协同政府审批系统 V3.0(http://http://www.exctek.com/)英文名&#xff1a; ExctekSoft.CGA(Collaborative Government Approval) 适用客户&#xff…

克里斯坦森的破坏性创新—《可以量化的管理学》

6.4.4作用点与克里斯坦森的破坏性创新 内容提要&#xff1a;消费者对商品的需求焦点会随着商品的发展而从功能性到可靠性&#xff0c;到便利性&#xff0c;最后转移到价格。克莱顿•克里斯坦森(Clayton M. Christensen)所创造的破坏性创新就是指消费者需求焦点的转移&#xff0…

【怎样写代码】对象克隆 -- 原型模式(三):原型模式

如果喜欢这里的内容&#xff0c;你能够给我最大的帮助就是转发&#xff0c;告诉你的朋友&#xff0c;鼓励他们一起来学习。 If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn together.

楼主考南师计算机学硕,南京师范大学考研详解:据说这所学校不太好考?嗯,是真的!...

学校&#xff1a;南京师范大学地区&#xff1a;江苏省属性&#xff1a;“211工程”院校、“双一流”世界一流学科建设高校关于南师大南京师范大学&#xff0c;地处江苏南京&#xff0c;拥有绝佳的地理位置。在全国第四轮学科评估中&#xff0c;2个学科获得A&#xff0c;4个学科…

asp页面和Asp.net页面传中文参数UrlEncode编码以及接收解码

在asp中加一个链接&#xff0c;指向asp.net网页&#xff0c;但asp.net的网址是经过HttpUtility.UrlEncode转换和HttpUtility.UrlDecode解码的&#xff0c;而asp的server.urlencode却和HttpUtility.UrlEncode的编码方式不一样&#xff0c; 举例&#xff1a;asp.net用Get方式传输…

MyBatis关联查询、多条件查询

MyBatis关联查询、多条件查询 1、一对一查询 任务需求; 根据班级的信息查询出教师的相关信息 1、数据库表的设计 班级表&#xff1a; 教师表&#xff1a; 2、实体类的设计 班级表&#xff1a; public class Classes { 9 //定义实体类的属性&#xff0c;与class表中的字段对…

【怎样写代码】对象克隆 -- 原型模式(四):浅克隆与深克隆

如果喜欢这里的内容&#xff0c;你能够给我最大的帮助就是转发&#xff0c;告诉你的朋友&#xff0c;鼓励他们一起来学习。 If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn together.

计算机与控制学院优秀学生,三好学生主要事迹:计算机与控制工程学院王天琪事迹.doc...

三好学生主要事迹&#xff1a;计算机与控制工程学院王天琪事迹“中国好同学”、“中国好男孩”、“中国好男友”——用这“三好”来形容王天琪再合适不过。这个四川男生笑容温暖&#xff0c;彬彬有礼&#xff0c;生长于南方却操着一口标准的普通话&#xff0c;交谈中时而有些羞…

[总结]博客聚合-cnblogs,wordpress,live writer,word2010

一、url地址&#xff1a; cnblogs&#xff1a; http://BusyAnt.cnblogs.com/services/metaweblog.aspx wordpress: http://blog.busyant.cn/xmlrpc.php CSDN&#xff1a;http://blog.csdn.net/busyant/services/metablogapi.aspx 二、配置&#xff1a; word2010&#xff1a;文件…

【怎样写代码】对象克隆 -- 原型模式(五):原型管理器的引入和实现

如果喜欢这里的内容&#xff0c;你能够给我最大的帮助就是转发&#xff0c;告诉你的朋友&#xff0c;鼓励他们一起来学习。 If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn together.

Android 基于 Speex 的高度封装语音库,0 耦合,没三方jar包

作者&#xff1a;林冠宏 / 指尖下的幽灵 掘金&#xff1a;https://juejin.im/user/587f0dfe128fe100570ce2d8 博客&#xff1a;http://www.cnblogs.com/linguanh/ GitHub &#xff1a; https://github.com/af913337456/ 为了您的直观体验&#xff0c;请务必看完下面 截图&#…

计算机累加器有加法器功能吗,累加器-累加器ACC的作用

ACC累加器B用于辅助累加器做某些运算的寄存器PSW程序状态字其中最高位是进/借位标志C&#xff1b;PSW.6是辅助进位标志AC&#xff0c;用于标识加减运算中低四位向高四位的进位&#xff1b;PSW.4和PSW.3是寄存器组选择位RS1和RS0&#xff0c;用于从--1FH的32个存储器单元(4组)中…

object expected错误解决方法

写一个页面&#xff0c;引用了另外的js&#xff0c;结果触发js事件时&#xff0c;浏览器显示"object expected "错误&#xff0c;说什么action有错&#xff0c;在action硬是纠结了半天&#xff0c;结果发现是由于action跳转之后&#xff0c;路径错了&#xff0c;所以…

Eclipse优化之设置不自动弹出控制台和Server

有时候Eclipse启动&#xff0c;控制台console不会自动跳出来&#xff0c;需要手工点击该选项卡才行&#xff0c; 按下面的设置&#xff0c;可以让它自动跳出来(或不跳出来)&#xff1a; windows -> preferences -> run/debug -> console 在右边面板勾选或…

【怎样写代码】复杂对象的组装与创建 -- 建造者模式(一):问题案例

如果喜欢这里的内容&#xff0c;你能够给我最大的帮助就是转发&#xff0c;告诉你的朋友&#xff0c;鼓励他们一起来学习。 If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn together.

css menu builder,AutoPlay Menu Builder使用教程【图文教程】

是一个功能强大的光盘自动运行菜单制作工具&#xff0c;使用它,你不需要具备任何专业知识,只需要经过鼠标拖放和几次鼠标点击就可以轻松制作出非常漂亮的自动运行(AutoRun)菜单程序,让你制作菜单象垒积木一样容易!二、软件使用1、如图一所示&#xff0c;软件启动时首先随程序主…

freemarker写select组件报错总结(六)

1、错误描写叙述 六月 26, 2014 10:53:26 下午 freemarker.log.JDK14LoggerFactory$JDK14Logger error 严重: Template processing error: "Expression data[text] is undefined on line 9, column 51 in inc/select.ftl."Expression data[text] is undefined on lin…

FPGA中LVDS差分高速传输的实现

低压差分传送技术是基于低压差分信号(Low Volt-agc Differential signaling)的传送技术&#xff0c;从一个电路板系统内的高速信号传送到不同电路系统之间的快速数据传送都可以应用低压差分传送技术来实现&#xff0c;其应用正变得越来越重要。低压差分信号相对于单端的传送具有…

【怎样写代码】复杂对象的组装与创建 -- 建造者模式(二):解决方案

如果喜欢这里的内容&#xff0c;你能够给我最大的帮助就是转发&#xff0c;告诉你的朋友&#xff0c;鼓励他们一起来学习。 If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn together.

自动化测试selenium+java学习笔记

//driver后面接 get(String url) 访问指定url页面 getCurrentUrl() 获取当前页面的url地址 getTitle() 获取当前页面的标题 getPageSource() 获取当前页面源代码 quit() …

JS实现继承的几种方法

父类&#xff1a; // 定义一个动物的类 function Animal (name) {// 属性this.name name || Animal;// 实例方法this.sleep function(){console.log(this.name 正在睡午觉&#xff01;);} } // 原型方法 Animal.prototype.eat function(food) {console.log(this.name 正在…

【怎样写代码】复杂对象的组装与创建 -- 建造者模式(四):扩展案例

如果喜欢这里的内容&#xff0c;你能够给我最大的帮助就是转发&#xff0c;告诉你的朋友&#xff0c;鼓励他们一起来学习。 If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn together.

接口测试和单元测试的区别

1、单元测试注重代码逻辑&#xff0c;接口测试注重业务逻辑&#xff1b; 2、单元测试的粒度最小&#xff0c;是测试最小独立的单元模块&#xff08;不依赖其他模块&#xff09;&#xff1b;接口测试不是&#xff0c;会覆盖很多&#xff1b; 3、单元测试是白盒测试&#xff0c…

改善FLEX/FLASH性能的小技巧(转)

使用下面的几个改善性能的技巧&#xff0c;如果你使用Flex Builder&#xff0c;那么可以使用调试窗口查看你的程序中关键的几步创建对象和内存回收的情况。有时细小的调整会造成很大的不同。下面是一小部分能够改善你的程序性能的做法&#xff1a;1)如果不知道一个对象的类型&a…

机器学习算法(3:决策树算法)

一、决策树简介 决策树是附加概率结果的一个树状的决策图&#xff0c;是直观的运用统计概率分析的图法。机器学习中决策树是一个预测模型&#xff0c;它表示对象属性和对象值之间的一种映射&#xff0c;一颗决策树是一棵有向无环树&#xff0c;它由若干个节点、分支、分裂谓词以…

【怎样写代码】复杂对象的组装与创建 -- 建造者模式(三):建造者模式

如果喜欢这里的内容&#xff0c;你能够给我最大的帮助就是转发&#xff0c;告诉你的朋友&#xff0c;鼓励他们一起来学习。 If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn together.

Junit单元测试需要知道的一些知识点

Junit单元测试框架—基于java语言对的主流单元测试框架 beforeClass—位于数据准备前期或者其他前期准备&#xff08;测试类调用前&#xff09; --用于提取代码中的共用部分减少冗余&#xff0c;只能声明注解一次 --必须在public static void,方法名随意&#xff0c;&#x…