由于公司的需求,需要将现有的CAS4Server 集成Restful API,网上搜了一些资料、以及官方文档,但都是CAS3的,不过CAS3和CAS4是有一些区别的,以下看具体配置吧!

CAS本身已经提供了 restlet 的集成包,如果你用的是 maven 的话直接加入,我这里的Cas-server的版本是 4.0.0:

  1. <dependency>
  2. <groupId>org.jasig.cas</groupId>
  3. <artifactId>cas-server-integration-restlet</artifactId>
  4. <version>4.0.0</version>
  5. <type>jar</type>
  6. </dependency>

查看POM文件:我们可以发现需要如下依赖包:

  • org.restlet-2.1.0.jar
  • org.restlet.ext.spring-2.1.0.jar
  • org.restlet.ext.slf4j-2.1.0.jar
  • org.restlet.ext.servlet-2.1.0.jar

事实上我们还需要另外一个jar包

  • cglib-nodep-2.1_3.jar

    如果自己编译的话工程的话,对应的JAR包也会下载到本地的maven仓库中的,或者直接去 maven.restlet.org 上找。

然后再在 web.xml 中加入:

  1. <servlet>
  2. <servlet-name>restlet</servlet-name>
  3. <servlet-class>org.restlet.ext.spring.RestletFrameworkServlet</servlet-class>
  4. <load-on-startup>1</load-on-startup>
  5. </servlet>
  6. <servlet-mapping>
  7. <servlet-name>restlet</servlet-name>
  8. <url-pattern>/v1/*</url-pattern>
  9. </servlet-mapping>

这里servlet-class要看好和CAS3的配置不一样!

restlet的配置在 cas-server中已经存在在: /WEB-INF/restlet-servlet.xml文件

客户端测试:

public class Client {public static String getTicket(final String server, final String username, final String password,final String service) {notNull(server, "server must not be null");notNull(username, "username must not be null");notNull(password, "password must not be null");notNull(service, "service must not be null");return getServiceTicket(server, getTicketGrantingTicket(server, username, password), service);}/*** 取得ST* @param server* @param ticketGrantingTicket* @param service*/private static String getServiceTicket(final String server, final String ticketGrantingTicket, final String service) {if (ticketGrantingTicket == null)return null;final HttpClient client = new HttpClient();final PostMethod post = new PostMethod(server + "/" + ticketGrantingTicket);post.setRequestBody(new NameValuePair[] { new NameValuePair("service", service) });try {client.executeMethod(post);final String response = post.getResponseBodyAsString();switch (post.getStatusCode()) {case 200:return response;default:warning("Invalid response code (" + post.getStatusCode() + ") from CAS server!");info("Response (1k): " + response.substring(0, Math.min(1024, response.length())));break;}}catch (final IOException e) {warning(e.getMessage());}finally {post.releaseConnection();}return null;}/*** @param server* @param username* @param password*/private static String getTicketGrantingTicket(final String server, final String username, final String password) {final HttpClient client = new HttpClient();final PostMethod post = new PostMethod(server);post.setRequestBody(new NameValuePair[] { new NameValuePair("username", username),new NameValuePair("password", password) });try {client.executeMethod(post);final String response = post.getResponseBodyAsString();info("TGT="+response);switch (post.getStatusCode()) {case 201: {final Matcher matcher = Pattern.compile(".*action=\".*/(.*?)\".*").matcher(response);if (matcher.matches())return matcher.group(1);warning("Successful ticket granting request, but no ticket found!");info("Response (1k): " + response.substring(0, Math.min(1024, response.length())));break;}default:warning("Invalid response code (" + post.getStatusCode() + ") from CAS server!");info("Response (1k): " + response.substring(0, Math.min(1024, response.length())));break;}}catch (final IOException e) {warning(e.getMessage());}finally {post.releaseConnection();}return null;}private static void ticketValidate(String serverValidate, String serviceTicket, String service) {notNull(serviceTicket, "paramter 'serviceTicket' is not null");notNull(service, "paramter 'service' is not null");final HttpClient client = new HttpClient();GetMethod post = null;try {post = new GetMethod(serverValidate+"?"+"ticket="+serviceTicket+"&service="+URLEncoder.encode(service, "UTF-8"));client.executeMethod(post);final String response = post.getResponseBodyAsString();info(response);switch (post.getStatusCode()) {case 200: {info("成功取得用户数据");}default: {}}} catch (Exception e) {warning(e.getMessage());} finally {//释放资源post.releaseConnection();}}private static void notNull(final Object object, final String message) {if (object == null)throw new IllegalArgumentException(message);}public static void main(final String[] args) throws Exception {final String server = "http://localhost:8080/CASServer/v1/tickets";final String username = "username";final String password = "username";final String service = "http://localhost:8080/service";  //随意写final String proxyValidate = "http://localhost:8080/<span style="font-family: Arial, Helvetica, sans-serif;">CASServer</span>/proxyValidate";ticketValidate(proxyValidate, getTicket(server, username, password, service), service);}private static void warning(String msg) {System.out.println(msg);}private static void info(String msg) {System.out.println(msg);}}

返回数据:

<cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'><cas:authenticationSuccess><cas:user>jy</cas:user></cas:authenticationSuccess>
</cas:serviceResponse>
cglib-nodep-2.1_3.jar

CAS4 之 集成RESTful API相关推荐

