我正在尝试从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);
}
请帮忙
答案 0 :(得分:0)
如果您使用Shiro,则应使用buji-pac4j + pac4j-cas来处理CAS REST API - > https://github.com/pac4j/pac4j/wiki/Clients#cas-support-pac4j-cas-module