EAS Cloud 对接第三方认证中心后保留自认证二开方案
## 1、反编译类
类名:com.kingdee.bos.sso.client.filter.validation.KDPortalTicketValidationFilter
包路径:eas\server\lib\web\portal\bos_sso_client.jar
直接反编译实现,不要继承,继承需要改非常多配置,还会被补丁覆盖
## 2、重写preFilter方法
### 修改思路:
从第三方过来与eas自己的认证中心过来,请求头中的referer属性是不一样的,利用这个不同来区分票据是哪个中心生成的,从而将验证票据的地址进行修改来同时兼容自用认证和第三方认证。
![image.webp](/download/01004dbd575fbfd7419d804ab68030f4f257.webp)
### 参考源码:
(提供修改思路,具体以实际环境代码版本为基础修改)
```
HttpServletResponse resp = (HttpServletResponse) servletResponse;
HttpServletRequest res = (HttpServletRequest) servletRequest;
if (!FilterUtil.isUnFilter(servletRequest)) {
String referer = res.getHeader("referer");
if (referer != null && referer.contains("172.19.106.10")) {
this.setCasServerUrlPrefix("http://172.19.106.10:6888/eassso/");
} else {
this.setCasServerUrlPrefix("http://" + res.getLocalAddr() + ":" + res.getLocalPort() + "/eassso/");
}
constructLoginUrl(servletRequest);
constructServerName(servletRequest);
this.setTicketValidator(getTicketValidator());
return super.preFilter(servletRequest, servletResponse, filterChain);
} else {
filterChain.doFilter(servletRequest, servletResponse);
return false;
}
```
### 二开问题跟踪:
将referer与拼接的地址打出来,方便跟踪问题
如果getLocalAddr()和getLocalPort()两个方法找不到,需要引apusic的包到编译环境,apusic\common\javaee.jar
### 温馨提示:
1、如果现场eas的地址是http://172.1.2.3:8080/portal,那ssoClient文件中的cas.client.serverName参数要等于http://172.1.2.3:8080
如果现场eas还配置了域名为http://www.easdemo.com/portal,那ssoClient文件中的cas.client.serverName参数可以等于http://www.easdemo.com或者http://172.1.2.3:8080(如果是使用域名场景,建议使用http://www.easdemo.com)
2、除了可以使用cas认证登录的话,还可以通过使用http://172.1.2.3:8080/eassso/login?service= http://172.1.2.3:8080/portal/main.jsp的方式来使用EAS原有的登录方式。
如果有配置域名的话,也可以通过使用http://www.easdemo.com/eassso/login?service= http://www.easdemo.com/portal/main.jsp的方式来使用EAS原有的登录方式。
## 3、部署私包
eas/server/lib/sp
## 4、问题跟踪
Cas需要的日志级别是DEBUG 可以日志级别调高看一下更详细的CAS日志 eas\server\profiles\server*\config\log4j.properties log4j.rootLogger 属性 error 改成 DEBUG
## 5、兼容index2sso.jsp的登录方式
修改文件server\deploy\portal.ear\portal.war\index2sso.jsp
参考修改源码如下(提供修改思路,具体以实际环境代码版本为基础修改):
```
String easHost = "127.0.0.1:6888";//eas服务的ip端口 redirectTo = "http://"+easHost+"/eassso/login?dataCenter="+URLEncoder.encode(dataCenter,"UTF-8")+"&service="+URLEncoder.encode("http://"+easHost+redirectTo,"UTF-8");
HttpServletResponse resp = (HttpServletResponse) servletResponse;
HttpServletRequest res = (HttpServletRequest) servletRequest;
if (!FilterUtil.isUnFilter(servletRequest)) {
String referer = res.getHeader("referer");
if (referer != null && referer.contains("172.19.106.10")) {
this.setCasServerUrlPrefix("http://172.19.106.10:6888/eassso/");
} else {
this.setCasServerUrlPrefix("http://" + res.getLocalAddr() + ":" + res.getLocalPort() + "/eassso/");
}
constructLoginUrl(servletRequest);
constructServerName(servletRequest);
this.setTicketValidator(getTicketValidator());
return super.preFilter(servletRequest, servletResponse, filterChain);
} else {
filterChain.doFilter(servletRequest, servletResponse);
return false;
}
```
EAS Cloud 对接第三方认证中心后保留自认证二开方案
## 1、反编译类类名:com.kingdee.bos.sso.client.filter.validation.KDPortalTicketValidationFilter 包路径:eas\server\lib\web\porta...
点击下载文档
本文2024-09-16 22:07:05发表“eas cloud知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-eas-46036.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章