【转】cas注册后自动登录
本文转自:http://denger.iteye.com/blog/805743
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中
【转】cas注册后自动登录的更多相关文章
- 解决zlibrary注册后,再次登录提示密码错误的问题
很多小伙伴注册后,再登录提示电子邮件或密码错误,但是可以确认账号密码都是正确的,这种应该怎么处理呢? 其实这种问题有两种处理方式, 首先使用 https://find.looks.wang/ 检测可以 ...
- SpringBoot学习:整合shiro(rememberMe记住我后自动登录session失效解决办法)
项目下载地址:http://download.csdn.NET/detail/aqsunkai/9805821 定义一个拦截器,判断用户是通过记住我登录时,查询数据库后台自动登录,同时把用户放入ses ...
- linux启动后自动登录并运行自定义图形界面程序
在<Ubuntu CTRL+ALT+F1~F6 进入命令模式后不支持中文显示的解决办法>一文中提到linux启动在以后运行一个独占显示器的图形程序的两种办法. 1.不启动xserver,使 ...
- 【转载】CentOS 7自动以root身份登录gnome桌面 操作系统开机后自动登录到桌面 跳过GDM
CentOS 7自动以root身份登录gnome桌面 ################### #cd /etc/gdm ]# cat custom.conf# GDM configuration st ...
- 如何让用户登录Dynamics 365 Customer Engagement后自动登录到Unified Interface App?
微软动态CRM专家罗勇 ,回复324或者20190422可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me! Dynamics 365 Customer Engagement ...
- ucenter 新增用户后 自动登录discuz 不用激活
uc_client models user.php function add_user($username, $password, $email, $uid = 0, $questionid = '' ...
- Java 扫描微信公众号二维码,关注并自动登录网站
https://blog.csdn.net/qq_42851002/article/details/81327770 场景:用户扫描微信公众号的二维码,关注后自动登录网站,若已关注则直接登录. 逻辑: ...
- Remote Desktop manager 连接后无法自动登录
现象: Remote Desktop manager 连接后无法自动登录 用Windows 自带的远程桌面 可以自动登录 解决方法: 在指定站点 右键 Edit Entry. 如下图处打勾就可以了.
- windows 开机自动登录,或者说是开机后自动进入桌面
这篇文章,对于XP以及XP以上版本有效,包括Windows Server服务器操作系统. 1.原理 --Windows自动登录的原理是,开始后,自动输入登录所使用的账号的用户名和密码,并且自动进入桌面 ...
随机推荐
- hdu1535 SPFA
2边SPFA 然后求和 #include<stdio.h> #include<string.h> #include<queue> #define INF 10000 ...
- 图解Android - Zygote, System Server 启动分析
Init 是所有Linux程序的起点,而Zygote于Android,正如它的英文意思,是所有java程序的'孵化池'(玩过星际虫族的兄弟都晓得的).用ps 输出可以看到 >adb shell ...
- word中打出希腊字母
作为一个键盘党,不喜欢用鼠标去选择希腊字母,希望只用键盘就能在word中打出希腊字母. 方法是:按照下图所示对应表,先输入英文字母,然后选中它并按Ctrl+Shift+Q
- CruiseControl.NET开篇
在这里说明一下,我终于踏上了CruiseControl.NET这条不归路了,为什么我会觉得是一条不归路,原因很简单,就是这东西在现在这个阶段已经很久没有在园子里有活跃度了,基本上到了已经可以到了让大家 ...
- linux下svn命令大全
linux下svn命令大全 1.将文件checkout到本地目录 svn checkout path(path是服务器上的目录) 例如:svn checkout svn://192.168.1.1/p ...
- 在Eclipse中编写servlet时出现"The import javax.servlet cannot be resolved" 问题解决办法
在Eclipse中,project->properties,选择Java Build Path->Libraries->Add External JARs,找到你计算机中tomcat ...
- Python socket编程之七:多窗口的应用
f1.py # -*- coding: utf-8 -*- import socket import struct import sqlalchemy import pandas ########## ...
- 解决:[INS-20802] Oracle Net Configuration Assistant failed
在linux 中安装Oracle 11G 的时辰呈现 [INS-20802] Oracle Net Configuration Assistant failed 是oracle数据库的鼓掌,须要补丁p ...
- JS闭包(转载加整理)
原文地址:http://www.jb51.net/article/24101.htm 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 一.变量 ...
- C++对象模型:单继承,多继承,虚继承
什么是对象模型 有两个概念可以解释C++对象模型: 语言中直接支持面向对象程序设计的部分.对于各种支持的底层实现机制. 类中成员分类 数据成员分为静态和非静态,成员函数有静态非静态以及虚函数 clas ...