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:



 点OK后,就会通过认证,然后执行响应的资源。

 

而如果在浏览器地址输入 http://localhost:8080/restlet/resources/users, 由于配置中,此Uri非受保护,所以,不会有什么认证校验,而是直接读取资源。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值