`
ajax
  • 浏览: 253495 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Restlet实战(十七)如何保护确定的资源

    博客分类:
  • REST
Web 
阅读更多

在面向资源的架构中,资源的保护的重要性不言而喻,且不说对那些资源进行新增、修改、删除的操作,就是get,有时候敏感资源也不是响应任何的请求。

 

但有时候我们要面临这样一种情况:对所有资源的部分资源进行认证保护,比如,对所有基于get资源的访问不作任何认证,而对其它的如PUT、POST、DELETE,则只对部分某一部分资源进行认证保护,如/customers, /customers/{customerId}.而对/users, /users/{userId}则不需要认证保护,当然这仅仅是个例子,实际项目中,需要根据需求对那些是敏感资源进行划分。

 

下面我演示一个实例,首先是对GET的访问不作任何认证。

 

那么,Restlet是如何实现上述我们描述的情况呢?答案是,需要借助于Guard类。创建Guard的一个子类,然后override Guard的doHandle方法:

 

	@Override
    public int doHandle(Request request, Response response) {
		if(request.getMethod().equals(Method.GET)){
			accept(request, response);
			return CONTINUE;
		}else{
			return super.doHandle(request, response);
		}
	}

 

 你也许不太明白,稍后解释,先看看源代码里面accept方法:

 

    /**
     * Accepts the call. By default, it is invoked if the request is
     * authenticated and authorized. The default behavior is to ask to the
     * attached Restlet to handle the call.
     * 
     * @param request
     *            The request to accept.
     * @param response
     *            The response to accept.
     */
    public void accept(Request request, Response response) {
        // Invoke the attached Restlet
        super.doHandle(request, response);
    }

 看过accept方法的代码,我们知道这是在调用执行attach到当前guard的Restlet。结合我们override的doHandle方法,很明显,如果请求是基于GET的,直接跳过校验,执行后面的Restlet,否则,调用父类的方法进行认证。

 

基于上述的内容,如果我们要对某些确定的资源Uri进行认证保护,应该如何处理呢?修改doHandle方法,并增加一个检查当前请求的Uri是否是受保护的。

 

	@Override
    public int doHandle(Request request, Response response) {
		Reference ref = request.getResourceRef();
		ref.setBaseRef(request.getRootRef());
		
		if(request.getMethod().equals(Method.GET) || isProtectedUri(ref.getRemainingPart())){
			accept(request, response);
			
			return CONTINUE;
		}else{
			
			return super.doHandle(request, response);
		}
	}
	
	private boolean isProtectedUri(String uri){
		//do some validation to check the uri is protected
		return true;
	}

 

这样,就能实现我们保护确定资源的目的了。

 

 

 写在后面的话: 虽然上面这种方法确实可以实现资源认证保护,但是我始终认为检测当前Uri是否是受保护的,应该由Restlet来完成,而不应该是用户来写这段代码。从Guard类的代码也能看出来,如果使用Digest做认证的话,构造函数里面的一个参数是baseUris,最初,我想把受保护的Uris放进去,但是测试下来,好像不管用,不知道是我自己这边的理解有问题,还是Restlet真的不支持?

 

 

分享到:
评论
1 楼 andyjackson 2010-05-10  
请问 我在业务代码中 统一使用StringRePresatation()进行数据的交互。我现在想做两个表现层,其中一个是C/S模式,交互还好,那么我怎么重用前面的业务代码,写一个B/S的web page,进行数据交换,貌似使用fk(那个词不允许使用)r需要返回的是TemplateRepresentation的对象。

相关推荐

    Restlet实战(二十六)事务 (Transaction)

    本文将深入探讨RESTful服务中的事务处理,并以《Restlet实战(二十六)事务 (Transaction)》为例进行解析。 首先,我们要理解RESTful服务中的核心原则之一是无状态(Stateless)。这意味着每个客户端请求都包含处理...

    restlet2.1学习笔记项目代码

    在Restlet中,资源由`org.restlet.resource.ServerResource`或`org.restlet.resource.ClientResource`类表示,负责处理请求并返回响应。 3. **代表(Representation)**:在REST中,资源的状态通过数据的表示形式...

    restlet

    RESTlet是一款开源框架,专为构建基于REST(Representational State Transfer)原则的Web服务和应用程序设计。REST是一种轻量级的架构风格,广泛应用于互联网应用的开发,它强调通过简单的HTTP方法(如GET、POST、...

    Restlet 2.0 边学边写(八)使用jQuery和ajax实现对Restlet资源的CRUD操作

    在本篇博文中,我们将深入探讨如何利用jQuery和Ajax技术与Restlet 2.0框架进行交互,实现对Restful资源的创建(Create)、读取(Read)、更新(Update)和删除(Delete)操作,即CRUD操作。Restlet是一个开源的Java ...

    Restlet开发的Basic认证

    通过这个基本认证的例子,开发者可以了解Restlet框架如何与HTTP协议的认证机制结合,以及如何在实际应用中保护资源的安全。理解这一概念对于开发安全的REST服务至关重要,特别是在处理敏感数据或需要授权访问的场景...

    restlet实现最简单的restful webservice

    3. **定义路由**:在Restlet应用中,你需要创建一个路由(Route)来映射URL到对应的资源。这可以通过创建一个Application类来完成。 ```java import org.restlet.Application; import org.restlet.Restlet; ...

    restlet项目

    1. **Restlet**: 是框架的基本构建块,代表了REST架构中的资源。一个Restlet可以响应特定的URI,处理HTTP请求,并返回适当的响应。 2. **Client/Server Connector**: 这些组件允许Restlet与网络进行交互,处理...

    RESTLET开发

    ### RESTLET开发实例详解 #### 一、RESTLET框架简介 **RESTLET**是一个轻量级且全面的框架,旨在实现REST(Representational State Transfer)原则与Java类之间的映射。该框架支持广泛的REST式系统构建,不仅仅...

    restlet处理各种请求方式参考示例

    在Restlet中,应用程序由资源(Resource)组成,这些资源是可交互的对象,它们响应客户端的请求并提供响应。资源通过代表者(Representation)来表达其状态,代表者可以是文本、图像或其他任何形式的数据。 1. GET...

    Restlet开发实例

    Restlet是一款强大的开源框架,专为构建RESTful(Representational State Transfer)Web服务而设计。REST是一种轻量级的架构风格,广泛应用于Web应用程序的开发,以提高性能、可伸缩性和可维护性。本系列的开发实例...

    RESTLET框架学习书籍

    - 整合Restlet的资源、过滤器和路由器。 - 实现一个完整的Restlet应用案例。 - **第四章:本地部署Restlet应用**: - 在本地Java SE环境或Java EE服务器上部署应用。 - 测试和调试已部署的应用。 #### 五、参考...

    Restlet所需要的所有jar包

    此外,理解RESTful设计原则,如资源的URI定位、状态码的使用、无状态通信等,对于有效利用Restlet构建高质量的Web服务也是十分必要的。 总之,"Restlet所需要的所有jar包"的压缩包提供了开发RESTful服务的基础环境...

    org.restlet.jar

    org.restlet.jar

    org.restlet-2.3.0.jar 最新版本

    《深入理解org.restlet-2.3.0.jar:Java RESTful开发的得力助手》 在Java开发领域,REST(Representational State Transfer)架构风格已经成为构建Web服务的主流选择,而org.restlet-2.3.0.jar则是实现RESTful API...

    Restlet in action 英文 完整版

    第五章“Securing a Restlet application”则深入探讨了如何保护Restlet应用免受安全威胁。内容包括但不限于身份验证机制、授权策略以及如何实施加密技术来保障数据的安全传输。对于任何关心自己服务安全性的开发者...

    Restlet in Action

    - 创建Restlet资源:介绍如何定义资源类以及实现HTTP方法的处理逻辑。 - 部署与测试:演示如何将Restlet应用程序部署到服务器上,并进行基本的功能性测试。 3. **第3章:部署Restlet应用程序**(Deploying a ...

    restlet restful

    Restlet是Java领域的一款开源框架,专门用于构建REST(Representational State Transfer)风格的Web服务。RESTful是一种软件架构风格,设计模式,是基于HTTP协议的Web服务设计原则,强调资源的概念,通过URI来定位...

Global site tag (gtag.js) - Google Analytics