起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11036|回复: 15

[结贴] 与CAS(单点登录)集成的问题

  [复制链接]

123

主题

245

帖子

888

积分

高级会员

Rank: 4

积分
888
发表于 2016-7-1 17:30:01 | 显示全部楼层 |阅读模式
版本: 其它(帖子中说明) 小版本号:
数据库: Oracle 服务器操作系统: Linux 应用服务器: Tomcat
客户端操作系统: Windows 7 浏览器: Chrome
本帖最后由 wangjb 于 2016-7-1 17:33 编辑

平台版本号:BEX5.3.4需求:我现在在做该版本与CAS(单点登录的集成),以前我与5.2.7版本集成过,现在在与5.3.4集成时遇到一个问题:
我对 /UI2/portal/base/login/login.w  请求地址进行拦截过滤,在过滤器中进行登录获取到登录DSESSIONID,并将其保存到   req.getSession().setAttribute(BSESSIONID, bsessionid);
登录以后然后将  /UI2/portal/base/login/login.w   重定向到   /UI2/portal/pc/index.w页面

我的额问题是:不知道重定向的页面/UI2/portal/pc/index.w  后面还需要跟什么参数,因为这个与5.2.7登录有区别,我在后边加了  sessionid  参数时登录还是有点小问题,但如果刷新该页面就能正常进入门户

具体过滤器代码见附件, NTLoginFilter.rar (2.77 KB, 下载次数: 227)

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36180
发表于 2016-7-1 17:52:27 | 显示全部楼层
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

123

主题

245

帖子

888

积分

高级会员

Rank: 4

积分
888
 楼主| 发表于 2016-7-4 09:44:37 | 显示全部楼层
jishuang 发表于 2016-7-1 17:52
参考http://bbs.wex5.com/forum.php?mod=redirect&goto=findpost&ptid=64607&pid=165198442

jishuang:
参考http://bbs.wex5.com/forum.php?mo ... 7&pid=165198442  这个帖子与CAS集成有问题,我以前做过与C AS的集成的,我对整个CAS的代码都做过修改的,对CAS的原理也很清楚的,就是咱这个平台版本升级太快,现在的5.3.4与5.2.7的UI变化很大,对于现在的5.3.4,我就是不知道在已经获得了sessionID 后,如何跳到门户,就是 /UI2/portal/pc/index.w  页面后面需要跟什么参数?    你只要回答我这个问题就是了
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36180
发表于 2016-7-4 11:01:56 | 显示全部楼层
现在的版本中不能通过bsessionID直接调用到首页,要用户名和密码才可以
http://docs.wex5.com/bex5-ui-question-list-10012/
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

123

主题

245

帖子

888

积分

高级会员

Rank: 4

积分
888
 楼主| 发表于 2016-7-4 15:45:16 | 显示全部楼层
jishuang 发表于 2016-7-4 11:01
现在的版本中不能通过bsessionID直接调用到首页,要用户名和密码才可以
http://docs.wex5.com/bex5-ui-ques ...

通过传递用户名与密码的方式进入门户实在是不安全!
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36180
发表于 2016-7-4 16:30:15 | 显示全部楼层
直接到门户首页目前只能传用户名和密码
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

123

主题

245

帖子

888

积分

高级会员

Rank: 4

积分
888
 楼主| 发表于 2016-7-4 17:44:56 | 显示全部楼层
本帖最后由 wangjb 于 2016-7-4 17:47 编辑
jishuang 发表于 2016-7-4 16:30
直接到门户首页目前只能传用户名和密码

按照你传递用户名与密码的形式我与CAS集成,还是出现问题:
如果我  直接把地址  在浏览器打开就能进入到门户  ,如 http://172.27.65.240/x5/UI2/port ... 9ABBE56E057F20F883E
但我是要与CAS(单点登录)集成,这样的地址我是通过过滤器拦截,然后拼装,通过重定向,重定向的地址也是这个地址,但出现错误

经过分析是这样:直接在浏览器地址栏打开http://172.27.65.240/x5/UI2/port ... 9ABBE56E057F20F883E  ,UI 服务器会执行  /UI2/portal/base/login/login.j  代码,而如果 通过过滤器拦截  /UI2/portal/base/login/login.w 这个地址,然后拼装成http://172.27.65.240/x5/UI2/port ... 9ABBE56E057F20F883E  这个地址  ,进行重定向,结果UI 服务器还是要执行/UI2/portal/base/login/login.w  地址的,而不是/UI2/portal/base/login/login.j  这个地址,于是这个过滤器就进行了死循环,这是为什么???




