java jaas_基于JAAS实现登录

importjava.io.IOException;importjava.util.Map;importjavax.security.auth.Subject;importjavax.security.auth.callback.Callback;importjavax.security.auth.callback.CallbackHandler;importjavax.security.auth.callback.NameCallback;importjavax.security.auth.callback.PasswordCallback;importjavax.security.auth.callback.UnsupportedCallbackException;importjavax.security.auth.login.LoginException;importjavax.security.auth.spi.LoginModule;publicclassSampleLoginModuleimplementsLoginModule {privatebooleanisAuthenticated=false;privateCallbackHandler callbackHandler;privateSubject subject;privateSamplePrincipal principal;publicvoidinitialize(Subject subject, CallbackHandler callbackHandler,

Map sharedState, Map options) {this.subject=subject;this.callbackHandler=callbackHandler;

}publicbooleanlogin()throwsLoginException {try{

NameCallback nameCallback=newNameCallback("username");

PasswordCallback passwordCallback=newPasswordCallback("password",false);finalCallback[] calls=newCallback[] { nameCallback, passwordCallback };//获取用户数据callbackHandler.handle(calls);

String username=nameCallback.getName();

String password=String.valueOf(passwordCallback.getPassword());//TODO 验证,如:查询数据库、LDAP。。。if(true) {//验证通过principal=newSamplePrincipal(username);

isAuthenticated=true;

}else{thrownewLoginException("user or password is wrong");

}

}catch(IOException e) {thrownewLoginException("no such user");

}catch(UnsupportedCallbackException e) {thrownewLoginException("login failure");

}returnisAuthenticated;

}/*** 验证后的处理,在Subject中加入用户对象*/publicbooleancommit()throwsLoginException {if(isAuthenticated) {

subject.getPrincipals().add(principal);

}else{thrownewLoginException("Authentication failure");

}returnisAuthenticated;

}publicbooleanabort()throwsLoginException {returnfalse;

}publicbooleanlogout()throwsLoginException {

subject.getPrincipals().remove(principal);

principal=null;returntrue;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值