- 浏览: 253697 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
fjdingsd:
目前基于REST的Java框架不包括Jersey吗
Hello REST!!! -
qq690388648:
不错,说的很好!
Restlet实战(十四)如何在Restlet得到Servlet request和Session -
zhuanbiandejijie:
唉... 你09年就接触Restlet了.15年我才开始看Re ...
Hello REST!!! -
zmjiao:
client.options( 这个是那个包下面的? rest ...
Restlet实战(十八)Restlet如何产生WADL -
shihezichen:
对于最近很多人都在讨论的, 使用REST时就不应该掺杂事务的看 ...
Restlet实战(二十六)事务 (Transaction)
首先对所有的请求进行安全检验和认证,后面会给出对固定的URL进行安全认证的情况。对Restlet1.1.5来说,需要借助于Guard类来完成。
说一下大概的思路,建立一个Guard,并把它直接attach到Componet,当请求过来以后,会首先路由到这个Guard,如果通过认证,则路由到对应URL的Resource,否则,拦截掉。
首先修改Spring的配置文件:
<bean id="component" class="org.restlet.ext.spring.SpringComponent"> <property name="defaultTarget" ref="guard" /> </bean> <bean id="guard" class="com.mycompany.restlet.filter.CustomerGuardFilter"> <property name="next" ref="restRoute"/> <property name="secretResolver" ref="customerResolver"/> </bean> <bean id="customerResolver" class="com.mycompany.restlet.filter.CustomerResolver"/>
从上述配置文件能看到,我们为SpringComponent的defaultTarget属性配置了一个Guard,当然这个是我们自己customized的一个Guard。而对于这个Guard,则指定其中的两个属性:next和secretResolver,next的意思是,如果通过校验和认证,则路由到下一个restlet实例,而secretResolver则是进行校验的地方。相关代码如下:
public class CustomerGuardFilter extends Guard { public CustomerGuardFilter(Context context, ChallengeScheme scheme, String realm) { super(context, scheme, realm); } public CustomerGuardFilter(){ this(Context.getCurrent(), ChallengeScheme.HTTP_DIGEST, "realm"); } }
public class CustomerResolver extends Resolver<char[]> { /** * Returns the value that corresponds to the given name. */ @Override public char[] resolve(String name) { // Could have a look into a database, LDAP directory, etc. if ("login".equals(name)) { return "secret".toCharArray(); } return null; } }
CustomerResolver类里面注释的地方,实际上就是我们在产品环境中从数据库或者LDAPdirectory或者别的地方取出密码的过程,这里,仅仅是为了测试,所以,直接硬编码了。
下面我们分别分别使用Restlet和Httpclient提供的API来编写客户端进行测试:
1.使用Restlet来测试
public static void testClientWithRestlet() { Reference reference = new Reference("http://localhost:8080/restlet/resources/customers"); Client client = new Client(Protocol.HTTP); Request request = new Request(Method.GET, reference); ChallengeResponse challengeResponse = new ChallengeResponse(ChallengeScheme.HTTP_DIGEST, "login", "secret"); request.setChallengeResponse(challengeResponse); // Send the first request Response response = client.handle(request); // Complete the challengeResponse object according to the server's data Form form = new Form(); form.add("username", "login"); form.add("uri", reference.getPath()); // Loop over the challengeRequest objects sent by the server. for (ChallengeRequest challengeRequest : response.getChallengeRequests()) { // Get the data from the server's response. if (ChallengeScheme.HTTP_DIGEST.equals(challengeRequest.getScheme())) { Series<Parameter> params = challengeRequest.getParameters(); form.add(params.getFirst("nonce")); form.add(params.getFirst("realm")); form.add(params.getFirst("domain")); form.add(params.getFirst("algorithm")); form.add(params.getFirst("qop")); } } // Compute the required data String a1 = Engine.getInstance().toMd5("login" + ":" + form.getFirstValue("realm") + ":" + "secret"); String a2 = Engine.getInstance().toMd5(request.getMethod() + ":" + form.getFirstValue("uri")); form.add("response", Engine.getInstance().toMd5(a1 + ":" + form.getFirstValue("nonce") + ":" + a2)); challengeResponse.setCredentialComponents(form); // Send the completed request request.setChallengeResponse(challengeResponse); response = client.handle(request); }
2. 使用Httpclient测试
public static void testClientWithHttpclient() throws Exception{ HttpClient client = new HttpClient(); client.getState().setCredentials( new AuthScope("localhost", 8080, "realm"), new UsernamePasswordCredentials("login", "secret")); List<String> authPrefs = new ArrayList<String>(); authPrefs.add(AuthPolicy.DIGEST); client.getParams().setParameter(AuthPolicy.AUTH_SCHEME_PRIORITY, authPrefs); GetMethod httpget = new GetMethod("http://localhost:8080/restlet/resources/customers"); try { int status = client.executeMethod(httpget); // print the status and response System.out.println(status); System.out.println(httpget.getStatusLine()); System.out.println(httpget.getResponseBodyAsString()); } finally { // release any connection resources used by the method httpget.releaseConnection(); } }
评论
2 楼
andyjackson
2010-04-27
请不要这么早结合spring
我还是希望看到纯restlet种如何加入Guard和Filter,当然是放在服务器上 而不是简单的javase测试程序
我还是希望看到纯restlet种如何加入Guard和Filter,当然是放在服务器上 而不是简单的javase测试程序
1 楼
liuxujim
2009-07-03
第八还没写完呢
发表评论
-
Restlet实战(三十)(完结篇)运行流程之源代码分析(续)
2009-08-24 14:25 4163前面一篇文章分析了servlet里init方法,包括init方 ... -
Restlet实战(二十九)(完结篇)运行流程之源代码分析
2009-08-20 17:32 5313终于到了完结篇,也体 ... -
Restlet实战(二十八)源代码分析之压缩 (Compression)
2009-08-10 15:36 3267上篇文章我给出了如何 ... -
Restlet实战(二十七)压缩 (Compression)
2009-08-05 12:09 7206在进入代码部分之前,还是贴出<<RESTful W ... -
Restlet实战(二十六)事务 (Transaction)
2009-08-02 23:29 5397<<Restful Web Service> ... -
Restlet实战(二十五)缓存 (Cache)
2009-07-31 22:18 3994说明:以下部分文字说明摘自<<Restful We ... -
Restlet实战(二十四)获取参数值(续)
2009-07-31 14:44 10427这个系列之前已经有一篇文章写如何获取参数值,看Restlet实 ... -
欢迎加入Restlet圈子
2009-07-28 22:28 2822如果你进来是因为想看Restlet相关的文章,那么欢迎你加入r ... -
Restlet实战(二十三)实现条件GET (Conditional Get)
2009-07-28 17:47 5048先普及一下什么是条件GET,以下摘自<<Restf ... -
Restlet实战(二十二)仿造PUT和DELETE
2009-07-28 13:17 7192在Restlet实战(七)-提交和处理Web Form 中提到 ... -
Restlet实战(二十一)如何保护确定的资源(续)
2009-07-16 16:18 4003在Restlet实战(十七)如何保护确定的资源 中我给出一个如 ... -
Restlet实战(二十)使用Restlet之SSL
2009-07-15 21:37 3342待写 -
Restlet实战(十九)使用Restlet实现Web Service
2009-07-15 21:34 4364先说明本篇文章要实现的功能,仍然做一些假设,当前系统是基于Re ... -
Restlet实战(十八)Restlet如何产生WADL
2009-07-11 21:57 9840现在究竟REST是否需要WADL这种东西,有很多争论,有人说不 ... -
Restlet实战(十七)如何保护确定的资源
2009-07-11 21:55 3434在面向资源的架构中, ... -
Restlet实战(十六)结合源代码分析及使用Filter
2009-07-11 21:13 5740其实在Web应用中Filter对大家来说一点都不陌生,比如说在 ... -
Restlet实战(十五)如何与表示层交互
2009-07-10 13:51 5378首先还是设定一个应用场景,看看用restlet如何实现。 ... -
Restlet实战(十四)如何在Restlet得到Servlet request和Session
2009-07-09 16:39 11526如果你现在已经有一个web系统,而为了一些需求,你集成了res ... -
Restlet实战(十三)如何在Servlet中呼叫Restlet
2009-07-09 14:47 4525看到这个题目,或许你会问,你之前的很多文章不都是与servle ... -
Restlet实战(十二)获取参数值
2009-07-07 15:06 6953本篇文章将讲解三种不 ...
相关推荐
Restlet是一个轻量级的Java Web服务开发框架,它提供了构建RESTful(Representational State Transfer)应用程序的工具...理解这一概念对于开发安全的REST服务至关重要,特别是在处理敏感数据或需要授权访问的场景下。
本文将深入探讨RESTful服务中的事务处理,并以《Restlet实战(二十六)事务 (Transaction)》为例进行解析。 首先,我们要理解RESTful服务中的核心原则之一是无状态(Stateless)。这意味着每个客户端请求都包含处理...
在Restlet中,资源由`org.restlet.resource.ServerResource`或`org.restlet.resource.ClientResource`类表示,负责处理请求并返回响应。 3. **代表(Representation)**:在REST中,资源的状态通过数据的表示形式...
RESTlet是一款开源框架,专为构建基于REST(Representational State Transfer)原则的Web服务和应用程序设计。REST是一种轻量级的架构风格,广泛应用于互联网应用的开发,它强调通过简单的HTTP方法(如GET、POST、...
在本篇博文中,我们将深入探讨如何利用jQuery和Ajax技术与Restlet 2.0框架进行交互,实现对Restful资源的创建(Create)、读取(Read)、更新(Update)和删除(Delete)操作,即CRUD操作。Restlet是一个开源的Java ...
Restlet项目是一个开源框架,专门用于构建RESTful(Representational State Transfer)Web服务。REST是一种软件架构风格,它强调简洁、可扩展性和无状态性,是Web服务设计的主流方式。Restlet框架提供了全面的工具集...
Restlet是一款开源框架,专为构建RESTful Web服务和客户端应用程序设计。REST(Representational State Transfer)是一种轻量级的架构风格,广泛用于构建互联网应用,因为它提供了高效、分布式的系统设计原则。本文...
- **Restlet应用安全性**:学习如何保障Restlet应用的安全性,包括认证、授权等。 - **RESTful Web API文档和版本控制**:理解API文档的重要性,掌握版本控制的最佳实践。 - **提升Restlet应用**:探索高级功能和...
2. **连接器**:连接器是Restlet中的关键组件之一,用于处理网络通信。您可以选择不同的连接器来适应不同的应用场景。 3. **安全机制**:为了确保应用程序的安全性,Restlet提供了一系列的安全机制,包括认证和授权...
在Restlet中,应用程序由资源(Resource)组成,这些资源是可交互的对象,它们响应客户端的请求并提供响应。资源通过代表者(Representation)来表达其状态,代表者可以是文本、图像或其他任何形式的数据。 1. GET...
4. **扩展和模块**:Restlet框架提供了丰富的扩展机制,可以添加对其他技术(如OAuth认证、JAXB绑定、CDI集成等)的支持。这些扩展通常以单独的jar包形式存在,可以根据项目需求选择引入。 5. **开发工具**:为了...
RESTLET的核心目标之一是遵循Roy Fielding博士在其关于REST的博士论文中提出的理念,同时确保其提供的功能与这些理念保持一致。 RESTLET的另一个显著特点在于它提出了一种统一的Web视图,这种视图不仅适用于服务器...
6. **安全和认证**:Restlet提供了安全和认证机制,支持基本认证、OAuth和其他安全策略,确保REST服务的安全性。 7. **性能优化**:Restlet框架对HTTP协议进行了优化,减少了不必要的对象创建和内存占用,提高了...
Restlet是一款强大的开源框架,专为构建RESTful(Representational State Transfer)Web服务而设计。REST是一种轻量级的架构风格,广泛应用于Web应用程序的开发,以提高性能、可伸缩性和可维护性。本系列的开发实例...
Restlet是Java领域的一款开源框架,专门用于构建REST(Representational State Transfer)风格的Web服务。RESTful是一种软件架构风格,设计模式,是基于HTTP协议的Web服务设计原则,强调资源的概念,通过URI来定位...
你可以通过访问Chrome Web Store,在搜索框中输入"Restlet Client"找到并安装。安装完成后,插件会出现在浏览器的右上角工具栏中,点击图标即可启动。 该插件的主要功能包括: 1. **创建请求**:用户可以新建一个...
Spring Security可以与Restlet结合,实现OAuth2、JWT或其他认证机制,以保护API免受未经授权的访问。 9. **部署和运行**:最后,将构建好的Spring Restlet应用打包成WAR文件,部署到Tomcat、Jetty等Servlet容器,...
在Restlet框架中,资源是服务的核心,它们通过`Resource`类来表示。 1. **创建Restlet应用** - 首先,需要在项目中引入Restlet库。这可以通过Maven或Gradle的依赖管理来实现。 - 创建一个`Application`类,这是...