Beautiful RIA [14]
上面的配置引用了之前的 Message Broker bean来公开 sodaBean。默认情况下,类中所有方 法都会被公开成为远程服务。FlexRemotingServiceExporter拥有众多选 项来对服务进行配置。 比如说,我们可以通过 includeMethods和 excludeMethods来选择公开或是不公开哪些方法。
建立全新的 Spring BlazeDS Integration项目——客户端
用于连接服务器的客户端代码使用了标准的 Flex RemoteObjects。对于该示例应用,我们声 明了如下的 RemoteObject:
result="resultHandler(event);" fault="faultHandler(event);" channelSet="{sodaChannels}"/> 凭借该 remote对象,Flex客户端可以调用远程的 Java服务器。有两种手段能让客户端知道 该向哪个通道发起调用。其一是针对服务端配置文件 services-config.xml来编译客户端,通 常这不是一个好办法,因为它将客户端与服务器端紧密耦合在了一起。其二是通过一个通道 集将通道配 置在客户端上。 对 RemoteObject的调用与本地对象调用大同小异,区别在于返回结果的过程是异步的。基 于这个原因声明了一个 resultHandler以在服务端的结果返回时进行回调。在本示例中,对服 务器端的调用形式如下: Spring BlazeDS Integration简介与入门 remoteObject.getSodaModel(); 返回的结果是个 ResultEvent,然后将其转换为 sodaModel: sodaModel = event.result as SodaModel; 保护远程服务——服务器端 为了保护与服务器端的通信, Spring BlazeDS Integration项目使用了一个客户化的认证和授权 过程。该过程将 Spring Security与 BlazeDS安全过程集成起来了(注意,在本文撰写之际, 该处所使用的代码仅仅存在于 SVN上。同时我将示例所用代码的快照放到了 jar文件中)。 在服务器端进行安全配置的第一步就是定义安全上下文。这需要为用户定义用户名、密码以 及相关角色等信息。在该简单示例中,我们仅仅将用户信息定义在文件中。真实的企业项目 很可能会将这些信息放到数据库中或是使用单点登录。 我们通过一个单独的配置文件( security-context.xml)来声明系统中的用户。需要将该文件 加到 DispatcherServlet上下文配置中以便服务器启动时就能对其进行加载。如下配置片段展 示了如何在 web.xml文件中配置该文件: servlet-class> /WEB-INF/config/web-application-config.xml 接下来,在 security-context.xml文件中声明系统用户: 第二步就是通过客户化的安全配置文件来配置 Message Broker。为了将额外的服务或是安全 Spring BlazeDS Integration简介与入门 配置到 Spring管理的 Message Broker上,我们需要对 MessageBrokerFactoryBean增加一些额 外的配置处理器。该处理器实现了两个方 法:processBeforeStartup及 processAfterStartup, 它们可以在 Message Broker的启动前后为其设定相关的配置。 要想配置 Message Broker的安全信息,我们需要设定两个处理器。其一是登录命令,它提供 了认证与授权;其二是一个安全配置处理器,它保护个别的通道与 URL。 LoginCommand 是 BlazeDS中的一个接口名,它用于定义客户化的认证与授权过程。接下 来, SpringSecurityLoginCommand bean就将Spring Security与BlazeDS security集成起来,将BlazeDS 发出的进行认证与授权的调用传递给 Spring管理的安全上下文。下面的代码片段声明了该 bean的一个实例 并引用了之前定义的安全上下文: 第二个过程需要定义一个安全配置处理器以作为 pointcut advisor,它定义了保护每个通道及 URL的机制。pointcut advisor是 Spring AOP的一部分,定义了在某个方法调用之前需要调用 的 advice。本质上,它会过滤对远程服务的调用然后阻止未授权的调用。 BlazeDS 在内部通过 AMF Filter来执行消息调用的预处理与后续处理。这些 Filter的工作方式 类似于 Servlet Filter并遵循着标准的 pipe-and-filter设计模式。这样,每个 Filter都能阻止对 消息的进一步处理。该安全过程会通知通道的 AMF Filter来增加 Spring管理的安全。 为了定义安全处理器,首先需要向 WEB-INF/flex/services-config.xml文件中添加两个额外的通 道。 Spring BlazeDS Integration简介与入门 接下来我们定义一个端点源( endpoint source),它配置了需要保护的端点或通道以及访问 它们所需的角色。对于本示例来说,我们只定义一种用户角色,然后配置一个需要保护的 URL及端点: