javatm platform
standard ed. 6

javax.security.sasl
接口 saslserver


public interface saslserver

以服务<fú wù>器的身份执行 sasl 验证。

为了执行具体 sasl 机制所定义的验证,服务<fú wù>器(例如 ldap 服务器)要获得此类的一个实例。调用 saslserver 实例上的方法可生成与 saslserver 所实现的 sasl 机制相对应的 challenge。随着<suí zhe>验证的进行,该实例会封装 sasl 服务器的验证交换状态。

以下是 ldap 服务器如何<rú hé>使用 saslserver 的一个示例。它首先为客户<customer base>端请求的 sasl 机制获得一个 saslserver 实例:

 saslserver ss=sasl.createsaslserver(mechanism, "ldap", myfqdn, props, callbackhandler);
然后可继续为验证使用该服务器。例如,假设 ldap 服务器接收到<received>一个 ldap bind 请求,其中包含 sasl 机制的名称和(可选的)初始响应。然后它可按如下方式使用服务器:
 while (!ss.iscomplete()) { try {   byte[] challenge=ss.evaluateresponse(response);   if (ss.iscomplete()) {   status=ldap.sendbindresponse(mechanism, challenge, success);   } else {   status=ldap.sendbindresponse(mechanism, challenge,    sasl_bind_in_progress);   response=ldap.readbindrequest();   } } catch (saslexception e) {  status=ldap.senderrorresponse(e);  break; } } if (ss.iscomplete() && status==success) {  string qop=(string) sc.getnegotiatedproperty(sasl.qop);  if (qop !=null   && (qop.equalsignorecase("auth-int")   || qop.equalsignorecase("auth-conf"))) { // use saslserver.wrap() and saslserver.unwrap() for future // communication with client  ldap.in=new secureinputstream(ss, ldap.in);  ldap.out=new secureoutputstream(ss, ldap.out);  } }

从以下版本开始<appeared>:
1.5
另请参见:
sasl,saslserverfactoryjs随机数

方法摘要
 voiddispose()
          处置 saslserver 可能<kě néng>使用的所有<suǒ yǒu>系统资源或安全<ān quán>敏感<gǎn>信息。
 byte[]evaluateresponse(byte[] response)
          评估响应数据并生成一个 challenge。
 stringgetauthorizationid()
          报告此会话客户<customer base>端的有效授权 id。
 stringgetmechanismname()
          返回此 sasl 服务器的 iana 注册机制名。
 objectgetnegotiatedproperty(string propname)
          获取已协商的属性。
 booleaniscomplete()
          确定验证交换是否已完成。
 byte[]unwrap(byte[] incoming,int offset,int len)
          解包接收自客户端的 byte 数组。
 byte[]wrap(byte[] outgoing,int offset,int len)
          包装要发送到客户端的 byte 数组。
 

方法详细信息

getmechanismname

string getmechanismname()
返回此 sasl 服务器的 iana 注册机制名。(例如 "cram-md5"、"gssapi")。

返回:
表示 iana 注册机制名的非 null 字符串。

evaluateresponse

byte[] evaluateresponse
岁月悠悠转眼近7年,今将昔日这篇拙作,稍作整理,再拿出来晒晒,让过去的看法与今日结果,作一对照
陈德铭2月来台出席两岸两会第10次高层会谈时,海基会董事长林中森曾转述,陈希望<xī wàng>能到东部体验台湾<tái wān>观光发展经验,之后也多次表达下半年访台意愿
工作<gōng zuò>人员在影片中表示,柯阵营监票<piào>部队此次创下两个纪录,一是台北市60年来首次有非国民党籍的候选人在每个开票<piào>所派满监票员;二是2700人监督1534个投票所,让每个投开票所都蒙有将近2名监票员,使得投开票报表的回收率可高达99
这篇贴文,引来大批网友评论<comment>,有人支持<zhī chí>犀利哥,认为来自大陆江西的犀利哥更率性,不用刻意打扮就够帅,
之后,公民有了声音,但责任才要开始<appeared>,每一位公民都成了推动进步的力量,也必须符合
新北市长朱立伦5日与总统<zǒng tǒng>马英九首度< dù>合体,共同出席新北市表扬绩优志工与志工团体活动,不过媒体话题仍围绕在台北市长当选人柯文哲前一日爆料,3日前往新北市拜访朱立伦,朱在过程中谈到选举时还冒出
这吕秀莲年纪比我还小,受日本<rì běn>统治时间比我还短,却如此亲日仇华,就如同今日许多<many>年轻人一味哈日媚日,根本不知道<knew>日本<rì běn>统治台湾<tái wān>是怎么一回事
运用在台北市上,则须考虑国情不同的问题<wèn tí>,因为台湾的派出所就像土地公庙,是守护地方民众的一股力量
(byte[] response) throws saslexception
评估响应数据并生成一个 challenge。如果在验证处理期间接收到<received>客户端的响应,则调用此方法来准备<ready to>要提交给客户端的下一个合适 challenge。如果验证已成功<chéng gōng>并且没有其他<other> challenge 数据要发送给客户端,则 challenge 为 null。如果必须通过向客户端发送 challenge 来继续进行验证,或者如果验证已成功<chéng gōng>但客户端需要处理 challenge 数据,则 challenge 是非 null 的。每次调用 evaluateresponse() 后都应该<yīng gāi>调用 iscomplete() 来确定是否还需要客户端的进一步响应。

参数:
response - 客户端发送的非 null(但可能<kě néng>为空)响应。
返回:
要发送给客户端的 challenge,可能为 null。如果验证已成功并且没有其他<other> challenge 数据要发送给客户端,则 challenge 为 null。
抛出:
saslexception - 如果处理响应或生成 challenge 时发生<occasionally occurred>错误。

iscomplete

boolean iscomplete()
确定验证交换是否已完成。通常在每次调用 evaluateresponse() 后调用此方法来确定验证是否已成功完成,还是应该<yīng gāi>继续进行。

返回:
如果验证交换已完成,则返回 true;否则返回 false。

getauthorizationid

string getauthorizationid()
报告此会话客户端的有效授权 id。仅在 iscomplete() 返回 true 时才可调用此方法。

返回:
客户端的授权 id。
抛出:
illegalstateexception - 如果未完成此次验证会话

unwrap

byte[] unwrap(byte[] incoming,   int offset,   int len)   throws saslexception
解包接收自客户端的 byte 数组。仅在验证交换已完成(即 iscomplete() 返回 true)后,并且仅在验证交换已经<yǐ jing>协商将完整性和/或机密性作为保护级别时才调用此方法;否则会抛出 illegalstateexception

incoming 是 sasl 缓冲区的内容(在 rfc 2222 中定义),没有表示长度< dù>的前导 4 个八位组字段。offsetlen 指定了要使用的 incoming 部分。

参数:
incoming - 非 null 的 byte 数组,包含取自客户端的已编码字节。
offset - 所用字节在 incoming 中的开始位置<locates>。
len - 使用 incoming 中的字节数。
返回:
包含已解码字节的非 null byte 数组。
抛出:
saslexception - 如果无法<to be>成功解包 incoming
illegalstateexception - 如果验证交换未完成,如果协商的保护级别既没有完整性,也没有机密性

wrap

byte[] wrap(byte[] outgoing,  int offset,  int len)  throws saslexception
包装要发送到客户端的 byte 数组。仅在验证交换已完成(即 iscomplete() 返回 true)后,并且仅在验证交换已经<yǐ jing>协商将完整性和/或机密性作为保护级别时才调用此方法;否则会抛出 saslexception

此方法的结果会组成 sasl 缓冲区的内容(在 rfc 2222 中定义),没有表示长度的前导 4 个八位组字段。offsetlen 指定了要使用的 outgoing 部分。

参数:
outgoing - 非 null 的 byte 数组,包含要编码的字节。
offset - 所用字节在 outgoing 中的开始位置<locates>。
len - 使用 outgoing 中的字节数。
返回:
包含已编码字节的非 null byte 数组。
抛出:
saslexception - 如果无法<to be>成功包装 outgoing
illegalstateexception - 如果验证交换未完成,如果协商的保护级别既没有完整性,也没有机密性。

getnegotiatedproperty

object getnegotiatedproperty(string propname)
获取已协商的属性。仅在验证交换已完成后(即当 iscomplete() 返回 true)才调用此方法;否则会抛出 illegalstateexceptionjs随机数

参数:
propname - 属性
返回:
已协商属性的值。如果为 null,则未协商该属性,或者该属性不适用于此机制。
抛出:
illegalstateexception - 如果未完成此验证交换

dispose

void dispose()   throws saslexception
处置 saslserver 可能使用的所有系统资源或安全<ān quán>敏感信息。调用此方法会使 saslserver 实例失效。此方法是幂等的。

抛出:
saslexception - 如果释放资源时遇到问题<wèn tí>。网站地图 手机端

javatm platform
standard ed. 6

提交错误或意见<yì jian>
有关更多的 api 参考资料和开发<developing>人员文档,请参阅 java se 开发<developing>人员文档。该文档包含更详细的、面向开发人员的描述,以及总体概述、术语定义、使用技巧和工作<gōng zuò>代码示例。

版权所有 2007 sun microsystems, inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策