【转】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中
扫描公众号,关注更多信息
---------------------------------------------------------------------------------我是分割线--------------------------------------------------------------------------to be a better me, talk is cheap show me the code
版权所有,转载请注明原文链接。
文中有不妥或者错误的地方还望指出,以免误人子弟。如果觉得本文对你有所帮助不妨【推荐】一下!如果你有更好的建议,可以给我留言讨论,共同进步!
再次感谢您耐心的读完本篇文章。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?