手把手教Apereo CAS5.2.3 注册后自动登录
顺手贴上CAS 5.2.X官方文档:https://apereo.github.io/cas/5.2.x/index.html
hugeo的CAS系列:https://blog.csdn.net/u010588262/article/category/7548325
DEMO下载:
part1: https://download.csdn.net/download/u010588262/10327539
part2:https://download.csdn.net/download/u010588262/10372828
只要手头有用户名和密码就可以实现静默登录,就是不需要用户在登录页面输入信息,比如用户注册之后,你就知道用户名和密码了,就可以用restful的方式根据用户名和密码获得tgt,将tgt塞入cookie即可,大致过程是这样,下面详细说一下。
默认情况下CAS服务端校验用户身份后会生成tgt
,类似这样的字符串:
TGT-1-e9OqKGuTlqMHrLgneGXYLc0fUTyz5DKZ09WpXjtochS-wohnm2syP4mZH2VAwLZ1nEI-LAPTOP-UVV0Q09C
然后使用DefaultCasCookieValueManager
将tgt
加上客户端IP
、客户端代理信息
后再加密,形成一个复杂的很长的串儿写入用户浏览器的cookie中取名TGC
,这样用户每次访问服务端校验时会自动带着TGC
,服务端收到了就解密校验了。
所以想要默默地单点登录就要默默地生成TGC
放在cookie中。 两种方式实现
推荐方式
注意:此处假设你看过我之前的几篇博客了,或者说对CAS比较了解了的情况下,不会做详细解释
通过此方法,登录流程为:
1. 用户注册成功后,代码通过rest方式调服务端接口获得TGT(不知道怎么获取的请看下之前有一篇详细说rest接口验证的博客)
2. 302跳转到服务端/setcookie接口,这个接口需要我们自己开发,将用户要访问的客户端地址serviceUrl和第一步获得tgt传过去,服务端校验tgt并生成tgc放入cookie
3. 服务端302跳转到serviceURL,用户登录成功
具体方法:
新增生成cookie的类:
package com.hugeo.cas;import org.apereo.cas.CipherExecutor;
import org.apereo.cas.web.support.CookieRetrievingCookieGenerator;
import org.apereo.cas.web.support.CookieValueManager;
import org.apereo.cas.web.support.DefaultCasCookieValueManager;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.util.CookieGenerator;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class HugeoCookieGenerator extends CookieGenerator {CookieValueManager cookieValueManager;public HugeoCookieGenerator(CookieRetrievingCookieGenerator generator,CipherExecutor executor) {super.setCookieName(generator.getCookieName());super.setCookiePath(generator.getCookiePath());this.setCookieDomain(generator.getCookieDomain());super.setCookieMaxAge(generator.getCookieMaxAge());super.setCookieSecure(generator.isCookieSecure());super.setCookieHttpOnly(generator.isCookieHttpOnly());cookieValueManager = new DefaultCasCookieValueManager(executor);}public void addCookie(String tgt) {ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();HttpServletRequest request = attributes.getRequest();HttpServletResponse response = attributes.getResponse();String theCookieValue = this.cookieValueManager.buildCookieValue(tgt, request);super.addCookie(response, theCookieValue);}}
随便找个configuration类把类定义为bean
@Autowired
CipherExecutor cookieCipherExecutor;@Autowired@Qualifier("ticketGrantingTicketCookieGenerator")private CookieRetrievingCookieGenerator generator;@BeanHugeoCookieGenerator hugeoCookieGenerator(){return new HugeoCookieGenerator(generator, cookieCipherExecutor);}
自己写个controller通过tgt生成cookie
@Autowired
@Qualifier("centralAuthenticationService")
private CentralAuthenticationService centralAuthenticationService;
@Autowired
HugeoCookieGenerator hugeoCookieGenerator;@GetMapping("/setcookie")
public String setCookie(@RequestParam("service") String service, @RequestParam("tgt") String tgt) {try {// 校验Ticket ticket = this.centralAuthenticationService.getTicket(tgt, Ticket.class);if (ticket == null || ticket.isExpired()) {// 无效tgt,跳转到登录return "redirect:/login";}// 添加cookiehugeoCookieGenerator.addCookie(tgt);// 跳转到客户端return "redirect:" + service;} catch (Exception e) {e.printStackTrace();}return "redirect:/login";}
简单方式(安全性有降低)
之前的restful博客中写了怎么通过接口获得tgt
,现在问题是怎么通过tgt
获得tgc
呢,网上查资料发现tgt
除了默认的加密生成方式外,还有一种就是NoOpCookieValueManager
,这种方式就是直接返回tgt
,也就是说tgc
和tgt
是一模一样的,CAS是这样判断的:
关键词:properties,tgc,crypto
所以到官方文档中找相应的配置,把tgc的crypto关闭
https://apereo.github.io/cas/5.2.x/installation/Configuration-Properties.html
需要翻一下wall
搜索tgc很容易就找到了:
所以我们在配置文件application.properties
中加上:
# 不要加密tgt
cas.tgc.crypto.enabled=false
但是这样做有弊端就是安全性有所降低,之前加密的方式使得tgt
与客户端ip
和agent
绑定,而现在不加密的方式使得生成的tgt可以被任何客户端和IP使用。当然这也是最简单的方法。
然后我开始测试了,测试思路是:
1. 使用postman调接口获得tgt。相当于是用户注册成功后,你用代码调接口获得tgt
2. 把tgt放到cookie中。我此处是直接在chrome浏览器中通过edit this cookie插件实现的,相当于在代码中setCookie,注意要设置cookie的domain为CAS服务器端的地址,这样客户端重定向到服务端进行校验时才会带着这个cookie。
此时访问客户端即为登录状态了
此篇参考了文章:https://blog.csdn.net/cn_yh/article/details/77962467
手把手教Apereo CAS5.2.3 注册后自动登录相关推荐
- 修改cas5成功html文件,手把手教Apereo CAS5.2.3 Server端 增量开发 自定义登录页,增加验证码,注册,修改密码等功能的方式...
很高兴CAS系列帮助到了不少小伙伴,有不少小伙伴加QQ跟我交流 有个比较普遍的问题是大家不知道怎么把注册,修改密码等相关的功能嵌入CAS,这篇博客统一解答下,有些关于spring的内容是我查找资料结合 ...
- 【转】cas注册后自动登录
本文转自:http://denger.iteye.com/blog/805743 1. 关于CAS的介绍不再累述,我想涉及过SSO同学应该都会对该框架所有了解,我们目前项目采用的CAS Server ...
- 注册后自动登录 php,php – 自动注册后用户身份验证
Symfony 2.6.x – Symfony 3.0.x 从symfony 2.6开始security.context已弃用,赞成security.token_storage.控制器现在可以简单地是 ...
- 简单个人博客系统java web_JavaWeb个人博客项目:手把手教你实现博客后台系统之登录与注册...
JavaWeb个人博客项目:手把手教你实现博客后台系统之登录与注册 发布时间:2020-07-17 17:10阅读:( )字号: 大 中 小 后台系统的所有界面图以及之前的准备工作欢迎看我之前的博文& ...
- 手把手教你IDEA+SpringBoot+MyBatis+MySql实现动态登录与注册
Just Code It 一.搭建SpringBoot项目1.1.file --> new --> project--> Spring Initializr--> next-- ...
- android 应用软件注册与自动登录代码
琢磨了很久 实现系统第一次启动显示欢迎及快速注册界面,注册成功后下次运行实现自动登录. 系统启动后首先进入系统主界面,读取用户名和密码,如果为空则直接跳转到快速注册界面,否则系统正常运行. 快速注册界 ...
- android登录程序代码,android 应用软件注册与自动登录代码
琢磨了很久 实现系统第一次启动显示欢迎及快速注册界面,注册成功后下次运行实现自动登录. 系统启动后首先进入系统主界面,读取用户名和密码,如果为空则直接跳转到快速注册界面,否则系统正常运行. 快速注册界 ...
- 开机、注销后自动登录Windows
在很多实际应用过程中,会遇到Windows系统开机或注销后,需自动登录Windows系统的情况. 现使用通过修改注册表的形式实现上述功能,详见内容,详见下文. 1,单击开始菜单,然后点击右侧的&quo ...
- 关于新浪微博注销后自动登录的问题
最近程序中需要做分享功能,腾讯的的OK,但新浪的注销后,再次点击时,本来应该进入到登录的授权页面,webview形式出现.但结果每次再进入时,会自动登录上次注销的号. 查了相关资料后,发现有两种解决办 ...
最新文章
- C#操作excel(多种方法比较)
- leetcode_linearList03
- C#常量——const和readonly
- let/var——事实上var的设计可以看成JavaScript语言设计上的错误. 但是这种错误多半不能修复和移除, 以为需要向后兼容.||将let看成更完美的var
- Android version and Linux Kernel version
- oracle 01192,万分火急:ora-01503 ora-01192
- 从知识图谱到文本:结合局部和全局图信息生成更高质量的文本
- 基于 abapGit 和 abaplint 的 ABAP 持续集成的一个例子
- 初学者持续自我提升指南
- dft计算傅里叶级数系数_一道国外的DFT性质的题目
- mysql 同一帐号多次登录_freeradius2.1.3 防止用户帐号重复登录
- 什么是Docker?看这一篇干货文章就够了!
- javascript框架比较(二)
- Selenium2.0 获取隐藏元素的内容
- 经典的面试题如果不通过其他任何变量实现两个数值类型的变量互相更换值。...
- 动态相关系数dcc_常相关系数(CCC)和动态条件相关系数(DCC)
- 假短信截图在线生成器_一个工具箱:汇集200多款实用又好玩的在线工具的神奇百宝箱...
- 抓取腾讯校园招聘的第一页
- 猫和计算机连接网络,宽带猫和路由器怎样连接 宽带猫和路由器连接方法【教程】...
- 关于搭建Vue项目的顺序及遇到的问题