每次使用RPC机制从服务方法调用时,我都需要验证会话是否处于活动状态。有没有办法我可以每RemoteServiceServlet
个子类做一次?,比如使用一些调用方法后会触发的一个监听器接口?
答案 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(...)
并拦截这些调用以进行多次检查。