今天把most-sso-client集成进开发框架,遇到了一些问题,把解决的过程记录一下
most-sso-client是基于CAS Client的二次封装(是另外一个项目组做的,不知道是出于什么目的进行再次封装)
1、jar包冲突
首先把most-sso-client引入开发框架以后,跑起来报ClassNotFoundException。看到是报StringUtils没找到,检查工程路径里,已经有了commons-lang3-3.1.jar,不过包名是org.apache.commons.lang3
想了想这个MOST SSO是好几年前的代码,那个时候应该commons-lang的版本应该还是比较旧的。所以就找到了most-sso-client.jar的原始工程,删除旧的jar包依赖,引入新的jar包依赖,重新编译得到most-sso-client.jar
将新的jar包引入工程之后,问题解决
2、配置文件路径不对
封装后的MOST SSO,依赖一个配置文件,我将它放在classpath下,居然找不到,也是看了下源码,发现路径写死为filepath,不支持classpath,所以顺手把寻找配置文件路径部分的代码也改了下,采用spring风格的file:和classpath:前缀
重新又打了个jar包,问题解决
3、Filter顺序错误
感觉配置都对了,但是SSO就是不生效。只好打了个断点跟进去,发现完全就没走进SSO Filter
想了一下发现,是web.xml配置错误,把Struts2 Filter放到了CAS Filter前面
Struts2 Filter不会继续调用filterChain.doFilter()方法,所以CAS Filter就没机会拦截了
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
try {
prepare.setEncodingAndLocale(request, response);
prepare.createActionContext(request, response);
prepare.assignDispatcherToThread();
if ( excludedPatterns != null && prepare.isUrlExcluded(request, excludedPatterns)) {
chain.doFilter(request, response);
} else {
request = prepare.wrapRequest(request);
ActionMapping mapping = prepare.findActionMapping(request, response, true);
if (mapping == null) {
boolean handled = execute.executeStaticResourceRequest(request, response);
if (!handled) {
chain.doFilter(request, response);
}
} else {
execute.executeAction(request, response, mapping);
}
}
} finally {
prepare.cleanupRequest(request);
}
}
所以需要把CAS Filter配到Struts2 Filer的前面,就没问题了
由于servlet规范的规定,配置Filter的时候,一定要注意顺序的问题
分享到:
相关推荐
一个实现SSO方案的构想SSO单点登陆解决方案
详细描述了SSO的解决方案,让您初步认识到SSO的方案设计
SSO单点登录解决方案,描述典型的SSO方案及原理
一个sso的解决方案
WebLogic平台的Web SSO(SAML)解决方案
spring boot整合spring security 实现SSO单点登陆 完整DEMO. ...2、先后启动SsoServer、sso-resource、sso-client1、sso-client2 3、访问http://sso-taobao:8083/client1/ 或 http://sso-tmall:8084/client2/
tomcat 配置 SSO解决方案,验证通过。
SSO的简单实现SSO的简单实现SSO的简单实现
SSO解决方案--提醒:文档只是作为一个基础的参考,愿意了解的朋友可以随时咨询。 第一节:单点登录简介 第一步:了解单点登录 SSO主要特点是: SSO应用之间使用Web协议(如HTTPS),并且只有一个登录入口. SSO的...
asp.net mvc 单点登录(SSO)源码
sso单点登录sso单点登录sso单点登录sso单点登录
Loong SSO(单点登录)开源代码正式发布 rc1.0 Loong SSO是一款用C 写的 SSO服务端,可以运行在 linux(2.6内核) 和 FreeBSD系统上,使用HTTP协议 进行交互. 这款SSO产品,在运行机制上 吸取了国内门户的 passport一些...
注:图中代码段仅作为思路理解 直接copy当然是不可以的喔">关于SSO的思路 csdn和cnblog中都有许多大牛给出了解释 此图是在学习了 韩星 的 基于 Net的单点登录 SSO 解决方案 基础上做的个人总结(顺序图) 小弟初探 ...
Laravel开发-sso Laravel 4的SSO包。
SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。它包括可以将这次主要的登录映射到其他应用中用于同一个用户的登录的机制。它是目前比较流行的企业业务整合的解决方案之一
.net简单sso登录demo
3) 如果验证通过,则从映射表中取出该用户所有能访问的应用系统,显示在sso登录成功页面。转向登录成功页面之前,将该用户所有能访问应用系统的实际用户名都放到cookie中(从映射表中获得)。也就是说,该用户能...