试图从CAS安全休息api获得响应,但获取登录页面作为来自Java客户端的响应

时间:2016-08-23 19:43:39

标签: java authentication cas shiro

我正在尝试从CAS安全休息api获得正确的响应,但每次我获取登录页面作为响应时,我已将groovy rest客户端从此站点https://wiki.jasig.org/display/casum/restful+api转换为java rest客户端但它不是给出正确的结果, 下面是我的CAS的Java rest客户端。

HttpClient client = new HttpClient();
    public String getTicketGrantingTicket(String server, String username, String password) {


        PostMethod post = new PostMethod(server);
        post.setParameter("username", username);
        post.setParameter("password", password);
//        NameValuePair[] nameValuePairs = new NameValuePair[2];
//        nameValuePairs[0] = new NameValuePair("username", username);
//        nameValuePairs[1] = new NameValuePair("password", password);

//        post.setRequestBody(nameValuePairs);
        try {
            client.executeMethod(post);
            String response = post.getResponseBodyAsString();
            LOG.info("Response is : " + response);
            switch (post.getStatusCode()) {
            case 201:
                Matcher matcher = Pattern.compile(".*action=\".*/(.*?)\".*").matcher(response);
                if (matcher.matches())
                    return matcher.group(1);
                LOG.warning("Successful ticket granting request, but no ticket found!");
                LOG.info("Response (1k): " + response.substring(0, Math.min(1024, response.length())));
                break;
            default:
                LOG.warning("Invalid response code " + post.getStatusCode() + " from CAS server!");
                LOG.info("Response: " + response);
                break;
            }
        } catch (final IOException e) {
            LOG.warning(e.getMessage());
        } finally {
            post.releaseConnection();
        }
        return null;

    }

    public String getServiceTicket(String server, String ticketGrantingTicket, String service) {
        if (ticketGrantingTicket.isEmpty())
            return null;
//        HttpClient client = new HttpClient();
        PostMethod post = new PostMethod(server + "/" + ticketGrantingTicket);
        post.setParameter("service",service);
//        NameValuePair[] nameValuePairs = new NameValuePair[1];
//        nameValuePairs[0] = new NameValuePair("service", service);
//        post.setRequestBody(nameValuePairs);

        try {
            client.executeMethod(post);
            String response = post.getResponseBodyAsString();
            LOG.info("Service Response is : " + response);
            switch (post.getStatusCode()) {
            case 200:
                return response;
            default:
                LOG.warning("Invalid response code ( $post.getStatusCode() ) from CAS server!");
                LOG.info("Response (1k): " + response.substring(0, Math.min(1024, response.length())));
                break;
            }
        } catch (final IOException e) {
            e.printStackTrace();
            LOG.warning(e.getMessage());
        } finally {
            post.releaseConnection();
        }
        return null;
    }

    public String validateServiceTicket(String server, String serviceTicket, String service) {
        if (serviceTicket.isEmpty())
            return null;
//        HttpClient client = new HttpClient();
        PostMethod post = new PostMethod(server + "/" + serviceTicket);
        post.setParameter("service", service);
        post.setParameter("ticket", serviceTicket);
//        NameValuePair[] nameValuePairs = new NameValuePair[2];
//        nameValuePairs[0] = new NameValuePair("service", service);
//        nameValuePairs[1] = new NameValuePair("ticket", serviceTicket);

//        post.setRequestBody(nameValuePairs);

        try {
            client.executeMethod(post);
            String response = post.getResponseBodyAsString();
            LOG.info("validate Response is : " + response);
            switch (post.getStatusCode()) {
            case 200:
                return response;
            default:
                LOG.warning("Invalid response code "+ post.getStatusCode()+" ");
                LOG.info("Response (1k): " + response.substring(0, Math.min(1024, response.length())));
                break;
            }
        } catch (final IOException e) {
            e.printStackTrace();
            LOG.warning(e.getMessage());
        } finally {
            post.releaseConnection();
        }
        return null;
    }

    public void getServiceCall(String service, String serviceTicket) {
//        HttpClient client = new HttpClient();
        GetMethod method = new GetMethod(service);
        NameValuePair[] nameValuePair = new NameValuePair[1];
        nameValuePair[0] = new NameValuePair("ticket", serviceTicket);

        method.setQueryString(nameValuePair);
        try {
            client.executeMethod(method);
            String response = method.getResponseBodyAsString();
            LOG.info("Service Request call is  : " + response);
            switch (method.getStatusCode()) {
            case 200:
                LOG.info("Response: " + response);
                break;
            default:
                LOG.warning("Invalid response code (" + method.getStatusCode() + ") from CAS server!");
                LOG.info("Response: $response");
                break;
            }
        } catch (final IOException e) {
            LOG.warning(e.getMessage());
        } finally {
            method.releaseConnection();
        }
    }

    public void logout(String server, String ticketGrantingTicket) {
        HttpClient client = new HttpClient();
        DeleteMethod method = new DeleteMethod(server + "/" + ticketGrantingTicket);
        try {
            client.executeMethod(method);
            String response = method.getResponseBodyAsString();
            LOG.info("logout response is  : " + response);
            switch (method.getStatusCode()) {
            case 200:
                LOG.info("Logged out");
                break;
            default:
                LOG.warning("Invalid response code (" + method.getStatusCode() + ") from CAS server!");
                LOG.info("Response: $response");
                break;
            }
        } catch (final IOException e) {
            LOG.warning(e.getMessage());
        } finally {
            method.releaseConnection();
        }
    }

    public static void main(String[] args) {
        RestServiceAuthenticator authentication = new RestServiceAuthenticator();
        String server = "https://casserver.com/cas/v1/tickets";
        String username = "username";
        String password = "password";
        String service = "http://servicetogetresponse";
        String validate = "https://casserver.com/cas/validate";
        // Client client = new Client();
//        String ticketGrantingTicket = authentication.getTicketGrantingTicket(server, username, password);
//        System.out.println("TicketGrantingTicket is " + ticketGrantingTicket);
//        String serviceTicket = authentication.getServiceTicket(server, ticketGrantingTicket, service);
//        System.out.println("ServiceTicket is " + serviceTicket);
        authentication.validateServiceTicket(validate, serviceTicket, service);
//        authentication.getServiceCall(service, serviceTicket);
//        authentication.logout(server, ticketGrantingTicket);
    }

请帮忙

1 个答案:

答案 0 :(得分:0)

如果您使用Shiro,则应使用buji-pac4j + pac4j-cas来处理CAS REST API - > https://github.com/pac4j/pac4j/wiki/Clients#cas-support-pac4j-cas-module