通过Cookie实现Redmine单点登录

分属于2个不同的系统,它们之间不能共用同一套Session,要实现SSO这就需要使用一些特殊的机制来实现它们之间的互相通信。最简单的方法是使用Cookie来实现。(Redmine中支持LDAP认证,不过需要搭建Ldap服务器,现在没搞明白正在研究,稍后再介绍)

首先要修改一下RedMine中的代码,配置action,通过访问www.example.com/redmine/ssologin的url进行登录验证

修改redmine/config/routes.rb添加下面代码

rails 代码
map.signin 'ssologin', :controller => 'account', :action => 'ssologin'  
 

修改redmine/app/controllers/account_controller.rb添加ssologin方法

def ssologin   
    if cookies[:ssoid] && cookies[:uid] && cookies[:ssoid] == "验证码"  
      user = User.try_to_ssologin(cookies[:uid])   
      successful_authentication(user)   
    else  
      cookies.delete : ssoid   
      cookies.delete : uid   
      flash.now[:error] = "无权访问,请与管理员联系"  #错误信息提示   
      render :template => "account/login"           #跳转到登陆页面   
    end  
  end  
 

修改redmine/app/models/user.rb 添加用户查询方法

def self.try_to_ssologin(login)   
  user = find_by_login(login)   
  user.update_attribute(:last_login_on, Time.now)ifuser && !user.new_record?   
  user   
end  
 


ssh项目里action类内获取用户id和验证码并填入到Cookie中


public String redmineLogin(){   
    Cookie cUid = new Cookie("uid","admin");//假设登录用户是"admin   "
    cUid.setMaxAge(-1);   
    cUid.setPath("/");   
    Cookie cSsoid = new Cookie("ssoid","验证码");   
    cSsoid.setMaxAge(-1);   
    cSsoid.setPath("/");   
    this.getResponse().addCookie(cUid);   
    this.getResponse().addCookie(cSsoid);   
    return SUCCESS;   
}   
 

配置Action

<action name="index" class="user.admin.redmineAction" method="index">  
    <result name="success" type="redirect">http://localhost/redmine/ssologin</result>  
</action>  
 

添加一个jsp测试页面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
<html>  
  <body>  
    <a href="/my/redmine/index">http://localhost/my/redmine/index</a>  
  </body>  
</html>  
 

代码添加完下面就要配置服务器测试使用cookie进行单点登录了。
bitnami-redmine安装完会启动了2个mongrel服务通过apache进行加载均衡,由于不太熟悉Apache,这里使用Nginx进行统一部署。
修改Nginx的nginx.conf添加


server {   
        listen 80;   
        server_name localhost;   
        location ^~ /redmine/ {   
        proxy_pass http://localhost:3001/redmine/;   
        }   
        location / {   
        proxy_pass http://localhost:8080/;   
        }   
    }   
 

访问ht tp://localhost时页面跳转到Tomcat服务器
访问ht tp://localhost/redmine时跳转到Mongrel服务器




点击链接后便可以通过cookie传递用户"admin"跳转到Redmine进行验证了




到此Redmine的单点登录功能就简单实现。用户同步问题可以使用Redmine中的Ldap协议进行同步也可以在单点登录验证时,如果发现无此用户就立即创建一个用户。

 

本文转自http://www.po-soft.com/hi/wlo_o/blog/2043

更多内容请访问OECP社区

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值