Domino の Java プログラム 講座 (初級編 サーブレットからのSSOアクセス)

ドミノと WebSphere でシングルサインオンの構成を組んだ場合、プログラムの中で特別に認証を行わなければ設定どおりユーザー/パスワードは透過的に共有されるのですが、サーブレットなどからドミノにアクセスする際には必ず Session オブジェクトを作成しなければならないので、NotesFactory.createSession を行う時にサーバー/ユーザー/パスワードを指定しなくてはなりません。

このような場合には、cookie からユーザーアクセスのための Token を取り出して使用します。
その Token を指定して NotesFactory.createSession を行なうわけです。

こちらのサーブレットをシングルサインオン用に変更してみました。クラスパスの設定もこちらのやり方で実行してます。

import javax.servlet.http.*;
import javax.servlet.*;
import java.io.*;
import lotus.domino.*;

public class SSOtestServlet extends HttpServlet {

public SSOtestServlet() {}

public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
doService(req, res); }

public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
doService(req, res); }

public void init()
throws ServletException {
super.init();
System.out.println("init"); }

public void doService(HttpServletRequest req, HttpServletResponse res)
{
String msg = null;
Cookie[] cookies = null;
String token = null;

try{ cookies = req.getCookies(); }
catch (Exception e) {
sendResponse(res, "Exception when getting cookies: " + e.toString());
return; }

if (cookies == null)
msg = "No cookies";
else {
for (int i = 0; i< cookies.length; i++) {
String cookie = cookies[i].getName();
if (cookie.equals("LtpaToken")) {
token = cookies[i].getValue();
System.out.println("LtpaToken found");
msg = "LtpaToken found";
break;
}
}
}


if (token != null) {
System.out.println("Token is not null");
String server = req.getServerName();
System.out.println("Going to access " + server);
try {
System.out.println("Going to create session");
Session session = NotesFactory.createSession(server, token);
msg = "<br>" + "こんにちは! " + session.getUserName() + "さん!" ;
session.recycle();
}
catch (NotesException e) {
System.out.println("Exception when create session");
msg += "<br>But " + e.id + " " + e.text + "occured";
e.printStackTrace(); }
finally {
sendResponse(res, msg);
}
}

else {
System.out.println("No Session Token");
sendResponse(res, msg);
}
}

public void sendResponse(HttpServletResponse res, String entity) {
try {
PrintWriter pw = null;
res.setContentType("text/html; charset=Cp943c");
pw = res.getWriter();
pw.println("<html><body><h2>");
pw.println(entity);
pw.println("</h2></body></html>");
}
catch (Exception e) { e.printStackTrace(); }
}
}

例えば、ドミノ・ディレクトリにまずアクセスしてみましょう。
最初のアクセスにはログイン画面が表示されますので、ユーザーとパスワードを入れます。

ドミノ・ディレクトリが表示されます。

そのまま SnoopServlet をアクセスしてみましょう。

ユーザー/パスワードを聞かれることなく、内容が表示されます。(こちらもご参照ください)

「Request headers」のところの「cookie」を見てみてください。
「LtpaToken」があります。

この状態で先ほどの SSOtestServlet をアクセスしてみましょう。

そのままアクセスでき、最初に入力したユーザーが表示されます。

[Top Pageに戻る]

Ads by TOK2