Spring Security推荐设计请求用户登录不同角色的不同用户

时间:2012-08-18 20:45:30

标签: spring grails spring-security security

我有以下用例,需要有关正确实施的建议。要明确这可以通过配置完成,还是需要实现新代码?

商业用例

企业希望允许用户通过社交媒体网站登录并访问他们的某些网页。但是,为了访问处理$$的页面,用户必须通过应用程序本地帐户登录。

技术用例

允许用户通过Facebook或其他提供商登录并提供角色USER_PARTIAL_RIGHTS

如果用户访问具有角色USER_FULL_RIGHTS的页面,则提示用户登录到本地JDBC存储帐户的帐户。

此身份验证还必须确保页面受USER_FULL_RIGHTS角色的保护,而不是其他角色。

我正在使用grail spring安全插件,但我希望必须自定义插件。

那么这样做的建议是什么?我有几个想法:

技术创意

  • 自定义弹出访问被拒绝处理程序
  • 自定义访问拒绝控制器而不是股票jsp页面

2 个答案:

答案 0 :(得分:0)

根据我对你的问题的理解,这是我的建议。 要通过Facebook登录,请使用Spring Social。 Here是文档。实现很简单。编写自定义登录方法并设置部分权限的权限,如下所示:

    public void signin(String userId) {
    authorities = new ArrayList<GrantedAuthority>();
            //set your partial rights authority
    SecurityContextHolder.getContext().setAuthentication(new UsernamePasswordAuthenticationToken(userId, null, authorities));   
}

使用@secured注释执行方法级安全性实现,以访问需要完全权限的页面。像这样的东西

 @Secured("USER_FULL_RIGHTS ")
 yourMethod(){
 //code
 }

这将提示登录,其中可以使用来自应用程序本地帐户的身份验证。

答案 1 :(得分:0)

我们最终实现的是一个控制器,它会查看角色并将用户重定向到正确的登录页面。有点凌乱,但它确实有效。

Collection<GrantedAuthority> inferred = SpringSecurityUtils.findInferredAuthorities(SpringSecurityUtils.getPrincipalAuthorities());

if(ifAnyGranted('ROLE_FOO', inferred)) {
  redirect(controller: 'foo',action: 'home')
  return
}
相关问题