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>");
}
} |