sasl java_SASL协议java实现

本文介绍了SASL协议在各种场景中的应用,如xmpp和pop3,并提供了Java实现SASL协议的示例代码,包括SaslServer和SaslClient的创建及回调处理。示例中展示了如何处理NameCallback、PasswordCallback和RealmCallback,强调实际应用时需根据业务逻辑自定义CallbackHandler。
摘要由CSDN通过智能技术生成

sasl在很多场景中都有用到,如xmpp,pop3等等。详细协议可参见:

publicclassAuthMain {

/**

*@paramargs

*@throwsSaslException

*/

publicstaticvoidmain(String[] args)throwsSaslException {

Map props =newTreeMap();

props.put(Sasl.QOP,"auth");

SaslServer ss = Sasl.createSaslServer("DIGEST-MD5","xmpp","java.com",

props,newServerCallbackHandler());

byte[] token =newbyte[0];

byte[] challenge

= ss.evaluateResponse(token);

SaslClient sc = Sasl.createSaslClient(newString[] {"DIGEST-MD5"},

"tony","xmpp","java.com",null,newClientCallbackHandler());

byteresponse[];

if(challenge

!=null) {

response = sc.evaluateChallenge(challenge);

}else{

response = sc.evaluateChallenge(null);

}

ss.evaluateResponse(response);

if(ss.isComplete()) {

System.out.println("auth

success");

}

}

}

classClientCallbackHandlerimplementsCallbackHandler {

publicvoidhandle(Callback[] callbacks)throwsIOException,

UnsupportedCallbackException {

for(inti = 0; i < callbacks.length; i++) {

if(callbacks[i]instanceofNameCallback) {

NameCallback ncb = (NameCallback) callbacks[i];

ncb.setName("tony");

}elseif(callbacks[i]instanceofPasswordCallback) {

PasswordCallback pcb = (PasswordCallback) callbacks[i];

pcb.setPassword("admin1".toCharArray());

}elseif(callbacks[i]instanceofRealmCallback) {

RealmCallback rcb = (RealmCallback) callbacks[i];

rcb.setText("java.com");

}else{

thrownewUnsupportedCallbackException(callbacks[i]);

}

}

}

}

classServerCallbackHandlerimplementsCallbackHandler {

publicServerCallbackHandler() {

}

publicvoidhandle(finalCallback[] callbacks)throwsIOException,

UnsupportedCallbackException {

for(Callback callback : callbacks) {

if(callbackinstanceofRealmCallback) {

//do your

business

}elseif(callbackinstanceofNameCallback) {

//do your

business

}elseif(callbackinstanceofPasswordCallback) {

((PasswordCallback) callback).setPassword("admin1"

.toCharArray());

}elseif(callbackinstanceofAuthorizeCallback) {

AuthorizeCallback authCallback = ((AuthorizeCallback)

callback);

authCallback.setAuthorized(true);

}else{

System.out.println(callback.getClass().getName());

thrownewUnsupportedCallbackException(callback,

"Unrecognized

Callback");

}

}

}

}

注意这里只是基本的api如何使用,具体使用(根据自己系统的业务)要自己重新实现两个callbackhandler两个类,里面的用户名,密码,以及realm信息则要根据具体逻辑来写,比如是从数据库系统来,还是文件系统来,或者是SSO认证。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值