`

调试MOST SSO中遇到的问题的解决过程

    博客分类:
  • sso
阅读更多
今天把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单点登录解决方案

    SSO单点登录解决方案,描述典型的SSO方案及原理

    一个sso的解决方案

    一个sso的解决方案

    WebLogic平台的Web SSO(SAML)解决方案

    WebLogic平台的Web SSO(SAML)解决方案

    spring boot 实现SSO单点登陆

    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/

    SSO解决方案

    tomcat 配置 SSO解决方案,验证通过。

    SSO的简单实现SSO的简单实现

    SSO的简单实现SSO的简单实现SSO的简单实现

    ( SSO解决方案

    SSO解决方案--提醒:文档只是作为一个基础的参考,愿意了解的朋友可以随时咨询。 第一节:单点登录简介 第一步:了解单点登录 SSO主要特点是: SSO应用之间使用Web协议(如HTTPS),并且只有一个登录入口. SSO的...

    .NET SSO解决方案

    asp.net mvc 单点登录(SSO)源码

    .net的sso单点登录

    sso单点登录sso单点登录sso单点登录sso单点登录

    Loong SSO(单点登录)开源代码正式发布 rc1.0

    Loong SSO(单点登录)开源代码正式发布 rc1.0 Loong SSO是一款用C 写的 SSO服务端,可以运行在 linux(2.6内核) 和 FreeBSD系统上,使用HTTP协议 进行交互. 这款SSO产品,在运行机制上 吸取了国内门户的 passport一些...

    对跨域SSO(单点登录)思路的补充(UML 顺序图)

    注:图中代码段仅作为思路理解 直接copy当然是不可以的喔">关于SSO的思路 csdn和cnblog中都有许多大牛给出了解释 此图是在学习了 韩星 的 基于 Net的单点登录 SSO 解决方案 基础上做的个人总结(顺序图) 小弟初探 ...

    Laravel开发-sso

    Laravel开发-sso Laravel 4的SSO包。

    SSO相关知识.ppt

    SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。它包括可以将这次主要的登录映射到其他应用中用于同一个用户的登录的机制。它是目前比较流行的企业业务整合的解决方案之一

    .net 简单sso登录

    .net简单sso登录demo

    SSO_单点登陆流程_简要

    3) 如果验证通过,则从映射表中取出该用户所有能访问的应用系统,显示在sso登录成功页面。转向登录成功页面之前,将该用户所有能访问应用系统的实际用户名都放到cookie中(从映射表中获得)。也就是说,该用户能...

Global site tag (gtag.js) - Google Analytics