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

Restlet实战(八)访问敏感资源之基础认证(Basic)

    博客分类:
  • REST
阅读更多

我们设定一个场景:一个信息系统是基于Rest风格的,另外与一套CRM系统通信,当CRM中维护的Customer资料有变动或者创建一个新的Customer,则与信息系统通信,来更新或者创建信息系统的Customer。

 

基于上述我们假设的场景,下面从代码上来看看如何在Restlet里面实现Basic 认证。假设认证发生在当一个request是为了修改Customer信息。仍旧基于此系列前面文章的代码,在Customer Resource里面我们加一段代码:

 

	@Override
	public void init(Context context, Request request, Response response) {
		super.init(context, request, response);
		ChallengeResponse challengeResponse = request.getChallengeResponse();
		if(challengeResponse != null){
			String userName = challengeResponse.getIdentifier();
			String password = new String(request.getChallengeResponse().getSecret());
			
			//here is to get password from database through user name, suppose the password is "tiger"
			if(!"tiger".equals(password)){
				response.setEntity("User name and password are not match", MediaType.TEXT_PLAIN);
				setModifiable(false);
			}
		}
		
		customerId = (String) request.getAttributes().get("customerId");
	}

 

 

客户端的请求是要修改一个customer, 所以,当用户名和密码校验不通过时,则设置setModifiable的值为false,则post对应的acceptRepresentation方法就会被禁止调用。

 

使用Restlet作为客户端来测试上述代码:

 

	Request request = new Request(Method.POST, "http://localhost:8080/restlet/resources/customers/1");
	
	ChallengeScheme scheme = ChallengeScheme.HTTP_BASIC;
	
	ChallengeResponse authentication = new ChallengeResponse(scheme, "scott", "123");
	request.setChallengeResponse(authentication);
	
	Client client = new Client(Protocol.HTTP);
	Response response = client.handle(request);
	if (response.getStatus().isSuccess()) {       
		try {
			response.getEntity().write(System.out);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}else if (response.getStatus().equals(Status.CLIENT_ERROR_UNAUTHORIZED)) {    
		System.out.println("Access authorized by the server, " + "check your credentials");
	}else {   
		System.out.println("An unexpected status was returned: "+ response.getStatus());
	}

 

 通过测试,能发现在Resource里面的init方法能拦截到客户端发送请求时的用户名和密码,然后到数据库去取出正确的密码做一比较,如果不符合,就不作update操作。

 

值得注意的是,这里不能使用Httpclient的最新版本进行测试,因为Restlet1.1.5版本不支持Httpclient lib库中的代理信息,所以,如果想用Httpclient测试,请改用restlet1.2或者2.0的版本,这两个版本里面Request类里面增加了getProxyChallengeResponse方法。

 

分享到:
评论
1 楼 nocohol 2009-07-31  
你说明如果密码不匹配,通过设置setModifiable(false)来使post对应的acceptRepresentation方法就会被禁止调用。但是通过我测试,发现DAO里面的updateCustomer还是被调到。也就是说acceptRepresentation没有被禁止掉,因为我们覆盖了allowPost()这个方法,init方法调完之后,这个方法依然会被叫到,如果我注释掉allowPost()方法,客户端使用错误的密码访问时会报An unexpected status was returned: Method Not Allowed (405) - Method Not Allowed。这应该说明acceptRepresentation被禁用了,但是user name and password are not match却没有返回给用户,这是为什么?

相关推荐

    Restlet开发的Basic认证

    Restlet是一个轻量级的Java Web服务开发框架,它提供了构建RESTful(Representational State Transfer)应用程序的工具...理解这一概念对于开发安全的REST服务至关重要,特别是在处理敏感数据或需要授权访问的场景下。

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

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

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

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

    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项目

    1. **初始化Restlet Engine**: 创建一个Restlet引擎,这是启动Restlet应用的基础。 2. **创建服务器端点(ServerResource)**: 定义一个Restlet类,继承自`org.restlet.resource.ServerResource`,处理HTTP请求。 ...

    restlet实现最简单的restful webservice

    这就是一个最基础的RESTful Web服务,使用Restlet框架实现。 为了进一步扩展服务,你可以添加更多的资源类,处理POST、PUT、DELETE等不同类型的HTTP请求。同时,你还可以处理JSON或XML数据,实现更复杂的业务逻辑。...

    RESTLET框架学习书籍

    #### 二、RESTLET框架的基础架构 - **RESTLET的基本概念**: - **Resources**:表示RESTLET中的资源,是RESTLET应用的核心组件,用于处理特定URL的HTTP请求。 - **Filters**:过滤器用于拦截请求和响应,实现如...

    Restlet开发实例

    本系列的开发实例将带你深入理解并掌握Restlet框架的使用,从基础的JAX-RS实现到高级的Component和Application结构,再到与Spring框架的整合。 首先,我们来看看"RESTLET开发实例(一)基于JAX-RS的REST服务.doc"。...

    Restlet所需要的所有jar包

    总之,"Restlet所需要的所有jar包"的压缩包提供了开发RESTful服务的基础环境,一次下载即可满足你后续的开发需求。通过深入理解和熟练运用这些jar包,你可以轻松构建出高效、灵活的Java REST服务。

    基于Spring的Restlet实例

    Spring Security可以与Restlet结合,实现OAuth2、JWT或其他认证机制,以保护API免受未经授权的访问。 9. **部署和运行**:最后,将构建好的Spring Restlet应用打包成WAR文件,部署到Tomcat、Jetty等Servlet容器,...

    restlet1.1文档

    2. **连接器**:连接器是Restlet中的关键组件之一,用于处理网络通信。您可以选择不同的连接器来适应不同的应用场景。 3. **安全机制**:为了确保应用程序的安全性,Restlet提供了一系列的安全机制,包括认证和授权...

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

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

    RESTLET开发

    RESTLET的核心目标之一是遵循Roy Fielding博士在其关于REST的博士论文中提出的理念,同时确保其提供的功能与这些理念保持一致。 RESTLET的另一个显著特点在于它提出了一种统一的Web视图,这种视图不仅适用于服务器...

    restlet-jee-2.2.2

    6. **安全和认证**:Restlet提供了安全和认证机制,支持基本认证、OAuth和其他安全策略,确保REST服务的安全性。 7. **性能优化**:Restlet框架对HTTP协议进行了优化,减少了不必要的对象创建和内存占用,提高了...

    restlet restful

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

    谷歌Restlet Client插件

    你可以通过访问Chrome Web Store,在搜索框中输入"Restlet Client"找到并安装。安装完成后,插件会出现在浏览器的右上角工具栏中,点击图标即可启动。 该插件的主要功能包括: 1. **创建请求**:用户可以新建一个...

    Restlet in Action

    总之,《Restlet in Action》是一本详尽、实用的指南,不仅覆盖了Restlet框架的所有基础知识,还深入探讨了许多高级主题。对于希望掌握RESTful Web服务开发技能的人来说,这是一本不可多得的好书。

Global site tag (gtag.js) - Google Analytics