如何在GWT中使用客户端的Spring授权

时间:2014-03-06 12:18:19

标签: java spring gwt spring-security

我一直在尝试在客户端代码中实现角色基本授权,以限制特定用户的视图。

我正在尝试使用以下代码来限制视图

@PreAuthorize("hasRole('ROLE_USER')")    
public void create(Contact contact); 

我也在尝试添加以下代码

Authentication a = SecurityContextHolder.getContext().getAuthentication();    
UserDetails currentUserDetails = (UserDetails) a.getPrincipal();

然后在module.gwt.xml文件中添加以下内容

<inherits name='org.springframework.security.core.Authentication' />
<inherits name='org.springframework.security.core.context.SecurityContextHolder' />
<inherits name='org.springframework.security.core.userdetails.UserDetails' />

但是在编译时会出现以下错误

[ERROR] Unable to find 'org/springframework/security/core/Authentication.gwt.xml' on your classpath; could be a typo, or maybe you forgot to include a classpath entry for source?
[java][ERROR] Line 22: Unexpected exception while processing element 'inherits'

请建议我哪里出错了,我该怎么做才能使这项工作。

1 个答案:

答案 0 :(得分:0)

简短的回答是:不可能

在客户端,只有a specific subset of Java is emulated,并且您使用的所有库都必须专门用于GWT(包括拥有自己的.gwt.xml)。

当您尝试在客户端使用Spring类时,GWT将不会知道它们并抛出错误,如果您尝试导入模块,它将查找相应的.gwt.xml文件(显然不会因为Spring项目不适用于GWT而存在。

那么,你能做什么?

  • 保护所有RPC调用服务器端:如果用户可以加载视图,则无法加载数据。

  • 为未经过身份验证的用户保护.html页面(您必须为登录创建不同的页面)。这将阻止将应用程序访问未记录的用户。您还可以查看其他一些想法here,包括servlets / jsp。

  • 每次用户请求视图检查他是否经过身份验证/是否拥有权限时,都要进行RPC调用。最好在客户端缓存此信息以避免减慢应用程序速度(在用户注销时不要忘记清理缓存)。