精华内容
下载资源
问答
  • java客户端获取:AttributePrincipal principal = (AttributePrincipal) request....php客户端获取$username=phpCAS::getUser();我们的程序中也可能遇到需要得到更多如姓名,手机号,email等更多用户信息...

    java客户端获取:

    AttributePrincipal principal = (AttributePrincipal) request.getUserPrincipal();

    String username = principal.getName();

    php客户端获取

    $username=phpCAS::getUser();

    我们的程序中也可能遇到需要得到更多如姓名,手机号,email等更多用户信息的情况。cas

    各种版本配置方式也不尽相同,这里讲的是目前最新版本3.4.4。配置方式如下,

    一、首先需要配置属性attributeRepository,首先,你需要到WEB-INF目录找到

    deployerConfigContext.xml文件,同时配置attributeRepository如下:

    //这里的key需写username,value对应数据库用户名字段

    其中queryAttributeMapping是组装sql用的查询条件属性,如下表中

    结合 封装成查询sql就是select * from userinfo where loginname=#username#,resultAttributeMapping是sql执行完毕后返回的结构属性, key对应数据库字段,value对应客户端获取参数。

    二、配置用户认证凭据转化的解析器,也是在deployerConfigContext.xml中,找到

    credentialsToPrincipalResolvers,为UsernamePasswordCredentialsToPrincipalResolver注入attributeRepository,那么attributeRepository就会被触发并通过此类进行解析,红色为新添部分。

    三、修改WEB-INF/view/jsp/protocol/2.0/casServiceValidationSuccess.jsp,在server验证成功后,这个页面负责生成与客户端交互的xml信息,在默认的casServiceValidationSuccess.jsp中,只包括用户名,并不提供其他的属性信息,因此需要对页面进行扩展,如下,红色为新添加部分

    ${fn:escapeXml(assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.id)}

    ${fn:escapeXml(attr.value)}

    ${pgtIou}

    ${fn:escapeXml(proxy.principal.id)}

    通过完成上面三个步骤的配置后,server端的工作就完成了,那么如何在客户端获取这些信息呢?下面进行说明:

    java客户端获取:

    AttributePrincipal principal = (AttributePrincipal) request.getUserPrincipal();

    Map attributes = principal.getAttributes();

    String email=attributes .get("email");

    php客户端;

    $email=phpCAS::getAttribute('email');

    这里补充一下,实现返回功能的attributeRepository在person-directory-impl-1.5.0-RC6.jar这个jar包中,其中执行查询的在类org.jasig.services.persondir.support.jdbc.AbstractJdbcPersonAttributeDao.java中,如果对返回值有其他要求,比如我的就是需要调用webservice获取返回值可以在这个文件封装自己的返回值,或者修改查询条件。

    List results = this.simpleJdbcTemplate.query(querySQL, rowMapper, params);

    //List中results 中保存的对象为Map类型的所以自定义

    //    Map map=new HashMap();

    //    map.put("ID", 3);

    //    map.put("LOGINNAME", "allen");

    //    map.put("PASSWORD","123456");

    //    map.put("ADDTIME", "2010-11-29 00:00:00.0");

    //    map.put("STATE", 0);

    //    map.put("MOBILE", "123456789");

    //    map.put("EMAIL", test@126.com);

    //    results.add(map);

    return parseAttributeMapFromResults(results, queryUserName);

    写在最后,若按照以上配置还是不能获得返回值的话,我通过调试源码发现把源码中

    org.jasig.cas.CentralAuthenticationServiceImpl.java 编译后再cas-server-core-3.4.4.jar中的第360-368行代码给注释掉就ok了,

    360//                for (final String attribute : registeredService

    361//                    .getAllowedAttributes()) {

    362//                    final Object value = principal.getAttributes().get(

    363//                        attribute);

    364//

    365//                    if (value != null) {

    366//                        attributes.put(attribute, value);

    367//                    }

    368//                }

    展开全文
  • Shiro集成CAS登录成功跳转地址问题

    千次阅读 2017-08-03 15:54:59
    Shiro集成CAS登录成功跳转地址问题

    最近做了ShiroCAS的集成,第一次深入Shiro,发现Shiro是一个不错的安全框架,cas是另外一个搭建做的。

    登录成功之后有3种页面跳转选择,这是根据触发登录操作的页面分类的。
    1. 当前页面不需要登录即可访问,点击登录按钮,登陆成功之后留在本页面,特别是不再首页的情况
    2. 用户访问的目标页面需要登陆之后才能访问,访问这种页面首先去登录页面,登录成功再自动去目标页面
    3. 登录成功都跳转首页

    一点警告,shiro与cas集成时shiro中配置的登录失败的地址不应该是cas的登录地址,如果这样配置是有问题的。

    干货:
    针对第3个:
    shiro可以配置登录成功默认的跳转地址

    正对第2个:

    //首先配置的shiro filter会拦截到去目标页面的这个请求,filter如下重写方法即可解决
    /*知道一个东西,配置的shiro的filter什么时候起作用,当用户没有登录的时候起作用。
    如果用户登录了shiro filter会放过请求,不对请求做任何处理
    */
    @Override
        protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception{
            String loginUrl = "casServerLoginUrl?service=xxx";
            //起主要作用,保存当前的请求信息,登录成功之后再获取这个请求,根据这个请求指向的页面做跳转
            org.apache.shiro.web.util.WebUtils.saveRequest(request);
            //设置cas的登录地址,应该可以不用设置,因为在shiro-cas配置文件中做了设置
            org.apache.shiro.web.util.WebUtils.issueRedirect(request, response, loginUrl);
            return false;
        }

    针对第1个:
    采用迂回的做法
    首先在shiro配置文件中定义一个过滤路径 /api/shiro/login 这个路径使用上面第2个的过滤器过滤或单独定义(必须按照上面第2个重写方法)

    <property name="filterChainDefinitions">
        <value>
            <!-- /account/login = authc -->
            /shirocas = casFilter
            /api/shiro/login = loginFilter
        </value>
    </property>
    然后定义一个Controller 定义接口 /api/shiro/login
    
    @RequestMapping(value="/api/shiro/login", method = RequestMethod.GET) 
        public Object login(HttpServletRequest request, HttpServletResponse response) {
            String redirectUrl = request.getParameter("redirect");//页面登录按钮设置的请求参数
            if (StringUtils.isBlank(redirectUrl)) {
                redirectUrl = request.getContextPath();
            }
            try {
                response.sendRedirect(redirectUrl);
            } catch (IOException e) {
            }
            return null;
        }
    接着修改登录按钮跳转的地址
    
    $("loginBtn").click(function() {window.location = '/api/shiro/login?redirect=' + window.location.href});
    /*
        原理:第一 shiro 的filter先于Controller拦截请求,第二 对登录状态下的请求shiro filter会放过,然后Controller拦截
        shiro的filter(比如loginFilter)会先于Controller拦截到请求,loginFilter保存了当前的请求信息(即跳转的目标地址 /api/shiro/login),cas登录成功之后重定向到shiro的filter,shiro登录成功,然后通过org.apache.shiro.web.util.WebUtils.getAndClearSavedRequest(request)获取上次请求的信息,重定向到上次请求指向的路径即:/api/shiro/login?redirect=xxx. Controller 这个时候shiro的filter拦截这个请求,一看请求已经登录,放过,Controller(见上面)拦截,然后就成功啦
    */
    展开全文
  • 单点登录单点登录就是一次登录过后,再没有退出或者清缓存的情况下,...CASCAS 是耶鲁大学开源的一个单点登录框架,旨在为 web 应用系统提供一个安全可靠的单点登录框架,最终,在我们公司的项目中选择了使用 CAS 框...

    单点登录

    单点登录就是一次登录过后,再没有退出或者清缓存的情况下,用户再访问其他集成了这个功能的项目时,就不需要进行重复的登录操作,这样会大大的方便用户的使用。如果每次都需要用户登录一遍,估计这个项目也就没多少人用了,所以单点登录这个功能是非常必要的。

    CAS

    CAS 是耶鲁大学开源的一个单点登录框架,旨在为 web 应用系统提供一个安全可靠的单点登录框架,最终,在我们公司的项目中选择了使用 CAS 框架。

    名词解释

    在我们了解 CAS 的工作原理之前,我们应该首先了解下在 CAS 里面的一些概念,这样对我们理解 CAS 有一个更好的帮助。

    ST:Service Ticket,服务票据,服务的唯一标识码,由 CAS 认证中心生成,返回给用户,这时 service 拿到 ST 后,又会去到 CAS 验证中心去验证,如果验证成功,则允许用户访问资源。

    TGC:Ticket Granting Cookie,CAS 系统用来识别用户身份的凭证。

    TGT:Ticket Grangting Ticket,票据授权票据,获取这个 TGT 后才能申请服务票据(ST),用户如果在 CA S系统认证成功之后,就会生成 TGC 写入浏览器,同时也生成一个 TGT,TGT 对象的id就是 cookie 值。之后每次请求过来通过此 cookie 来从缓存获取 TGT,就不用提交身份认证信息(Credentials)。

    工作过程

    了解到上面这些名词的概念之后,我们来看看下面这一张图,能更形象的解释 CAS 的工作流程。

    e494326106a12a5b1e9375ddb7fc19ff.png

    工作原理图

    访问服务: SSO 客户端发送请求访问应用系统提供的服务资源。

    定向认证: SSO 客户端会重定向用户请求到 SSO 服务器。

    用户认证:用户身份认证。

    发放票据: SSO 服务器会产生一个随机的 Service Ticket 。

    验证票据: SSO 服务器验证票据 Service Ticket 的合法性,验证通过后,允许客户端访问服务。

    传输用户信息: SSO 服务器验证票据通过后,传输用户认证结果信息给客户端。

    CAS 分为服务端和客户端,每一个服务就相当于是一个客户端,当用户去访问一个没有经过登录的服务时,会重定向到 CAS Server 提供的登录界面,不过这个界面我们也可以自定义,也可以使用原客户端的登录界面,需要我们自己去做一些修改。输入完用户名和密码后,CAS Server 验证成功后,会向浏览器增加一个加密过的 cookie,也就是 TGC ,用来表明用户已经成功登录,这里保存了用户的信息,以供其他客户端使用。同时会重定向到客户端并且创建一个随机的,具有唯一标识的 Ticket,也就是 ST,CAS 将 ST 与登录成功的用户和服务联系在一起,只使用一次,使用过后立刻失效。客户端接收到 ST 后,会进行校验,校验成功后,创建 Session,放开相关资源供用户使用。当用户去访问其他服务时,这时用户已经成功登录过了,这时任然会重定向到 CAS Server 端,但是不需要用户再输入用户名和密码了,而是首先寻找 Cookie,根据其中的信息,进行登录,CAS 同样给出新的 ST 重定向到 Server 端校验,校验成功则创建 Session,允许访问。

    看到这里,我们大致能够明白 CAS 的工作过程,第一步用户访问应用服务器重定向到认证服务器(CAS Server),输入用户名和密码,验证成功后,建立浏览器与认证服务器(CAS Server)之间的信任,但是浏览器与应用服务器之间并没有建立信任,所以 ST 是认证服务器返回的,应用服务器拿到这个 ST 后,再去认证服务器验证是否合法,如果合法,则建立应用服务器与认证服务器之间的信任。TGC 主要的作用是用于单点登录,当浏览器访问应用服务器2的时候,也会重定向到认证服务器,这时 TGC 存在,不需要输入用户名和密码,直接返回 ST,继续验证是否合法,成功则允许访问。

    CAS 的工作过程我们都了解了,接下来就是在自己项目的实际配置了,接下来我会继续分享我在项目中实际应用的情况,希望能够帮助到大家,同时对我自己也是一次关于 CAS 使用的总结。

    展开全文
  • 转自:http://blog.csdn.net/tianfei_1984/article/details/8622810 ...cas登录成功默认返回的只有用户名,  java客户端获取:   AttributePrincipal principal = (AttributePrincipal)

    转自:http://blog.csdn.net/tianfei_1984/article/details/8622810



    今天介绍下cas 3.4登录成

     功返回用户更多信息。cas登录成功默认返回的只有用户名,

     java客户端获取:

     

    AttributePrincipal principal = (AttributePrincipal) request.getUserPrincipal();

    String username = principal.getName();


    我们的程序中也可能遇到需要得到更多如姓名,手机号,email等更多用户信息的情况。cas

     

     各种版本配置方式也不尽相同,这里讲的是目前最新版本3.4.4。配置方式如下,

     

     一、首先需要配置属性attributeRepository,首先,你需要到WEB-INF目录找到

     

    deployerConfigContext.xml文件,同时配置attributeRepository如下:

     

     

    <bean  class="org.jasig.services.persondir.support.jdbc.SingleRowJdbcPersonAttributeDao" id="attributeRepository">

            <constructor-arg index="0" ref="casDataSource"/>

            <constructor-arg index="1" value="select * from userinfo where {0}"/>

            <property name="queryAttributeMapping">

                <map>

                    //这里的key需写username,value对应数据库用户名字段

                    <entry key="username" value="loginname"/>

                </map>

            </property>

            <property name="resultAttributeMapping">

                <map>

    <!--key为对应的数据库字段名称,value为提供给客户端获取的属性名字,系统会自动填充值-->  

                    <entry key="id" value="id"/>

                    <entry key="mobile" value="mobile"/>

                    <entry key="email" value="email"/>

                </map>

            </property>

        </bean>

    其中queryAttributeMapping是组装sql用的查询条件属性,如下表中

    结合 封装成查询sql就是select * from userinfo where loginname=#username#,resultAttributeMapping是sql执行完毕后返回的结构属性, key对应数据库字段,value对应客户端获取参数。

     

     

    二、配置用户认证凭据转化的解析器,也是在deployerConfigContext.xml中,找到

    credentialsToPrincipalResolvers,为UsernamePasswordCredentialsToPrincipalResolver注入attributeRepository,那么attributeRepository就会被触发并通过此类进行解析,红色为新添部分。

    <property name="credentialsToPrincipalResolvers">

                <list>        

                    <bean                    class="org.jasig.cas.authentication.principal.UsernamePasswordCredentialsToPrincipalResolver">

                        <property name="attributeRepository" ref="attributeRepository"/>

                    </bean>

                    <bean                    class="org.jasig.cas.authentication.principal.HttpBasedServiceCredentialsToPrincipalResolver"/>

                </list>

     </property>

     

    三、修改WEB-INF/view/jsp/protocol/2.0/casServiceValidationSuccess.jsp,在server验证成功后,这个页面负责生成与客户端交互的xml信息,在默认的casServiceValidationSuccess.jsp中,只包括用户名,并不提供其他的属性信息,因此需要对页面进行扩展,如下,红色为新添加部分

     

          <cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'>
     <cas:authenticationSuccess>

      <cas:user>${fn:escapeXml(assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.id)}</cas:user>


      <c:if test="${fn:length(assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.attributes) > 0}">

                <cas:attributes>

                    <c:forEach var="attr" items="${assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.attributes}">

                        <cas:${fn:escapeXml(attr.key)}>${fn:escapeXml(attr.value)}</cas:${fn:escapeXml(attr.key)}>

                    </c:forEach>

                </cas:attributes>

            </c:if>


    <c:if test="${not empty pgtIou}">
      <cas:proxyGrantingTicket>${pgtIou}</cas:proxyGrantingTicket>
    </c:if>
    <c:if test="${fn:length(assertion.chainedAuthentications) > 1}">
      <cas:proxies>
    <c:forEach var="proxy" items="${assertion.chainedAuthentications}" varStatus="loopStatus" begin="0" end="${fn:length(assertion.chainedAuthentications)-2}" step="1">
       <cas:proxy>${fn:escapeXml(proxy.principal.id)}</cas:proxy>
    </c:forEach>
      </cas:proxies>
    </c:if>
     </cas:authenticationSuccess>
    </cas:serviceResponse>

     

     

    通过完成上面三个步骤的配置后,server端的工作就完成了,那么如何在客户端获取这些信息呢?下面进行说明:

     

     

     

    java客户端获取:

    AttributePrincipal principal = (AttributePrincipal) request.getUserPrincipal();

    Map attributes = principal.getAttributes();

    String email=attributes .get("email");

    展开全文
  • 单点登录的介绍单点登录(Single Sign On ,简称SSO)...CAS(Central Authentication Service)是 Yale大学发起的一个企业级的、开源的项目,旨在为 Web 应用系统提供一种可靠的单点登录解决方法。在5.0版本之前,cas使...
  • 登录状态自行控制,如jwt/token/cookie/session。这样就可以在Swoole中使用cas了。使用方法:第一步、composer 拉取包 sayid/php-cas-core第二步:$cas = new PhpCasCoreCas(env("CAS_SERVER"), env("CAS_PATH")); ...
  • cas登录成功默认返回的只有用户名, java客户端获取: AttributePrincipal principal = (AttributePrincipal) request.getUserPrincipal(); String username = principal.getName(); php客户端获取 $u....
  • 单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问...CAS是一个单点登录框架,开始是由耶鲁大学的一个组织开发,后...
  • ---恢复内容开始---什么是单点登录?单点登录(Single Sign On),简称为SSO,是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.如果我们的...
  • cas登录成功后转发到service参数定义的地址后使用ajax还是没权限请求接口,出现302,然后使用浏览器直接访问就有权限访问,再次刷新原来的页面发现这个接口有权限访问了,所以我先通过动态script标签发送一次请求,...
  • 一、单点登录概念理解 在多个应用系统,...可以将用户身份信息存储在第三方单点登录认证服务器,可以使用cas单点登录框架实现,cas共享用户身份信息,cookie存储用户身份信息唯一标识(所以要实现单点登录,浏览器不...
  • Spring Security 框架在用户成功登录后的处理逻辑,相对来说比较复杂,比较绕,下面我们就关键逻辑,进行相关分析。首先,框架默认的 AuthenticationSuccessHandler 为 ...
  • 我们一般系统只用一种用户认证方式,但是随着系统越来越多,尤其是内部系统需要一种互信机制,so cas袭来。所谓认证,就是过滤器filter+凭证realm。cas客户端认证流程图,看起来简单,实操起来没那么简单,还是用...
  • 作者丨流云诸葛cnblogs.com/lyzg/p/6132801.html单点登录是我比较喜欢的一个技术解决方案,一方面他能够提高产品使用的便利性,另一方面他分离了各个应用都需要的登录服务,对性能以及工作量都有好处。自从上次研究...
  • 前面在《单web应用系统登录设计》中,都是从一个小型独立的web系统角度做的登录设计。要么是借助三方账号系统的Oauth2.0能力,要么是作为一个子业务系统直接使用单点登录的能力。今天这一篇文章所要总结讲述的,就是...
  • 一、单点登录系统开发需要注意的问题 1.单点登录系统需要支持jsonp请求? 单点登录系统主要是向其他系统提供用户身份验证服务,因此需要提供对外接口,而外部系统通过接口访问时,必然涉及跨域问题,因此需要单点...
  • 直接访问: http://127.0.0.1:8080/cas/login 输入密码然后成功登录 上面没问题, 我在成功界面里面添加了一个链接: http://172.25.61.79:8080/cas/services/manage.html 然后点击 ...则是先跳转到登录界面: ...
  • 一、单点登录系统开发需要注意的问题1.单点登录系统需要支持jsonp请求?单点登录系统主要是向其他系统提供用户身份验证服务,因此需要提供对外接口,而外部系统通过接口访问时,必然涉及跨域问题,因此需要单点登录...
  • GTIN和CAS是什么意思?他们又该如何填写?1、GTIN为条形码,即“全球贸易项目代码”GTIN用作识别商品品项的全球性唯一编码,是编码系统中应用最多的标识代码。而且有四种不同的代码结构:GTIN-14、GTIN-13(原称EAN-...
  • 单点登录Shiro 1.2 开始提供了 Jasig CAS 单点登录的支持,单点登录主要用于多系统集成,即在多个系统中,用户只需要到一个中央服务器登录一次即可访问这些系统中的任何一个,无须多次登录。此处我们使用 Jasig CAS ...
  • 本文首发于政采云前端团队博客:图文并茂,为你揭开“单点登录“的神秘面纱https://www.zoo.team/article/sso概念单点登录( Single Sign On ,简称 SSO),是目前比较流行的企业业务整合的解决方案之一,用于多个应用...
  • 我们都知道CAS登录成功后会返回一些我们所需要的值来提供给各个客户端,有一种情况就是根据不同的情况我们要查询不同的表来进行反馈信息,比如说 当 是管理员登录的时候返回的可能是从A表中查询的数据,当普通用户...
  • 扫码关注公众号「政采云前端团队」,获取更多不掺水的原创好文~概念单点登录(Single Sign On ,简称 SSO),是目前比较流行的企业业务整合的解决方案之一,用于多个应用系统间,用户只需要登录一次就可以访问所有...
  • 传统的登录模式每一个系统都做一套登录功能,登录了A系统之后,如果想要使用B系统,那么需要再登录一次,即使两个系统的账号是一致的。假设一个企业有A B两个系统,那么用户登录这两个系统需要两个cookie来保存两个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 498
精华内容 199
关键字:

cas登录成功