OAuthToken.authorities没有填写Grails 2.3中的spring security oauth facebook插件

时间:2014-05-14 11:53:02

标签: grails spring-security oauth-2.0 facebook-oauth

我正在使用

  compile ':spring-security-core:2.0-RC2'
  compile ':spring-security-oauth:2.0.2'
  compile ':spring-security-oauth-facebook:0.1'

在我的项目中。

在scaffolded SpringSecurityOAuthController中有一种更新OAuthToken的方法:

protected OAuthToken updateOAuthToken( OAuthToken oAuthToken, UserAccount user ) {
  //....
  oAuthToken.principal = user
  oAuthToken.authorities = user.authorities // Set<GrantedAuthorities>
  oAuthToken.authenticated = true

  oAuthToken
}

当我登录时,我看不到设置权限:

  
    

grails.plugin.springsecurity.oauth.FacebookOAuthToken@a3795c4b:校长:;证书:[保护];认证:真实;细节:null;没有授予任何权力

  

虽然用户的角色是ROLE_USER, ROLE_ADMIN

我检查了类结构,发现:

class FacebookOAuthToken extends OAuthToken {..}

abstract class OAuthToken extends AbstractAuthenticationToken {
    ///....
    Collection<GrantedAuthority> authorities
}

public abstract class AbstractAuthenticationToken implements Authentication, CredentialsContainer {
  //...
  private final Collection<GrantedAuthority> authorities;
}

因此,当局显然是从AbstractAuthenticationToken.authorities属性中获取的,而不是来自OAuthToken.authorities。

有机会解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

好吧,问题出在其他地方:)

我应该使用<sec:ifAnyGranted>代替<sec:ifAllGranted>来检查当局......