Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1695661
  • 博文数量: 362
  • 博客积分: 10587
  • 博客等级: 上将
  • 技术积分: 4098
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-10 18:15
文章分类

全部博文(362)

文章存档

2014年(1)

2013年(58)

2011年(115)

2010年(112)

2009年(76)

分类:

2009-10-28 17:59:45

一.josso的配置在上篇文章josso+tomcat里已有说明
二.这里重点把josso与mvnforum集成,实现单点登录与单点注销方法介绍一下:
1.单点登录配置:
功能说明:mvnforum通过josso实现单点登录
流程:
两种情况
流程1.在主网站登录后,跳转到mvnforum论坛,应该显示用户已登录,无需再登录.

实现:该情况下,主网站"论坛"链接是
proxylogin.jsp

是新增页面,作用是当用户在主网站已登录时,进入论坛时,先执行一次登录操作,那样在论坛里就显示已登录的用户信息,"登录"变成"注销"链接,很简单的测试方法,请求该页面后,在mvnform应用下的jsp文件里用request.getRemoteUser()方法可以获得登录的用户名。

总之,在主网站登录后,再进入mvnforum论坛时,实现比较简单,只要在mvnforum论坛里添加proxylogin.jsp代理页面,且对mvnforum配置文件做如下配置的有关修改即可。

流程2.主网站下用户还没登录,主网站里"论坛"链接是

那样用户以游客身份进入mvnforum论坛,论坛里的"登录"链接和登录页面仍然存在,在mvnforum论坛下登录。

实现:在mvnforum论坛下,新增登录页面ssologin.jsp,且改造论坛mvnforum\mvnplugin\mvnforum\user\下的index.jsp和login.jsp文件。将原有的登录内容换成嵌入ssologin.jsp页面.

ssologin.jsp执行流程:
提交到josso的登录action,登录成功后跳转到添加的proxylogin.jsp文件,登录成功后的跳转页面通过参数josso_back_to传递.之所以登录成功后要跳转到proxylogin.jsp页面而不直接跳转到mvnforum的主页面,是由于在web.xml配置的jaas拦截,只有跳转到该页面,在mvnforum里才能获得用户信息,认为用户已登录。---->请求proxylogin.jsp时,首先会被配置的jaas拦截,通过josso验证该用户已登录后,才跳转到proxylogin.jsp页面-->在proxylogin.jsp页面里再做页面跳转,跳转到mvnforum的主页面。

配置:
(1).修改mvnforum的配置文件,mvnforum/WEB-INF/classes/mvnforum.xml文件,将如下配置项设置为true
作用:mvnforum采用realm认证方式
true

(默认为false),
注意下一配置项:
false
必须设置为false.

(2).修改mvnforum配置文件,mvnforum/WEB-INF/web.xml文件,增加如下jaas配置信息:

   
       
       
            protected-resources
           
            /proxylogin.jsp
            HEAD
            GET
            POST
            PUT
            DELETE
       
   
       
            role1
       
       
            NONE
       
   
   
        FORM
       
           
            /tennisweb/ssoredirect.jsp
            /tennisweb/ssoredirect.jsp
       
   

(3).在根目录下新建proxylogin.jsp文件,该文件内容如下:
<%
        String forward="/mvnforum/index";
        if (request.getParameter("josso_back_to")!=null && request.getParameter("josso_back_to").indexOf("login")==-1) {
            forward=request.getParameter("josso_back_to");
        }
       
    //登陆后的跳转页面,默认为mvnforum的首页,可以通过参数josso_back_to修改,如:在主网站登录成功后,请求该proxylogin.jsp页面,不带任何参数,默认跳转到mvnforum主页面,
        response.sendRedirect(forward);
     %> 
功能:修改mvnforum的登录页面,直接请求josso的登录action,即 登录完成后,必须添加该拦截页面,才能s实现在mvnforum应用下获得登录的用户信息,我理解作用是将mvnforum工程加入到统一认证域里,在mvnforum应用下,调用request.getRemoteUser()获得当前登录的用户名。
(4).在mvnforum根目录下,新建文件tennisweb/ssoredirect.jsp文件,该文件内容如下:
<%
    response.sendRedirect(request.getContextPath() + "/josso_login/");
%>

功能说明:请求josso登录action的跳转页面,文件路径在web.xml文件里有配置,将mvnforum应用配置到%CATALINA-HOME%/bin/josso-agent-config.xml里,执行文件里的请求转发,即response.sendRedirect(request.getContextPath() + "/josso_login/");,将自动跳转到josso统一的登录页面。

(5).改造mvnforum的登录页面,新增登录页面:mvnforum\mvnplugin\mvnforum\user\ssologin.jsp,代码如下:

           
           
           
               
                   
               
           

                       

                           

                                用户名
                               
                           

                           

                                密码     
                               
                           

                           

                            
                               
                           

                       

                   

       
(6).修改mvnforum\mvnplugin\mvnforum\user\login.jsp文件,替换原来的登录代码,用
<%@ include file="ssologin.jsp" %>

将新增的登录页嵌入到mvnforum登录页里

(7).修改mvnforum\mvnplugin\mvnforum\user\index.jsp文件,替换原来的登录代码,用
<%@ include file="ssologin.jsp" %>

将新增的登录页嵌入到mvnforum登录页里

(8).通过以上步骤的修改,mvnforum就能实现单点登录了

2.单点退出:

功能:实现mvnforum与主网站统一退出.

实现:

(1).将论坛的原有"注销"请求mvnforum/mvnforum/logout改成
/tennisweb/ssologout.jsp

(2).新增ssologout.jsp页面,代码如下:
<%
    //清除Cookie已有的登录用户信息,注意只能清除name为JOSSO_SESSIONID的cookie,否则,访客统计会不对,估计应该是重复添加了.因为如果清所有cookie信息的话,会触发mvnforum的有关操作,将用添加到访客里了.
      Cookie[] cookies=request.getCookies();
      if (cookies!=null) {
      for (int i=0;i
          if (cookies[i].getName().equals("JOSSO_SESSIONID")) {
              cookies[i].setValue(null);
              cookies[i].setMaxAge(0);
              response.addCookie(cookies[i]);
          }
      }
      }
    //手动退出
      OnlineUserManager onlineUserMana=OnlineUserManager.getInstance();
    onlineUserMana.logout(request,response);
   
    try {
        //转发请求,执行josso退出操作,清除jaas的用户信息,执行操作后的跳转页面是mvnforum的默认页面.
        response.sendRedirect(Constants.SSO_LOGOUT_URL+"?"+Constants.PARAM_JOSSO_BACK_TO+"="+Constants.DEFAULT_BACK_URL);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
   %>
阅读(1504) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~