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