SecurityTokenService.java revision 4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1c
e07d9cb85217949d497b02d7211de8a197d2f2ebzf/**
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
e07d9cb85217949d497b02d7211de8a197d2f2ebzf *
e07d9cb85217949d497b02d7211de8a197d2f2ebzf * Copyright (c) 2007 Sun Microsystems Inc. All Rights Reserved
e07d9cb85217949d497b02d7211de8a197d2f2ebzf *
e07d9cb85217949d497b02d7211de8a197d2f2ebzf * The contents of this file are subject to the terms
e07d9cb85217949d497b02d7211de8a197d2f2ebzf * of the Common Development and Distribution License
e07d9cb85217949d497b02d7211de8a197d2f2ebzf * (the License). You may not use this file except in
e07d9cb85217949d497b02d7211de8a197d2f2ebzf * compliance with the License.
e07d9cb85217949d497b02d7211de8a197d2f2ebzf *
e07d9cb85217949d497b02d7211de8a197d2f2ebzf * You can obtain a copy of the License at
e07d9cb85217949d497b02d7211de8a197d2f2ebzf * https://opensso.dev.java.net/public/CDDLv1.0.html or
e07d9cb85217949d497b02d7211de8a197d2f2ebzf * opensso/legal/CDDLv1.0.txt
e07d9cb85217949d497b02d7211de8a197d2f2ebzf * See the License for the specific language governing
e07d9cb85217949d497b02d7211de8a197d2f2ebzf * permission and limitations under the License.
e07d9cb85217949d497b02d7211de8a197d2f2ebzf *
e07d9cb85217949d497b02d7211de8a197d2f2ebzf * When distributing Covered Code, include this CDDL
e07d9cb85217949d497b02d7211de8a197d2f2ebzf * Header Notice in each file and include the License file
e07d9cb85217949d497b02d7211de8a197d2f2ebzf * at opensso/legal/CDDLv1.0.txt.
e07d9cb85217949d497b02d7211de8a197d2f2ebzf * If applicable, add the following below the CDDL Header,
e07d9cb85217949d497b02d7211de8a197d2f2ebzf * with the fields enclosed by brackets [] replaced by
e07d9cb85217949d497b02d7211de8a197d2f2ebzf * your own identifying information:
e07d9cb85217949d497b02d7211de8a197d2f2ebzf * "Portions Copyrighted [year] [name of copyright owner]"
e07d9cb85217949d497b02d7211de8a197d2f2ebzf *
e07d9cb85217949d497b02d7211de8a197d2f2ebzf * $Id: SecurityTokenService.java,v 1.4 2008/06/25 05:50:13 qcheng Exp $
e07d9cb85217949d497b02d7211de8a197d2f2ebzf *
e07d9cb85217949d497b02d7211de8a197d2f2ebzf */
e07d9cb85217949d497b02d7211de8a197d2f2ebzf
e07d9cb85217949d497b02d7211de8a197d2f2ebzfpackage com.sun.identity.wss.sts;
e07d9cb85217949d497b02d7211de8a197d2f2ebzf
e07d9cb85217949d497b02d7211de8a197d2f2ebzfimport java.io.*;
1a932f2eab9b00d713acc4205d96ca2485bf2712Quaker Fangimport java.net.URLClassLoader;
e07d9cb85217949d497b02d7211de8a197d2f2ebzf
e07d9cb85217949d497b02d7211de8a197d2f2ebzfimport javax.servlet.*;
e07d9cb85217949d497b02d7211de8a197d2f2ebzfimport javax.servlet.http.*;
e07d9cb85217949d497b02d7211de8a197d2f2ebzfimport com.sun.identity.classloader.FAMClassLoader;
e07d9cb85217949d497b02d7211de8a197d2f2ebzfimport java.lang.reflect.Method;
e07d9cb85217949d497b02d7211de8a197d2f2ebzf
e07d9cb85217949d497b02d7211de8a197d2f2ebzfpublic class SecurityTokenService extends HttpServlet {
e07d9cb85217949d497b02d7211de8a197d2f2ebzf
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng private static Class jaxwsServlet;
e07d9cb85217949d497b02d7211de8a197d2f2ebzf private static Method doGetMethod;
e07d9cb85217949d497b02d7211de8a197d2f2ebzf private static Method doPostMethod;
e07d9cb85217949d497b02d7211de8a197d2f2ebzf private static Method initMethod;
e07d9cb85217949d497b02d7211de8a197d2f2ebzf private Object wsServlet;
e07d9cb85217949d497b02d7211de8a197d2f2ebzf private static ClassLoader cls;
e07d9cb85217949d497b02d7211de8a197d2f2ebzf
e07d9cb85217949d497b02d7211de8a197d2f2ebzf public void init(ServletConfig config) throws ServletException {
e07d9cb85217949d497b02d7211de8a197d2f2ebzf ClassLoader oldcc = Thread.currentThread().getContextClassLoader();
e07d9cb85217949d497b02d7211de8a197d2f2ebzf super.init(config);
e07d9cb85217949d497b02d7211de8a197d2f2ebzf try {
e07d9cb85217949d497b02d7211de8a197d2f2ebzf if(jaxwsServlet == null) {
e07d9cb85217949d497b02d7211de8a197d2f2ebzf ServletContext context = config.getServletContext();
e07d9cb85217949d497b02d7211de8a197d2f2ebzf cls = FAMClassLoader.getFAMClassLoader(context,null);
e07d9cb85217949d497b02d7211de8a197d2f2ebzf Thread.currentThread().setContextClassLoader(cls);
e07d9cb85217949d497b02d7211de8a197d2f2ebzf jaxwsServlet = cls.loadClass(
e07d9cb85217949d497b02d7211de8a197d2f2ebzf "com.sun.xml.ws.transport.http.servlet.WSServlet");
e07d9cb85217949d497b02d7211de8a197d2f2ebzf
e07d9cb85217949d497b02d7211de8a197d2f2ebzf Class clsa[] = new Class[2];
e07d9cb85217949d497b02d7211de8a197d2f2ebzf clsa[0] = Class.forName(
e07d9cb85217949d497b02d7211de8a197d2f2ebzf "javax.servlet.http.HttpServletRequest");
e07d9cb85217949d497b02d7211de8a197d2f2ebzf clsa[1] = Class.forName(
e07d9cb85217949d497b02d7211de8a197d2f2ebzf "javax.servlet.http.HttpServletResponse");
e07d9cb85217949d497b02d7211de8a197d2f2ebzf doGetMethod = jaxwsServlet.getDeclaredMethod("doGet", clsa);
e07d9cb85217949d497b02d7211de8a197d2f2ebzf doPostMethod = jaxwsServlet.getDeclaredMethod("doPost", clsa);
e07d9cb85217949d497b02d7211de8a197d2f2ebzf clsa = new Class[1];
e07d9cb85217949d497b02d7211de8a197d2f2ebzf clsa[0] = Class.forName("javax.servlet.ServletConfig");
e07d9cb85217949d497b02d7211de8a197d2f2ebzf initMethod = jaxwsServlet.getDeclaredMethod("init", clsa);
e07d9cb85217949d497b02d7211de8a197d2f2ebzf wsServlet = jaxwsServlet.newInstance();
e07d9cb85217949d497b02d7211de8a197d2f2ebzf }
e07d9cb85217949d497b02d7211de8a197d2f2ebzf Object args[] = new Object[1];
e07d9cb85217949d497b02d7211de8a197d2f2ebzf args[0] = config;
e07d9cb85217949d497b02d7211de8a197d2f2ebzf initMethod.invoke(wsServlet, args);
e07d9cb85217949d497b02d7211de8a197d2f2ebzf } catch (Exception ex) {
e07d9cb85217949d497b02d7211de8a197d2f2ebzf throw new ServletException(ex);
e07d9cb85217949d497b02d7211de8a197d2f2ebzf } catch (Throwable ex) {
e07d9cb85217949d497b02d7211de8a197d2f2ebzf ex.printStackTrace();
e07d9cb85217949d497b02d7211de8a197d2f2ebzf } finally {
e07d9cb85217949d497b02d7211de8a197d2f2ebzf Thread.currentThread().setContextClassLoader(oldcc);
e07d9cb85217949d497b02d7211de8a197d2f2ebzf }
e07d9cb85217949d497b02d7211de8a197d2f2ebzf }
e07d9cb85217949d497b02d7211de8a197d2f2ebzf
e07d9cb85217949d497b02d7211de8a197d2f2ebzf /**
e07d9cb85217949d497b02d7211de8a197d2f2ebzf * Handles the HTTP <code>GET</code> method.
e07d9cb85217949d497b02d7211de8a197d2f2ebzf * @param request servlet request
e07d9cb85217949d497b02d7211de8a197d2f2ebzf * @param response servlet response
e07d9cb85217949d497b02d7211de8a197d2f2ebzf */
e07d9cb85217949d497b02d7211de8a197d2f2ebzf protected void doGet(HttpServletRequest request, HttpServletResponse response)
e07d9cb85217949d497b02d7211de8a197d2f2ebzf throws ServletException, IOException {
e07d9cb85217949d497b02d7211de8a197d2f2ebzf ClassLoader oldcc = Thread.currentThread().getContextClassLoader();
e07d9cb85217949d497b02d7211de8a197d2f2ebzf Object args[] = new Object[2];
e07d9cb85217949d497b02d7211de8a197d2f2ebzf args[0] = request;
e07d9cb85217949d497b02d7211de8a197d2f2ebzf args[1] = response;
e07d9cb85217949d497b02d7211de8a197d2f2ebzf try {
e07d9cb85217949d497b02d7211de8a197d2f2ebzf Thread.currentThread().setContextClassLoader(cls);
e07d9cb85217949d497b02d7211de8a197d2f2ebzf doGetMethod.setAccessible(true);
e07d9cb85217949d497b02d7211de8a197d2f2ebzf doGetMethod.invoke(wsServlet, args);
e07d9cb85217949d497b02d7211de8a197d2f2ebzf doGetMethod.setAccessible(false);
e07d9cb85217949d497b02d7211de8a197d2f2ebzf } catch (Exception ex) {
e07d9cb85217949d497b02d7211de8a197d2f2ebzf throw new ServletException(ex);
e07d9cb85217949d497b02d7211de8a197d2f2ebzf } catch (Throwable ex) {
e07d9cb85217949d497b02d7211de8a197d2f2ebzf ex.printStackTrace();
e07d9cb85217949d497b02d7211de8a197d2f2ebzf } finally {
e07d9cb85217949d497b02d7211de8a197d2f2ebzf Thread.currentThread().setContextClassLoader(oldcc);
e07d9cb85217949d497b02d7211de8a197d2f2ebzf }
e07d9cb85217949d497b02d7211de8a197d2f2ebzf
e07d9cb85217949d497b02d7211de8a197d2f2ebzf }
e07d9cb85217949d497b02d7211de8a197d2f2ebzf
e07d9cb85217949d497b02d7211de8a197d2f2ebzf /**
e07d9cb85217949d497b02d7211de8a197d2f2ebzf * Handles the HTTP <code>POST</code> method.
e07d9cb85217949d497b02d7211de8a197d2f2ebzf * @param request servlet request
e07d9cb85217949d497b02d7211de8a197d2f2ebzf * @param response servlet response
e07d9cb85217949d497b02d7211de8a197d2f2ebzf */
e07d9cb85217949d497b02d7211de8a197d2f2ebzf protected void doPost(HttpServletRequest request, HttpServletResponse response)
e07d9cb85217949d497b02d7211de8a197d2f2ebzf throws ServletException, IOException {
e07d9cb85217949d497b02d7211de8a197d2f2ebzf ClassLoader oldcc = Thread.currentThread().getContextClassLoader();
e07d9cb85217949d497b02d7211de8a197d2f2ebzf Object args[] = new Object[2];
e07d9cb85217949d497b02d7211de8a197d2f2ebzf args[0] = request;
e07d9cb85217949d497b02d7211de8a197d2f2ebzf args[1] = response;
e07d9cb85217949d497b02d7211de8a197d2f2ebzf try {
e07d9cb85217949d497b02d7211de8a197d2f2ebzf Thread.currentThread().setContextClassLoader(cls);
e07d9cb85217949d497b02d7211de8a197d2f2ebzf doPostMethod.setAccessible(true);
e07d9cb85217949d497b02d7211de8a197d2f2ebzf doPostMethod.invoke(wsServlet, args);
e07d9cb85217949d497b02d7211de8a197d2f2ebzf doPostMethod.setAccessible(false);
e07d9cb85217949d497b02d7211de8a197d2f2ebzf } catch (Exception ex) {
e07d9cb85217949d497b02d7211de8a197d2f2ebzf throw new ServletException(ex);
020c47705d28102a8df83a43ddf08e34dde21f22ql } catch (Throwable ex) {
e07d9cb85217949d497b02d7211de8a197d2f2ebzf ex.printStackTrace();
e07d9cb85217949d497b02d7211de8a197d2f2ebzf } finally {
e07d9cb85217949d497b02d7211de8a197d2f2ebzf Thread.currentThread().setContextClassLoader(oldcc);
e07d9cb85217949d497b02d7211de8a197d2f2ebzf }
e07d9cb85217949d497b02d7211de8a197d2f2ebzf }
e07d9cb85217949d497b02d7211de8a197d2f2ebzf
e07d9cb85217949d497b02d7211de8a197d2f2ebzf /** Returns a short description of the servlet.
e07d9cb85217949d497b02d7211de8a197d2f2ebzf */
e07d9cb85217949d497b02d7211de8a197d2f2ebzf public String getServletInfo() {
e07d9cb85217949d497b02d7211de8a197d2f2ebzf return "Security Token Service Servlet";
e07d9cb85217949d497b02d7211de8a197d2f2ebzf }
e07d9cb85217949d497b02d7211de8a197d2f2ebzf // </editor-fold>
e07d9cb85217949d497b02d7211de8a197d2f2ebzf}
e07d9cb85217949d497b02d7211de8a197d2f2ebzf