搭建单点登录环境

2017-01-05 11:13:00来源:oschina作者:很好亦平凡ms人点击

前言


不了解单点登录的可以看我的另一个文章 “单点登录整合方案”


都是自己的理解,欢迎各位指正。


大概结构如下:


JDK1.7 + CAS SERVER 3.5 + ORACLE + JAVA WEB


1.安装JDK1.7


由于我的cas-tomcat是基于JDK1.7,所以首先必须要有JDK1.7环境


2.生成证书


  1)生成密钥库


    keytool -genkey -alias tomcat -keyalg RSA -keypass 123456 -storepass 123456 -keystore /usr/java/key/server.keystore -validity 3600  


    tomcat 为我本地的域名,这里不能输入IP,所以这里记得在host文件里配置下。


    server.keystore 为生成的密钥。


    这里对应的6个问题:


    1.单点登录服务器的域名


    2.公司名称


    3.单点登录服务名称


    4.剩下的就是所在地信息



  2)导出证书


    keytool -export -trustcacerts -alias tomcat -file /usr/java/key/server.cer -keystore /usr/java/key/server.keystore -storepass 123456


    


    server.cer 为导出的证书


  3)导出证书到jdk(tomcat运行的jvm)


    keytool -import -trustcacerts -alias tomcat -file /usr/java/key/server.cer -keystore /usr/java/jdk1.7.0_75/jre/lib/security/cacerts -storepass 123456


    在做这一步的时候,出现一个问题。当我输入密码123456到jre下的security时,会报错密码不正确,上图:


    


    但是当我将cacerts输出到别的路径时就没问题。上图:


    


    有知道的朋友麻烦告知下。


    最后我试了下changeit这个密码,成功添加到目标路径。上图:


    


    这里跟大家说一下,changeit为jre的默认密码。



3.配置tomcat(cas-tomcat)


  找到conf/server.xml,找到如下代码:


  keystorePass="123456"/>


  修改黄色部分。



4.下载CAS SERVER,我这里是cas-server-3.5.2


解压到cas-tomcat/webapps下。


将cas-server-3.5.2修改名称为cas


4.测试cas


  启动tomcat,进入tomcat/bin,执行startup.bat。


  输入 https://me.com:8443/cas/login,如果提示https连接失败,尝试将证书导入到浏览器中。


CAS默认的登陆验证规则是用户名和密码一致即可。


  



到这里为止,我们已经搭建了一个最近简单的cas应用。


实际项目中,我们的登陆验证不能像上面这么简单,所以往下看。



首先打开cas-tomcat/webapps/cas/WEB-INF/deployerConfigContext.xml


配置如下几个地方:


(1)注释掉


(2)注释掉


然后加上



这里的sql对应的是查询的用户,dataSource在后面配置。





(3)在beans标签内再配置个bean



以上为配置数据源。




配置完,我们再登陆一次,我这边添加了一条用户数据zhangsan/123456,尝试登陆,成功。



下面我们来将单点登陆集成到我们的Java web中。


(1)首先新建一个web工程 Test_Servlet


(2)新建一个Servlet


package com.org.servlet;


import java.io.IOException; import java.security.Principal; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;


/** * 编写测试类 继承Servlet类,重写init()方法 * * @author Administrator * */ public class HelloWorld extends HttpServlet {/****/private static final long serialVersionUID = 1L;public void init() {System.out.println("init......");}


public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//获取单点登录用户信息Principal principal = request.getUserPrincipal();String userName = principal.getName();System.out.println("userName : " + userName);}


}


(3)修改index.jsp页面,添加一个a标签指向Servlet


<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %>


My JSP 'index.jsp' starting page This is my JSP page.
HelloWorld


(4)修改web.xml


<?xml version="1.0" encoding="UTF-8"?> HelloWorldcom.org.servlet.HelloWorld1HelloWorld/HelloWorld/helloServletindex.jsporg.jasig.cas.client.session.SingleSignOutHttpSessionListener


CAS Single Sign Out Filterorg.jasig.cas.client.session.SingleSignOutFilterCAS Single Sign Out Filter/*


CASFilterorg.jasig.cas.client.authentication.AuthenticationFiltercasServerLoginUrlhttps://me.com:8443/cas/loginserverNamehttp://localhost:8180CASFilter/*


CAS Validation Filterorg.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFiltercasServerUrlPrefixhttps://me.com:8443/casserverNamehttp://localhost:8180CAS Validation Filter/*


CAS HttpServletRequest Wrapper Filterorg.jasig.cas.client.util.HttpServletRequestWrapperFilterCAS HttpServletRequest Wrapper Filter/*


CAS Assertion Thread Local Filterorg.jasig.cas.client.util.AssertionThreadLocalFilterCAS Assertion Thread Local Filter/*



ok,到这里为止,我们的Java Web工程的配置已经完成。


接下来我们需要将证书导入到Java Web用到的JDK中。


这里我将server.cer放在了bin的上一级目录中,所以命令如下:


keytool -import -trustcacerts -alias tomcat -file ../server.cer -keystore ../jre/lib/security/cacerts -storepass changeit


如果这里已经存在名称为tomcat的验证,则需要先删除掉,命令如下:


keytool -delete -trustcacerts -alias tomcat -file ../server.cer -keystore ../jre/lib/security/cacerts -storepass changeit


证书导出成功后。我们就可以进行测试了。


输入 http://me.com:8180/Test_Servlet 会跳转到cas登陆界面,然后输入用户密码,登陆成功则会进入index.jsp界面,然后我们点击Hello World标签,跳转到Servlet中,后台会打印当前用户为 'zhangsan'



这里需要注意的是,web.xml配置的路径,一定要使用域名,否则会报错:java.security.cert.CertificateException: No subject alternative names present




参考自:http://www.kafeitu.me/sso/2010/11/05/sso-cas-full-course.html

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台