Package org.geoserver.xacml.geoxacml

Source Code of org.geoserver.xacml.geoxacml.GeoXACMLPDPController

/* Copyright (c) 2001 - 2007 TOPP - www.openplans.org. All rights reserved.
* This code is licensed under the GPL 2.0 license, availible at the root
* application directory.
*/
package org.geoserver.xacml.geoxacml;

import java.io.BufferedReader;
import java.io.IOException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.geotools.xacml.geoxacml.config.GeoXACML;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;
import org.w3c.dom.Document;

import com.sun.xacml.Indenter;
import com.sun.xacml.PDP;
import com.sun.xacml.ctx.RequestCtx;
import com.sun.xacml.ctx.ResponseCtx;

/**
* Controller which acts as GeoXACML Policy Decision Point
*
* Accepts only HTTP POST requests containing an XACML Request
*
* Supported Parameters:
*
* validate if true/TRUE, schema validation is performed
*
* @author Christian Mueller
*
*/
public class GeoXACMLPDPController extends AbstractController {

    public static final String VALIDATE_PARAM = "validate";

    public GeoXACMLPDPController() {
        setSupportedMethods(new String[] { METHOD_POST });
    }

    @Override
    protected ModelAndView handleRequestInternal(HttpServletRequest req, HttpServletResponse resp)
            throws Exception {

        PDP pdp = GeoXACMLConfig.getPDP();
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        factory.setIgnoringComments(true);
        factory.setIgnoringElementContentWhitespace(true);
        factory.setNamespaceAware(true);

        String booleanString = req.getParameter("validate");
        Boolean validate = new Boolean(booleanString);

        if (validate) {
            factory.setSchema(GeoXACML.getContextSchema());
            logger.info("Request validation enabled");
        }

        DocumentBuilder builder = factory.newDocumentBuilder();
        Document doc = builder.parse(req.getInputStream());

        RequestCtx request = RequestCtx.getInstance(doc.getDocumentElement());
        ResponseCtx response = pdp.evaluate(request);

        response.encode(resp.getOutputStream(), new Indenter(0), true);
        return null;
    }

    @SuppressWarnings("unused")
    private void dumpXACMLRequest(HttpServletRequest req) throws IOException {
        BufferedReader r = req.getReader();
        String line = null;
        while ((line = r.readLine()) != null)
            System.out.println(line);
    }
}
TOP

Related Classes of org.geoserver.xacml.geoxacml.GeoXACMLPDPController

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.