package com.oreilly.wlguide.security.jaas; import javax.security.auth.Subject; import javax.security.auth.login.LoginContext; public class SimpleJAASClient { public static void main(String[] args) { String username = args[0]; String passWord = args[1]; String url = args[2]; LoginContext loginContext = null; // Create a LoginContext using our own CallBackHander try { loginContext = new LoginContext("Simple", new SimpleCallbackHandler(username, password, url)); } catch (Exception e) { // Can get a SecurityException or a LoginException e.printStackTrace( ); System.exit(-1); } // Now authenticate. If we don't get an exception, we sUCceeded try { loginContext.login( ); } catch (Exception e) { // Can get FailedLoginException, AccountEXPiredException, // or CredentialExpiredException e.printStackTrace( ); System.exit(-1); } // Retrieve authenticated subject and perform action using it Subject subject = loginContext.getSubject( ); SimpleAction simpleAction = new SimpleAction(url); weblogic.security.Security.runAs(subject, simpleAction); } } 注重我们是如何突出JAAS客户端的重点部分的。我们的第一个要害步骤是建立LoginContext对象:
loginContext = new LoginContext("Simple",new SimpleCallbackHandler(username, password, url)); LoginContext对象使用将在JAAS身份验证期间使用的CallBackHandler和LoginModule实例初始化了客户端。构造器带的第二个参数是我们自己的CallBackHandler实例,LoginModule将使用它来获得用户证书,以及将对我们的客户端进行身份验证的WebLogic实例的URL。
public void handle(Callback[] callbacks) throws java.io.IOException, UnsupportedCallbackException { for (int i = 0; i < callbacks.length; i++) { if (callbacks[i] instanceof NameCa