ServiceImpl类中的服务器端侦听器,每次进行RPC调用时都会触发

时间:2013-12-03 16:39:50

标签: gwt servlets listener gwt-rpc

每次使用RPC机制从服务方法调用时,我都需要验证会话是否处于活动状态。有没有办法我可以每RemoteServiceServlet个子类做一次?,比如使用一些调用方法后会触发的一个监听器接口?

2 个答案:

答案 0 :(得分:1)

你应该使用一个servlet过滤器来验证你的sesssion,然后才能进入你的servlet。

检查问题中的示例。 Unable to access session data in servlet filter on app engine dev server

这是一个更全面的例子 http://brendangraetz.wordpress.com/2010/06/17/use-servlet-filters-for-user-authentication/

您可以通过添加更多过滤器映射节,将servlet过滤器添加到您需要的任意数量的服务中。

<!-- Example servlet loaded into servlet container -->
<filter>
   <description>Requires user to log in as a member</description>
    <filter-name>SecurityFilter</filter-name>
    <filter-class>some.package.SecurityFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>SecurityFilter</filter-name>
    <url-pattern>/com.example.foo.Foo/myService</url-pattern>
</filter-mapping>


<servlet>
  <servlet-name>myServiceImpl</servlet-name>
  <servlet-class>
    com.example.foo.server.MyServiceImpl
  </servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>myServiceImpl</servlet-name>
  <url-pattern>/com.example.foo.Foo/myService</url-pattern>
</servlet-mapping>

答案 1 :(得分:1)

对于那些使用Guice的人,我喜欢使用Guice method interception,所以我有一些自定义注释,如:

@Override
@Authenticated
public void someRPCCall(...) {
}

所以,我根据通话使用了几个自定义注释:

@Override
@Authenticated
@Authorizated(accessRolRequired = AccessRol.Editor)
@Transactional
@LogThis
public Boolean someEditorMethod(...)

并拦截这些调用以进行多次检查。