  1. CAS 之 集成RESTful API

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送) 国 ...

  2. Spring Boot集成Restful Api在线文档接口调试工具 Swagger

    文章目录 一.Swagger简介 Swagger有什么用? 二.环境准备 三.构建Spring Boot工程 四.引入Swagger依赖 五.编写一个Test控制器 六.配置Swagger 七.最终测 ...

  3. Spring Boot 集成Swagger2生成RESTful API文档

    Swagger2可以在写代码的同时生成对应的RESTful API文档,方便开发人员参考,另外Swagger2也提供了强大的页面测试功能来调试每个RESTful API. 使用Spring Boot可 ...

  4. SpringBoot第十一篇:springboot集成swagger2,构建优雅的Restful API

    swagger,中文"拽"的意思.它是一个功能强大的api框架,它的集成非常简单,不仅提供了在线文档的查阅,而且还提供了在线文档的测试.另外swagger很容易构建restful风 ...

  5. springboot集成swagger2构建RESTful API文档

    在开发过程中,有时候我们需要不停的测试接口,自测,或者交由测试测试接口,我们需要构建一个文档,都是单独写,太麻烦了,现在使用springboot集成swagger2来构建RESTful API文档,可 ...

  6. Spring Boot 集成 Swagger 生成 RESTful API 文档

    原文链接: Spring Boot 集成 Swagger 生成 RESTful API 文档 简介 Swagger 官网是这么描述它的:The Best APIs are Built with Swa ...

  7. springboot集成swagger2,构建优雅的Restful API

    springboot集成swagger2,构建优雅的Restful API 转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springboot/2017/07/ ...

  8. java鉴权_一个开箱即用的高效认证鉴权框架,专注于restful api的认证鉴权动态保护...

    作者:tomsun28 来源:SegmentFault 思否 写在开头 看了看这个专栏的最近一篇文章已经是两年前了,时间过得好快.应该是出学校后时间就很快了.两年前因为用shiro后,自己就按着想法开 ...

  9. 4- vue django restful framework 打造生鲜超市 -restful api 与前端源码介绍

    使用Python3.6与Django2.0.2(Django-rest-framework)以及前端vue开发的前后端分离的商城网站 项目支持支付宝支付(暂不支持微信支付),支持手机短信验证码注册, ...

  10. 遗留应用现代化场景:如何正确使用RESTful API

    企业正在使用RESTful API来现代化其基础架构的关键方面,但是该方案怎么才能工作呢?我们为此专门采访了OpenLegacy的Zeev Avidan. 对于不堪遗留基础架构重负,并寻找出路的企业而 ...

最新文章

  1. 【每日一学】复杂度分析
  2. java思考笔记——遍历Map-key的几种方法
  3. 二阶偏微分方程组 龙格库塔法_有限单元法(Finite Element Method)实现声波方程模拟(Part 2)...
  4. 大数——大数相加(hdu1002)
  5. Zabbix3.2邮件告警python脚本
  6. 20181027_任务
  7. 蚂蚁金服 SOFAArk 0.6.0 新特性介绍 | 模块化开发容器...
  8. java string转number_DataBinding的简单使用(java/kotlin)
  9. PXE+NFS+FTP+kickstarter无人值守安装linux系统
  10. python中printf的用法_python输出语句print的用法是什么?
  11. 项目管理常用的工具推荐——WBS、甘特图、燃尽图
  12. 联合国会员国国家名称中英文对照
  13. 你应该知道的一些微信技巧
  14. 别人笑我忒疯癫,我笑别人看不穿;
  15. 【20140429】两种游戏后台架构的简单总结
  16. 用delphi编写医院的复杂报表
  17. 【Spring源码】4. 自己搞个标签?~自定义标签保姆级全过程(图解向,堆图预警)
  18. CUDA编程学习0——环境搭建环境详解
  19. 创客集结号:3D打印模型有哪些后处理方法?
  20. 购物系统-网上书店 javaweb jsp+Servelt+JDBC连接数据库(源码分享)

热门文章

  1. 交互式反汇编器 linux,Carbon:交互式反汇编工具
  2. 如何为约束更改设置动画?
  3. 清吧音响怎么选?看看这个黄金搭配,跟着买就对了
  4. 汉王手写输入法android,汉王手写输入法
  5. 国内外各大网站镜像源
  6. imports build constraints exclude all Go files in
  7. 真机试用深度linux,推荐使用
  8. centos oracle卸载
  9. 智慧政府:大数据治国时代的来临 - 电子书下载(高清版PDF格式+EPUB格式)
  10. jsp汽车4S店维修管理系统