Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring Security建议设计为请求用户登录到具有不同角色的不同用户_Spring_Grails_Spring Security_Security - Fatal编程技术网

Spring Security建议设计为请求用户登录到具有不同角色的不同用户

Spring Security建议设计为请求用户登录到具有不同角色的不同用户,spring,grails,spring-security,security,Spring,Grails,Spring Security,Security,我有以下用例,需要关于正确实现的建议。需要明确的是,这可以通过配置完成,还是需要实现新代码 业务用例 该公司希望允许用户通过社交媒体网站登录并访问其部分页面。但为了访问处理$$的页面,用户必须通过应用程序本地帐户登录 技术用例 允许用户通过Facebook或其他提供商登录,并提供角色用户部分权限 如果用户访问具有角色user_FULL_权限的页面,则提示用户登录到本地JDBC存储帐户 此身份验证还必须确保页面受用户权限角色而不是其他角色的保护 我正在使用GrailSpring安全插件,但我希望必

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

业务用例

该公司希望允许用户通过社交媒体网站登录并访问其部分页面。但为了访问处理$$的页面,用户必须通过应用程序本地帐户登录

技术用例

允许用户通过Facebook或其他提供商登录,并提供角色用户部分权限

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

此身份验证还必须确保页面受用户权限角色而不是其他角色的保护

我正在使用GrailSpring安全插件,但我希望必须自定义该插件

那么,对此有什么建议呢?我有几个想法:

技术理念

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

    • 根据我从你的问题中了解到的情况,这里是我的建议。 要通过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));   
      }
      

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

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

      Collection<GrantedAuthority> inferred = SpringSecurityUtils.findInferredAuthorities(SpringSecurityUtils.getPrincipalAuthorities());
      
      if(ifAnyGranted('ROLE_FOO', inferred)) {
        redirect(controller: 'foo',action: 'home')
        return
      }
      
      Collection=SpringSecurityUtils.findInferredAuthorities(SpringSecurityUtils.getprincipaauthorities());
      如果(如果已授予(“角色_FOO”,推断)){
      重定向(控制器:“foo”,操作:“home”)
      返回
      }
      
      那么你的问题是什么(毕竟这是一个问答网站)?@Xaerxess我补充了更多问题:我可以配置这个吗?还是必须实现新的代码。自定义拒绝访问处理程序可以工作吗?或者我应该实现自定义拒绝访问处理程序吗?我没有详细介绍,但您可能正在寻找Spring Security OAuth。因此,oauth将允许我使用各种来源进行身份验证,但我不认为它将如何帮助我处理不同的角色。因此,我的理解是,这不会提示用户登录,而是会向他们发送403或错误页面(取决于配置),请参阅。。。只有在合适的情况下,我才需要提示用户登录:(哦,是的,很抱歉。处理403的一种方法是在中重写handle()方法,但我没有相应的示例代码:(
      Collection<GrantedAuthority> inferred = SpringSecurityUtils.findInferredAuthorities(SpringSecurityUtils.getPrincipalAuthorities());
      
      if(ifAnyGranted('ROLE_FOO', inferred)) {
        redirect(controller: 'foo',action: 'home')
        return
      }