`
denger
  • 浏览: 356921 次
  • 性别: 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中?

相关推荐

    禅道开源版集成CAS单点登录

    本文在已有的禅道集成CAS单点登录的客户端插件基础上进行的修改,因原有插件在我们的系统上调试无法成功,做了一些定制,环境如下: 1. CAS server 版本:4.0.0 2. 禅道开源版本: 9.6.3 3. 禅道CAS client 插件版本...

    全新JAVAEE大神完美就业实战课程 超150G巨制课程轻松实战JAVAEE课程 就业部分.txt

    15单点登录解决方案CAS 16购物车解决方案 17跨域解决方案与提交订单 18微信扫码支付 19秒杀解决方案 20品优购系统业务分析 1集群概述 2Zookeeper集群 2品优购电商系统部署 3SolrCloud集群 4Redis...

    java开源包3

    JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...

    Android BroadcastReceiver实现网络状态实时监听

    本文将介绍使用四大组件之一的BroadcastReceiver实现全局的网络状态监听,使用动态方式注册。 BroadcastReceiver的注册方式: (1)动态注册:即在代码中使用registerReceiver()方法进行注册,动态注册需要在onPause...

    java开源包4

    JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...

    JAVA上百实例源码以及开源项目源代码

     当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接得线程,启动该通讯线程,通讯完毕,关闭Scoket。  QQ客户端登录界面,中部有三个JPanel,有一个叫选项卡窗口管理。还可以更新...

    JAVA上百实例源码以及开源项目

     当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接得线程,启动该通讯线程,通讯完毕,关闭Scoket。  QQ客户端登录界面,中部有三个JPanel,有一个叫选项卡窗口管理。还可以更新...

    java开源包1

    JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...

    java开源包11

    JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...

    java开源包2

    JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...

    java开源包6

    JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...

    java开源包5

    JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...

    java开源包10

    JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...

    java开源包8

    JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...

    java开源包7

    JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...

    java开源包9

    JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...

    java开源包101

    JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...

    Java资源包01

    JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...

    使用 iAMA 改进学术咨询系统-研究论文

    利用遗传算法促进经验学生分数自动发现的智能分数推定单元以及该单元将估计需要根据学生的 GPA 获得的分数、显示所有以前通过和失败的注册课程成绩的学习计划单元以及帮助用户就放弃当前注册的任何课程做出正确决定...

Global site tag (gtag.js) - Google Analytics