六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 30|回复: 0

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

[复制链接]

升级  21.33%

24

主题

24

主题

24

主题

秀才

Rank: 2

积分
82
 楼主| 发表于 2013-1-23 02:45:39 | 显示全部楼层 |阅读模式
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:


 点OK后,就会通过认证,然后执行响应的资源。
 
而如果在浏览器地址输入 http://localhost:8080/restlet/resources/users, 由于配置中,此Uri非受保护,所以,不会有什么认证校验,而是直接读取资源。
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表