过滤器代码: NTLoginFilter.rar (2.81 KB, 下载次数: 167)
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36180
发表于 2016-7-4 18:07:45 | 显示全部楼层
2楼发CAS中设置是可以在版本中使用通过的,看看具体什么地方配置的有问题,里面发了新的jar
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

123

主题

245

帖子

888

积分

高级会员

Rank: 4

积分
888
 楼主| 发表于 2016-7-5 10:59:31 | 显示全部楼层
jishuang 发表于 2016-7-4 18:07
2楼发CAS中设置是可以在版本中使用通过的,看看具体什么地方配置的有问题,里面发了新的jar ...

我对你说的二楼的CAS集成能通过表示怀疑,我给你分析一下二楼的CAS集成:
首先看他对过滤器配置

错误1:
<filter>
                   <filter-name>NTLoginFilter</filter-name>
                   <filter-class>com.justep.filter.NTLoginFilter</filter-class>
         <!-- 以下参数表示url映射, 即如果访问的urlparam-name, 将会重定向到param-value指向的页面 -->
                   <init-param>
                            <param-name>/UI/portal/login.w</param-name>
                            <param-value>/portal/index.w</param-value>
                   </init-param>
                   <init-param>
                            <param-name>/UI/portal2/process/portal/login.w</param-name>
                            <param-value>/UI/portal2/process/portal/index.w</param-value>
                   </init-param>
                   <init-param>
                            <param-name>/UI2/portal/pc/index.w</param-name>
                            <param-value>/UI2/portal/pc/index.w</param-value>
                                   </init-param>
                                   <init-param>
                            <param-name>/UI2/portal/mobile/index.w</param-name>
                            <param-value>/UI2/portal/mobile/index.w</param-value>
                                   </init-param>
         </filter>
         <filter-mapping>
                   <filter-name>NTLoginFilter</filter-name>
                   <url-pattern>/*</url-pattern>
         </filter-mapping>  


对过滤的地址的输入与输出是一样的,查看二楼具体过滤器代码,代码如下

  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
    throws IOException, ServletException
  {
    HttpServletRequest req = (HttpServletRequest)request;
    HttpServletResponse res = (HttpServletResponse)response;
    HttpSession session = req.getSession();
    if (session != null) {
      String username = (String)session.getAttribute("edu.yale.its.tp.cas.client.filter.user");
      if (SystemUtils.isNotEmptyString(username))
      {
        String bsessionid = getBSessionID(req, username);
        String url = NetUtils.getRequestPath(req);
        if ((this.urlMapping.containsKey(url)) &&
          (!("true".equals(req.getParameter("_login")))) &&
          (SystemUtils.isEmptyString(req.getParameter("$pageType")))) {
          String targetUrl = req.getContextPath() + ((String)this.urlMapping.get(url));
          if (targetUrl.contains("?"))
            targetUrl = targetUrl + "&bsessionid=" + bsessionid + "&_login=true";
          else {
            targetUrl = targetUrl + "?bsessionid=" + bsessionid + "&_login=true";
          }

          Cookie cookie = new Cookie("bsessionid", bsessionid);

          cookie.setPath("/");
          res.addCookie(cookie);

          res.sendRedirect(targetUrl);
          return;
        }
      }
    }

    chain.doFilter(req, res);
  }


过滤器只是对输入的地址加上了&bsessionid=" + bsessionid + "&_login=true",  然后再进行重定向,这样的话就会造成 死循环的!

错误二:

版本5.3.4 是不能通过传递 bsessionid   参数直接进入到门户的!




jishuang :  
       为了这个CAS集成,我已经发过好几个帖子了,我从5.3.2就问过你了,你说下一个版本会加上,现在已经是5.3.4了,希望你能帮我。
我对CAS研究的比较透,对CAS的代码也做了大量的修改,并且与5.2.7版本集成的也很好,现在就是在与5.3.4版本集成时,不知道如何才能通过过滤器重定向直接进入到门户!
昨天你告诉我的传递用户名与密码的方式,我试了试是行不通了,遇到了死循环,希望你能帮我解决这个问题!
      帮我解决这个问题后,我会把我的与CAS集成的所有的资料发个帖子供大家参考,也会省去你很多时间的!
     谢谢!!










回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36180
发表于 2016-7-5 11:53:51 | 显示全部楼层
上面发的已经有一个客户现在用CAS的方式没问题用的就是3.4版本
现在用上面的方案具体什么问题?

如果一定要打开首页传bsessionId这个,这个可以在内部提交一个需求,具体着急用可以联系起步的商务人员协商



远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2025-6-29 23:17 , Processed in 0.064208 second(s), 27 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表