Aug
3
在buffalo推出session的支持后,许多人开始在服务中调用
等操作来获取服务器状态信息,最常见的就是在很多OA应用中,绝大部分操作都需要用户登录才能使用。这种场景的常见处理办法是先判断用户是否登录,然后再调用某些方法。例如,一个列出用户所有的文档:
如果只有一两个这样的案例还好,如果多起来的话,会显得相当麻烦。实际上buffalo已经支持了自定义事件。在spring的拦截器的帮助下,可以实现编程的简化,以及一致性的错误控制。
实现方式:
1.编写一个spring 拦截器,将其配置到需要进行拦截的服务中,其中代码片段如下:
2.在客户端需要调用的地方,重写onException方法:
这样写完之后,所有出现exception的地方都会被这个方法来调用。因此本文开头的案例可以直接写为:
当需要集中处理某一类的异常的时候,这是一种相当简单的做法。buffalo已经提供了这个支持。
补spring配置方式:
RequestContext.getContext().getSession()
等操作来获取服务器状态信息,最常见的就是在很多OA应用中,绝大部分操作都需要用户登录才能使用。这种场景的常见处理办法是先判断用户是否登录,然后再调用某些方法。例如,一个列出用户所有的文档:
buffalo.remoteCall("userService.isLogin", [], function(reply) {
if (reply.getResult()) {
buffalo.remoteCall("bookService.listAllBooks", [], function(reply){ ... })
} else {
alert("请先登录")
}
})
if (reply.getResult()) {
buffalo.remoteCall("bookService.listAllBooks", [], function(reply){ ... })
} else {
alert("请先登录")
}
})
如果只有一两个这样的案例还好,如果多起来的话,会显得相当麻烦。实际上buffalo已经支持了自定义事件。在spring的拦截器的帮助下,可以实现编程的简化,以及一致性的错误控制。
实现方式:
1.编写一个spring 拦截器,将其配置到需要进行拦截的服务中,其中代码片段如下:
public class RequiredLoginInterceptor implements MehtodInterceptor {
public Object invoke(MethodInvocation invoke) ...{
String username = RequestContext.getSession().get("username");
if (username == null) {
throw new RequiredLoginException("Please login first!");
}
return invoke.proceed();
}
}
public Object invoke(MethodInvocation invoke) ...{
String username = RequestContext.getSession().get("username");
if (username == null) {
throw new RequiredLoginException("Please login first!");
}
return invoke.proceed();
}
}
2.在客户端需要调用的地方,重写onException方法:
var buffalo = new ...
buffalo.events["onException"] = function(fault) {
if (fault.code == "your.domain.RequiredLoginException") {
alert("请先登录!");
//或者其他处理
}
}
buffalo.events["onException"] = function(fault) {
if (fault.code == "your.domain.RequiredLoginException") {
alert("请先登录!");
//或者其他处理
}
}
这样写完之后,所有出现exception的地方都会被这个方法来调用。因此本文开头的案例可以直接写为:
buffalo.remoteCall("bookService.listAllBooks", [], function(reply){ ... })
当需要集中处理某一类的异常的时候,这是一种相当简单的做法。buffalo已经提供了这个支持。
补spring配置方式:
<bean id="requiredLogin" class="your.domain.RequiredLoginInterceptor"/>
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<list>
<!-- 在这里可以声明多个需要拦截的bean -->
<value>...</value>
</list>
</property>
<property name="interceptorNames">
<list>
<value>requiredLogin</value> <!-- 同样,在这里可以声明多个拦截器,注意次序前后 -->
</list>
</property>
</bean>
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<list>
<!-- 在这里可以声明多个需要拦截的bean -->
<value>...</value>
</list>
</property>
<property name="interceptorNames">
<list>
<value>requiredLogin</value> <!-- 同样,在这里可以声明多个拦截器,注意次序前后 -->
</list>
</property>
</bean>
API 参考
buffalo与spring集成


