因最近公司要用到cas登陆而且要使用自定登陆页面,网络上搜索了一下cas自定义登陆,比较好的两篇文章 CAS 之自定义登录页实践和 CAS 之 跨域 Ajax 登录实践,感觉写的不错,但是发现改动的地方很多。而且有些说的不是很详细。但是思路可以借鉴一下。
研究了cas整个登陆流程发现只要获取 lt 登录令牌时改变跳转方向就行,
所以修改 login-webflow.xml 文件
添加一个转跳条件
添加 view 视图
最后,再定义一下 view 的页面地址吧,修改 default_views.properties,添加:
casTicketViewAjax.(class)=org.springframework.web.servlet.view.JstlView
casTicketViewAjax.url=/WEB-INF/view/jsp/custom/ui/ajaxTicket.jsp
jsp 代码如下
<%@ page pageEncoding=”UTF-8″ %>
<%@ page contentType=”text/html; charset=UTF-8″ %>
<%@ taglib prefix=”c” uri=”http://java.sun.com/jsp/jstl/core” %>
var _loginTicket=’${loginTicket}’;
var _flowExecutionKey=’${flowExecutionKey}’;
通过 generateLoginTicketAction 在cas-servlet.xml 这个找到了
修改类 GenerateLoginTicketAction 里的 generate 方法,修改为如下
public final String generate(final RequestContext context) {
final String loginTicket = this.ticketIdGenerator.getNewTicketId(PREFIX);
String ticlet = context.getRequestParameters().get(“ticket”);
logger.debug("Generated login ticket {}", loginTicket);
WebUtils.putLoginTicket(context, loginTicket);
if(ticlet!=null&&ticlet.equals("nbrc")){
return "generatedTicket";
}
return "generated";
}
用于提交数据的 form 表单格式:
!–密码–>
添加在 js 添加如下这个
var flushLoginTicket = function(){
var _services = ‘service=’ + encodeURIComponent(‘${localService}/j_spring_cas_security_check’);
var _cas_services = ‘${casService}/login’;
var cas_url=_cas_services+’?’+_services;
$(‘[data-nbrc=”from” ]’).attr(“action”,cas_url)
$.getScript(cas_url+’&ticket=nbrc&n=’+ new Date().getTime(),
function(){
// 将返回的 _loginTicket 变量设置到 input name=”lt” 的 value 中。
$(‘[data-nbrc=”J_LoginTicket”]’).val(_loginTicket);
$(‘[data-nbrc=”J_Execution”]’).val(_flowExecutionKey);
});
说明:
${localService} 为 cas.auth.server=cas 项目 url 地址
${casService}为 cas.local.server=为自己项目 url 地址
效果就不放出来了,本人已经在生产环境中使用过了
蛋疼的 csdn 编辑器
作者:lxyg06
来源:CSDN
原文:https://blog.csdn.net/lxyg06/article/details/51888243
版权声明:本文为博主原创文章,转载请附上博文链接!