`
denger
  • 浏览: 356815 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

CAS 之 实现用户注册后自动登录

阅读更多
     1. 关于CAS的介绍不再累述,我想涉及过SSO同学应该都会对该框架所有了解,我们目前项目采用的CAS Server 版本为 3.4.2.1, 其 CAS Client 版本为 3.1.10。
         CAS项目官方:http://www.jasig.org/cas
         本文讲述CAS登录处理未包括 CAS Client 与 Server 端的对 ST 采用SMAL验证的流程。

     2. 对于登录其主要处理流程:
         注册成功后 -> 调用CAS登录处理的相关模块 -> 验证用户名密码 -> 生成TGT -> 生成TG -> Add ST&TGT至相关Register类 -> Add TGT至Cookie -> 重定向至 cas/login URL -> 完成


     3.  CAS 登录处理主要模块(类):
              a. Credentials  用于存储用户登录认证信息接口。
                  其默认实现类:org.jasig.cas.authentication.principal.UsernamePasswordCredentials

              b. CentralAuthenticationService 用于生成 ST(Service Ticket) 和  TGT(TicketGrantingTicket)的认证服务类。
                  其默认实现类: org.jasig.cas.CentralAuthenticationServiceImpl

              c. CookieRetrievingCookieGenerator 用于将TGT添加至Cookie及对Cookie进行管理。


     4.  具体实现代码:

 /**
	 * user register process and automatic login.
	 * @param userForm the user information object.
	 * @param request  the HttpServletRequest object
	 * @param response the HttpServletResponse object
	 * @return get result view
	 */
	protected ModelAndView handleUserRegisterInternal(UserInfoVo userForm, HttpServletRequest request, HttpServletResponse response) {
		
		ModelAndView signinView = new ModelAndView(REGISTER_VIEW);;
		final boolean isUnique = userService.checkUserUnique(userForm.getLoginName());
		final boolean isRegistered = isUnique ? registerUser(userForm, request, response) : false;

		if (isRegistered) {
			bindTicketGrantingTicket(userForm.getLoginName(), userForm.getLoginPassword(), request, response);
			signinView.setViewName(getSignInView(request));
		}
		return signinView;
	}

          
 /**
	 * Invoke generate validate Tickets and add the TGT to cookie.
	 * @param loginName 	the user login name.
	 * @param loginPassword the user login password.
	 * @param request		the HttpServletRequest object.
	 * @param response		the HttpServletResponse object.
	 */
	protected void bindTicketGrantingTicket(String loginName, String loginPassword, HttpServletRequest request, HttpServletResponse response){
		try {
			UsernamePasswordCredentials credentials = new UsernamePasswordCredentials();
			credentials.setUsername(loginName);
			credentials.setPassword(loginPassword);
			String ticketGrantingTicket = centralAuthenticationService.createTicketGrantingTicket(credentials);
			ticketGrantingTicketCookieGenerator.addCookie(request, response, ticketGrantingTicket);
		} catch (TicketException te) {
			logger.error("Validate the login name " + loginName + " failure, can't bind the TGT!", te);
		} catch (Exception e){
			logger.error("bindTicketGrantingTicket has exception.", e);
		}
	}



 /**
	 * Get the signIn view URL.
	 * @param request the HttpServletRequest object.
	 * @return redirect URL
	 */
	protected String getSignInView(HttpServletRequest request) {
		String service = ServletRequestUtils.getStringParameter(request, "service", "");
		return ("redirect:login" + (service.length() > 0 ? "?service=" + service : ""));
	}

   
cas-servlet.xml 相关代码:
	<bean id="registerController" class="com.xxxxx.sso.web.RegisterController" 
		p:userService-ref="userService"
		p:validator-ref="registerValidator"
		p:centralAuthenticationService-ref="centralAuthenticationService"
		p:ticketGrantingTicketCookieGenerator-ref="ticketGrantingTicketCookieGenerator"/>

注: 关于centralAuthenticationService及ticketGrantingTicketCookieGenerator已声明在 spring-configuration/applicationContext.xml 和 ticketGrantingTicketCookieGenerator.xml中
7
4
分享到:
评论
19 楼 denger 2015-03-21  
18 楼 xiaobadi 2015-01-09  
楼主大神,太牛了
17 楼 fads 2014-12-17  
楼主,求联系方式,这个做了之后没有成功添加票据,又自动跳转到登陆页去了
16 楼 xiaobadi 2014-09-30  
求楼主联系方式
15 楼 denger 2014-09-16  
lizhou828 写道
[size=x-large] 感觉被标题骗了,标题是:CAS 之 实现用户注册后自动登录。。。那为毛还要调到登录页面?("redirect:login" + (service.length() > 0 ? "?service=" + service : ""));
[color=red][/color]




说好的自动登录呢???
[/size]

不懂 CAS 的原理就不要在这里瞎说行吗??

14 楼 lizhou828 2014-09-05  
[size=x-large] 感觉被标题骗了,标题是:CAS 之 实现用户注册后自动登录。。。那为毛还要调到登录页面?("redirect:login" + (service.length() > 0 ? "?service=" + service : ""));
[color=red][/color]




说好的自动登录呢???
[/size]
13 楼 xiaobadi 2014-09-04  
denger 写道
lizhou828 写道
怎么不把代码全都贴出来啊??

这里只是提供一个思路。 全贴出来还不如把这个工程放这里呢。。

那楼主就把工程给大家参考参考吧
12 楼 denger 2014-09-03  
lizhou828 写道
怎么不把代码全都贴出来啊??

这里只是提供一个思路。 全贴出来还不如把这个工程放这里呢。。
11 楼 lizhou828 2014-09-03  
怎么不把代码全都贴出来啊??
10 楼 xiaobadi 2014-09-02  
freerambo 写道
有源代码提供吗? 后面的java代码不知道放在那些类里。。。

同问,楼主还在这?
9 楼 freerambo 2014-06-09  
有源代码提供吗? 后面的java代码不知道放在那些类里。。。
8 楼 glassesbamboo 2013-12-23  
不错的文章,不过应该是SAML吧?打字太快顺序反了一个。哈哈。
7 楼 denger 2013-08-16  
daringyun 写道
原文在这里:http://www.codeweblog.com/implementation-of-cas-automatically-log-registered-users/

原个屁,这文章就是翻译了我的文章。NND 还不注明我的原文链接。
6 楼 daringyun 2013-08-15  
原文在这里:http://www.codeweblog.com/implementation-of-cas-automatically-log-registered-users/
5 楼 qq461149132 2012-10-09  
lz,请问您说的写在服务端是指的—CASserver里面吗?
4 楼 vikingkyo 2012-05-10  
能有服务端的全部代码提供参考吗?
3 楼 denger 2012-05-10  
vikingkyo 写道
您好。您的文章都很有用。我想问下 这个实现代码是写在客户端还是服务端的?

谢谢,写在服务端的
2 楼 vikingkyo 2012-05-10  
您好。您的文章都很有用。我想问下 这个实现代码是写在客户端还是服务端的?
1 楼 laigood12345 2011-11-30  
楼主好,请问你说的“注册成功”是怎样实现的?registerController中?

相关推荐

    node-v14.17.3-darwin-x64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    c语言UDP传输系统源码.rar

    c语言UDP传输系统源码.rar

    node-v16.2.0-darwin-x64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    基于matlab多目标遗传算法matlab程序.rar

    基于matlab多目标遗传算法matlab程序.rar

    MCSkinn (我的世界)皮肤制作工具

    软件可以给需要制作自己喜爱的MC皮肤的玩家来自己制作皮肤,快来下载吧!

    数据可视化-Pyecharts绘制饼图

    数据可视化-Pyecharts绘制饼图

    操作系统基础知识.zip

    操作系统是计算机系统中至关重要的组成部分,它作为计算机硬件与软件之间的桥梁,负责管理和控制计算机的硬件和软件资源,确保它们得到合理的分配和使用。操作系统不仅影响计算机的性能,还决定了用户界面的友好程度以及计算机系统的安全性和稳定性。因此,深入理解和掌握操作系统的知识对于计算机专业人士来说至关重要。

    欧母龙PLC例程源码小车控制程序

    欧母龙PLC例程源码小车控制程序提取方式是百度网盘分享地址

    么么哒.mp3

    么么哒.mp3

    node-v14.3.0-darwin-x64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    python修改网站会员登陆密码

    登录密码是一种用于验证用户身份并授权其访问特定系统、应用程序或网站的机制。它是用户在注册或创建账户时自行设置的秘密字符组合,通常与用户名配对使用。登录密码是保护用户隐私和数据安全的重要措施之一。

    node-v13.9.0-linux-s390x.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v16.13.0-linux-s390x.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v13.10.0-linux-ppc64le.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    毕业设计 基于Pytorch毕业论文知识图谱(Neo4j)构建平台源码+详细文档+全部数据资料(高分项目).zip

    【资源说明】 毕业设计 基于Pytorch毕业论文知识图谱(Neo4j)构建平台源码+详细文档+全部数据资料(高分项目).zip毕业设计 基于Pytorch毕业论文知识图谱(Neo4j)构建平台源码+详细文档+全部数据资料(高分项目).zip 【备注】 1、该项目是个人高分毕业设计项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过mac/window10/11测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    机械设计外扇叶金属轴装配step非常好的设计图纸100%好用.zip

    机械设计外扇叶金属轴装配step非常好的设计图纸100%好用.zip

    node-v13.4.0-linux-ppc64le.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    Maven:构建自动化与项目管理的利器.zip

    Maven作为一款强大的项目管理工具,为开发者提供了自动化构建、依赖管理、项目文档生成等功能。通过掌握Maven的核心概念和基本使用,开发者可以更加高效地管理项目,提高开发效率和质量。同时,Maven的灵活性和可扩展性也使得它能够适应各种复杂的项目需求。因此,无论是初学者还是资深开发者,都应该学习和掌握Maven这一项目管理利器。

    欧母龙PLC例程源码洗涤器电机插管改善

    欧母龙PLC例程源码洗涤器电机插管改善提取方式是百度网盘分享地址

Global site tag (gtag.js) - Google Analytics