ajax 发表于 2013-1-23 02:45:39

Restlet实战(二十一)如何保护确定的资源(续)

在Restlet实战(十七)如何保护确定的资源 中我给出一个如何保护确定资源的解决方案,大致是override类Guard中的doHandle方法,然后加入我们自己的判断逻辑。在结尾,我也提出了自己的疑问:判断那些Uris需要认证保护应该由Restlet来完成,而不是由开发者自己写逻辑代码。
 
本篇文章将结合一个示例介绍如何解决上述问题。此示例将对/customers, /customers/{customerId}这两个Uris进行保护认证,而对/users不作任何认证校验。
 
大致思路是: 创建两个Router,其中一个router attach我们创建的Guard,这个Guard将负责具体的认证校验。而所有受保护的资源attach到这个Guard,而另外一个router则attach所有不需要认证保护的资源,也就是上面示例中的/users.
 
 
 思路有了,其它的修改就很容易了,我们修改一下之前的配置文件就可以完成这样的功能。
 
<bean id="component" class="org.restlet.ext.spring.SpringComponent"><property name="defaultTarget" ref="defaultRouter" /></bean><bean id="customerResolver" class="com.infosys.restlet.filter.CustomerResolver"/><bean id="defaultRouter" class="org.restlet.ext.spring.SpringRouter"><property name="attachments"><map><entry key="/protection"><bean class="com.infosys.restlet.filter.CustomerGuardFilter"> <property name="next" ref="restRoute"/><property name="secretResolver" ref="customerResolver"/> </bean></entry><entry key="/users"><bean class="com.infosys.restlet.application.UserApplication"/></entry></map></property></bean><bean id="restRoute" class="org.restlet.ext.spring.SpringRouter"><property name="attachments"><map><entry key="/customers"><bean class="org.restlet.ext.spring.SpringFinder"><lookup-method name="createResource" bean="customersResource" /></bean></entry><entry key="/customers/{customerId}"><bean class="org.restlet.ext.spring.SpringFinder"><lookup-method name="createResource" bean="customerResource" /></bean></entry></map></property></bean> 
 照例解释一下,首先配置一个default router,指定它为Component的defautlTarget属性的值。在这个default router, 配置了两个元素,请注意,这里很关键,一个是我们创建的Guard的子类,即CustomerGuardFilter,对应的Uri key是/protection, 意思是在客户端请求的URL中,/protection应该紧跟在base ur之后,在这个Guard类的next属性配置的,就是我们要保护的所有的资源,即在上面配置文件中restRoute。
 
另外,我们直接配置/users,因为其不需要保护。
 
 
下面做一个简单的测试:
 
打开浏览器,输入http://localhost:8080/restlet/resources/protection/customers , 就会有一个校验的对话框出现,需要输入用户名和密码,分别为login和secret:

http://www.agoit.com/upload/attachment/125734/a3ea737e-8d03-37eb-a470-9d13273cff73.bmp
 点OK后,就会通过认证,然后执行响应的资源。
 
而如果在浏览器地址输入 http://localhost:8080/restlet/resources/users, 由于配置中,此Uri非受保护,所以,不会有什么认证校验,而是直接读取资源。
页: [1]
查看完整版本: Restlet实战(二十一)如何保护确定的资源(续)