美文网首页CAS
CAS 5.1.5版本多属性返回

CAS 5.1.5版本多属性返回

作者: AaronSimon | 来源:发表于2018-09-09 10:38 被阅读44次

    默认情况下单点登录只返回登录的用户名,不会返回其它的用户信息。如果想要返回更多的用户信息,我们需要进行扩展开发。比如返回用户的id,cas客户端从请求中获取登录用户的id。本文是基于CAS 5.1.X版本自定义jdbc验证这篇文章进行叙述。

    一、修改services

    1. 默认配置
      HTTPSandIMAPS-10000001.json 文件是cas默认的配置,如果我们没有配置自定义的services,就会使用这个默认配置。
    {
      "@class" : "org.apereo.cas.services.RegexRegisteredService",
      "serviceId" : "^(http|https|imaps)://.*",
      "name" : "HTTPS and IMAPS",
      "id" : 10000001,
      "description" : "This service definition authorizes all application urls that support HTTPS and IMAPS protocols.",
      "evaluationOrder" : 10000,
      "attributeReleasePolicy" : {
        "@class" : "org.apereo.cas.services.ReturnAllAttributeReleasePolicy"
      }
    }
    

    对于不同的客户端要求返回的用户信息不同。cas提供了多种属性返回策略,也可以自定义返回策略。

    • Return All (所有配置返回的都返回)
    • Deny All (配置拒绝的出现则报错)
    • Return Allowed(只返回允许的主要属性)
    • 自定义Filter(自定义过滤策略)

    例如:限制某些字段返回(只返回学校和邮箱)

    "attributeReleasePolicy" : {
        "@class" : "org.apereo.cas.services.ReturnAllowedAttributeReleasePolicy",
        "allowedAttributes" : [ "java.util.ArrayList", [ "school", "email" ] ]
      }
    

    例如:返回所有字段信息

    "attributeReleasePolicy" : {
      "@class" : "org.apereo.cas.services.ReturnAllAttributeReleasePolicy"
    }
    
    1. 修改我们自定义的services
    {
      "@class": "org.apereo.cas.services.RegexRegisteredService",
      "serviceId": "^(https|imaps|http)://.*",
      "name": "本地服务",
      "id": 100000,
      "description": "这是一个本地允许的服务,通过localhost访问都允许通过",
      "evaluationOrder": 1,
      "theme":"hzww",
      "attributeReleasePolicy": {
        "@class": "org.apereo.cas.services.ReturnAllAttributeReleasePolicy"
      },
      "proxyPolicy": {
        "@class": "org.apereo.cas.services.RegexMatchingRegisteredServiceProxyPolicy",
        "pattern": "^(https|http)?://.*"
      },
      "logoutUrl": "http://localhost:8080/"
    }
    

    二、服务端jdbc验证器修改

    在jdbc验证后,存放在Map集合中返回给客户端。

    Map<String,Object> result = new HashMap<String,Object>();
    result.put("username", rs.getString("userId"));
    result.put("email", rs.getString("email"));
    result.put("addr", rs.getString("addr"));
    result.put("phone", rs.getString("phone"));
    result.put("age", rs.getString("age"));
    //允许登录,并且通过this.principalFactory.createPrincipal来返回用户属性
    return createHandlerResult(credential, this.principalFactory.createPrincipal(username, result), null);
    

    三、客户端获取用户信息

    RequestContext context = RequestContext.getCurrentContext();
    HttpServletRequest request = context.getRequest();
    Principal principal = request.getUserPrincipal();
    //cas自定义返回数据
    Map <String, Object> attributes = ((AttributePrincipal) principal).getAttributes();
    //获取用户的登录id
    String userName = principal.getName();
    //获取用户id
    Object userId = attributes.get("USERID");
    

    相关文章

      网友评论

        本文标题:CAS 5.1.5版本多属性返回

        本文链接:https://www.haomeiwen.com/subject/xqvrgftx.html