0

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

业务用例

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

技术用例

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

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

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

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

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

技术理念

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

2 回答 2

0

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

    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
 }

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

于 2012-08-19T11:33:24.713 回答
0

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

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

if(ifAnyGranted('ROLE_FOO', inferred)) {
  redirect(controller: 'foo',action: 'home')
  return
}
于 2013-01-20T00:25:08.297 回答