Interstage Application Server シングル・サインオン運用ガイド
目次 索引 前ページ次ページ

第5章 アプリケーションの開発> 5.1 Javaアプリケーションの開発

5.1.2 プログラムの開発

 シングル・サインオンJavaAPIを利用するプログラムの開発方法について説明します。シングル・サインオンJavaAPIはJAASのフレームワークを利用しています。
 サンプルコードSampleServlet.javaの例を用いて処理を説明します。このサンプルコードは、クライアントからすでに認証済みであることを証明する認証情報を受け取り、認証した利用者の情報を表示するサーブレットアプリケーションです。

import java.io.IOException;
import java.io.PrintWriter;
import java.io.OutputStreamWriter;
import java.security.Principal;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import javax.security.auth.Subject;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.login.LoginContext;
import javax.security.auth.login.LoginException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.fujitsu.interstage.sso.auth.ISAuthorizationCredential;
import com.fujitsu.interstage.sso.auth.callback.ISCallbackHandler;

public class SampleServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException
    {
        PrintWriter out = response.getWriter();
        response.setContentType("text/html; charset=Shift_JIS");
        Cookie cookie = null;
        Cookie[] cookies = request.getCookies();
        if (cookies != null){
            for (int i=0; i< cookies.length;i++){
                if (cookies[i].getName().equals(
                    ISAuthorizationCredential.COOKIE_KEY)){
                    cookie = cookies[i];
                }
            }
        }
        if (cookie == null ){
            out.println("<html>");
            out.println("<body>");
            out.println("No cookie information");
            out.println("</body>");
            out.println("</html>");
            return;
        }
        String credentialStr = cookie.getValue();
        LoginContext context = null;
        try{
            // CallbackHandlerのインスタンス化
            CallbackHandler myHandler = new ISCallbackHandler(credentialStr);
            // LoginContextのインスタンス化
            context = new LoginContext(
                "com.fujitsu.interstage.sso",myHandler);
            // LoginContextのloginメソッドの呼び出し
            context.login();
        }
        catch(Exception ex){
            out.println("<html>");
            out.println("<body>");
            out.println("Exception : " + ex.getMessage());
            out.println("</body>");
            out.println("</html>");
            return;
        }
        // ユーザ情報の取得
        Subject subject = context.getSubject();
        Set principals = subject.getPrincipals();
        // display principal information
        out.println("<html>");
        out.println("<body>");
        out.println("<table>");
        Iterator p_iterator = principals.iterator();
        while (p_iterator.hasNext()) {
            Principal principal = (Principal)p_iterator.next();
            out.println("<tr>");
            out.println("<td>" + principal.getClass().getName() + "</td>");
            out.println("<td>" + principal.getName() + "</td>");
            out.println("</tr>");
        }
        out.println("</table>");
        out.println("</body>");
        out.println("</html>");
    }
}

下へ5.1.2.1 CallbackHandlerのインスタンス化
下へ5.1.2.2 LoginContextのインスタンス化
下へ5.1.2.3 LoginContextのloginメソッドの呼び出し
下へ5.1.2.4 ユーザ情報の取得

目次 索引 前ページ次ページ

Copyright 2007 FUJITSU LIMITED