一种注册后自动登录CAS单点登录系统的方法

原创 2016年08月29日 12:29:22

集成了单点登录的Web应用,现在有这样的需求:
1. 因为各个Web应用注册时要求的信息有差异,因此注册功能在Web应用中单独实现,不在CAS单点登录系统中提供
2. 要求在Web应用注册后,不需要用户输入用户名和密码,自动向CAS发起登录

实现的方法应该有多种,这里提供一个开发比较简单的思路。
1. 仿照CAS的Rest API,开发一个登录验证的API,这个API比较特殊的处理是需要写Cookie。
2. Web服务端注册之后,开一个iframe,submit到上面的登录验证的API。这样登录验证成功之后,浏览器里就会有CAS服务器的TGT Cookie信息。

关键代码如下:
1 web.xml中增加restlet的处理,如果已经添加的话,跳过

<servlet>
    <servlet-name>restlet</servlet-name>
    <servlet-class>org.restlet.ext.spring.RestletFrameworkServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>restlet</servlet-name>
    <url-pattern>/v1/*</url-pattern>
</servlet-mapping>

2 restlet-servlet.xml文件中增加登录验证API

<entry key="/muteLogin">
    <bean class="org.restlet.ext.spring.SpringFinder">
        <lookup-method name="create" bean="muteLoginResource" />
    </bean>
</entry>

<bean id="muteLoginResource" class="com.example.MuteLoginResource" scope="prototype" />

3 MuteLoginResource的代码中验证登录,并写入cookie

final String ticketGrantingTicketId = this.centralAuthenticationService.createTicketGrantingTicket(c);
final String serviceTicketId = this.centralAuthenticationService.grantServiceTicket(
    ticketGrantingTicketId, new WebApplicationServiceImpl(service, null, null, null, null));

CookieRetrievingCookieGenerator cookieGenerator =
(CookieRetrievingCookieGenerator) Const.WEB_APP_CONTEXT.getBean("ticketGrantingTicketCookieGenerator");
CookieSetting cookieSetting = new CookieSetting(0, cookieGenerator.getCookieName(), ticketGrantingTicketId, cookieGenerator.getCookiePath(), null);
this.getResponse().getCookieSettings().add(cookieSetting);

this.getResponse().redirectPermanent(service + "?ticket=" + serviceTicketId);

4 最后写一个html iframe测试一下

<html>
  <head>
      <title>Status page</title>
  </head>
  <body style="font-family: sans-serif;">
      <script language="javascript">
        window.onload=function() {
          ifr.document.open();
          ifr.document.write("<html><body>");
          ifr.document.write("<form id='form1' name='form1' id='form1' width='1' height='1' method='post' action='http://localhost:8080/cas/v1/muteLogin'>");
          ifr.document.write("<input id='service' name='service' value='http://test.com/shiro-cas'/>");
          ifr.document.write("<input id='username' name='username' value='18011111111'/>");
          ifr.document.write("<input id='password' name='password' value='123456'/>");
          ifr.document.write("</form>");
          ifr.document.write("</body></html>");
          ifr.document.close();
        }

        function doSomething() {
          parent.ifr.form1.submit();
          alert('finished');
        }
      </script>

      <iframe name="ifr" id="ifr" style="display:none"></iframe>
      <input type="button" onclick="doSomething()" value="Click me"/>
    </body>
</html>

供参考

Cas客户端业务系统自动登录处理

Cas客户端业务系统自动登录处理 作用及原理说明 -------------------------------------------------        通常业务系统采用cas框架做单点认证...
  • jzshmyt
  • jzshmyt
  • 2013年08月24日 20:46
  • 1462

CAS单点登录系统整合——注册的问题

最近一段时间在搞CAS单点登录系统,涉及到几个子系统的整合问题。对于注册,这里遇到了一个选择: 在子系统内完成注册,然后把信息同步到CAS系统;在CAS系统中完成基本信息的注册,比如:用户名...
  • u010786672
  • u010786672
  • 2014年02月20日 19:00
  • 1534

cas 注册后自动登录

我用的 cas server 4.0.1 cas client 3.3.3 算是版本比较新的了 网上的demo是cas 3.x的 比较老 参考博客 :http://binghejinjun.iteye...
  • koproblem
  • koproblem
  • 2017年04月11日 10:02
  • 396

cas单点登录实例完整版,可直接运行

  • 2014年03月28日 15:26
  • 20.63MB
  • 下载

CAS单点登录用户注册后自动登录

一 通常可能会在做项目的时候遇到此种需求:CAS客户端应用完成用户注册功能后直接跳转至CAS服务器登录并显示自定义的客户端某个页面;而不是用户完成注册后再次登录CAS服务器登录页面进行登录.这就是完成...
  • a128953ad
  • a128953ad
  • 2014年08月01日 09:58
  • 3587

CAS单点登录用户注册后自动登录

CAS单点登录用户注册后自动登录 博客分类:  CAS单点登录 javaCAS注册后登录     一 通常可能会在做项目的时候遇到此种需求:CAS客户端应用完成用户注册功能后直接跳转至CAS...
  • Fupengyao
  • Fupengyao
  • 2016年08月14日 14:18
  • 1394

使用程序自动登录网站

之前写过一篇使用代码自动登录网站,下载数据的博客程序自动登录和下载数据,后来在测试发现发现使用之前博客中的方法会导致网站系统异常,自然也就不能登录和下载数据了。但因为不是自己的网站不知道导致异常的原因...
  • xuexiaodong2009
  • xuexiaodong2009
  • 2017年12月22日 09:42
  • 59

Python实现Selenium实现自动登录CSDN

最近有个需求是写个脚本自动登陆某个望网站,并干嘛干嘛的,于是乎研究了下python的东西,发现python有个好用的库selenium可以直接调用 那么问题来了,要用哪个浏览器实现呢,我这边用的是火...
  • xshuang2
  • xshuang2
  • 2016年12月15日 16:16
  • 398

单点登录cas常见问题(三) - 单点登出时,子系统是否同步登出?

答案是:子系统会同步登出。 可以跟踪源码(这里cas版本是4.x) 调用流程如下: terminateSessionAction.terminate(flowRequestContext...
  • matthewei6
  • matthewei6
  • 2016年02月18日 19:47
  • 3094

单点登录cas常见问题(一) - 子系统是否还要做session处理?

如果使用phpcase等cas系统提供的客户端sdk,他帮我们自动做好了session的处理:cas中心验证用户凭证后,会把用户信息传递给子系统,子系统的客户端sdk会把cas中心传回来的用户信息保存...
  • matthewei6
  • matthewei6
  • 2016年02月17日 22:23
  • 5247
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一种注册后自动登录CAS单点登录系统的方法
举报原因:
原因补充:

(最多只允许输入30个字)