web-sso 系统集成 单点登录

来源:互联网 发布:淘宝拖鞋女 编辑:程序博客网 时间:2024/05/21 22:23

 

Web-sso原理网上自己搜,一堆,本文不给予讨论。

本人只给实例,通过实例去真实的感受Web-sso的原理。

 

不讨论太多的废话,开始web-sso实现。

1.       支持环境 jdk1.7 +tomcat7.0(具体自己网上搜,不会的)

 

2.       创建3web工程。2个业务应用,1个认证应用。

 

1.创建web工程1名称 – SSOAuth(认证应用)

 

2.创建AuthServlet类:

package org.servlet;

 

import java.io.IOException;

import java.util.concurrent.ConcurrentHashMap;

import java.util.concurrent.ConcurrentMap;

 

import javax.servlet.ServletConfig;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.Cookie;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

@WebServlet(urlPatterns="/jsp/login.page",loadOnStartup=1)

publicclass AuthServletextends HttpServlet {

 

    /**

     *Constructoroftheobject.

     */

    public AuthServlet() {

       super();

    }

 

    /**

     *Destructionoftheservlet.<br>

     */

    publicvoid destroy() {

       super.destroy();// Just puts "destroy" string in log

       // Put your code here

    }

 

     

    publicvoid doGet(HttpServletRequest request, HttpServletResponse response)

           throws ServletException, IOException {

       doPost(request,response);

    }

 

    publicvoid doPost(HttpServletRequest request, HttpServletResponse response)

           throws ServletException, IOException {

       DomainName= request.getSession().getServletContext().getInitParameter("DomainName");

       CookName = request.getSession().getServletContext().getInitParameter("CookieName");

           //验证码

       String location =request.getContextPath()+"/login.jsp";

        

       String ccode =(String) request.getSession().getAttribute("ccode");

       String checkcode =request.getParameter("checkcode");

       if(!checkcode.equals(ccode)){

           response.sendRedirect(location);

       }else{

           String username =request.getParameter("username");

           String userpassword =request.getParameter("userpassword");

           String key =accounts.get(username);

           if(key==null){

              response.sendRedirect(location);

           }else{

              if(key.equals(userpassword)){//验证通过

                  String gotoURL = request.getParameter("goto");

                  String sessionId =request.getSession().getId();

                  Cookie  cookie =new Cookie(CookName,sessionId);

//                cookie.setDomain(gotoURL);

                  cookie.setMaxAge(100);

//                cookie.setValue(sessionId);

                  cookie.setPath("/");

                   response.addCookie(cookie);

                

                   if (gotoURL !=null) {

                         response.sendRedirect(gotoURL);

                     }else{

                       response.sendRedirect(location);

                     }

 

              }else{

                  response.sendRedirect(location);

              }

           }

       }

        

    }

 

   

    /**

     *Initializationoftheservlet.<br>

     *

     *@throwsServletExceptionifanerroroccurs

     */

    staticprivate ConcurrentMap<String, String>accounts;

//    static private ConcurrentMap SSOIDs;

    String CookName;

    String DomainName;

 

    @Override

    publicvoid init(ServletConfig config)throws ServletException {

     

     

      

//        SSOIDs = new ConcurrentHashMap<String, String>();

        accounts=new ConcurrentHashMap<String, String>();

        accounts.put("joylife","123456");

        accounts.put("admin","123456");

        accounts.put("json","123456");

    }

 

}

 

3.创建login.jsp

<%@ pagelanguage="java"pageEncoding="UTF-8"%>

<%

    String path = request.getContextPath();

    String url =request.getParameter("goto");

   

%>

 

<!DOCTYPEHTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

    <head>

     

 

       <title>系统登录界面</title>

        

       <scripttype="text/javascript"src="<%=path%>/js/jquery-1.7.1.min.js"></script>

      

       <styletype="text/css">

       body {

    font:normal 11px auto "Trebuchet MS", Verdana, Arial, Helvetica,

       sans-serif;

    color:#4f6b72;

    /*background: #E6EAE9;*/

}

table {

    margin-top:10%;

    margin-left:30%;

    border:1px solid #CCCCFF;

}

 

table td {

    border:0px solid #CCCCFF;

    font:bold 12px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;

    color:#000000;

}

 

table input {

    width:200px;

}

 

.leftTd {

    text-align:right;

    width:35%;

}

.centerTd {

    text-align:center;

    font:bold 18px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;

    color:#000000;

}

.rightTd {

    text-align:left;

    width:65%;

}

#btn_ok{

    width:50px;

     

}

#btn_clear{

    width:50px;

     

}

a{

margin:30px;

}

</style>

 

 

<scripttype="text/javascript">

     

    $(function(){

        $("#btn_reload").bind("click",function(){

              btn_reload();

        });

         $("#btn_clear").bind("click",function(){

              btn_clear();

        });

         $("#btn_ok").bind("click",function(){

              btn_ok();

        });

    });

 functionbtn_ok(){

    var result =validateform();

    if(!result){

       return ;

    }

    $("#form").attr("action","jsp/login.page");

    $("#form").submit();

 }

 function btn_reload(){

   $("#image").removeAttr("src");

   $("#image").attr("src","<%=path%>/image.jsp");

 }

 function btn_clear(){

      $(":input").not("input[type=button]").each(function(){

         $(this).val("");

      });

 }

 function validateform(){

     varresult =true;

      $(":input").not("input[type=button]").each(function(){

        if($(this).val() ==""){

            result=false;

        }

      });

      return result ;

 }

</script>

    </head>

 

    <body>

       <formid="form"action="login.jsp"method="post">

           <table>

              <tbody>

                  <tr>

                     <tdcolspan="99"class="centerTd">

                         用户信息登录

                     </td>

                  </tr>

                  <tr>

                     <tdclass="leftTd">

                         <label>

                            用户名

                         </label>

                     </td>

                     <tdclass="rightTd">

                         <inputtype="text"name="username"/>

                     </td>

                  </tr>

                  <tr>

                     <tdclass="leftTd">

                         <label>

                            密码

                         </label>

                     </td>

                     <tdclass="rightTd">

                         <inputtype="password"name="userpassword"/>

                     </td>

                  </tr>

                  <tr>

                     <tdclass="leftTd">

                         <label>

                            验证码

                         </label>

                     </td>

                     <tdclass="rightTd">

                         <inputtype="text"name="checkcode"/>

                         <imgsrc="<%=path%>/image.jsp"id="image"/>

                     </td>

                  </tr>

                  <tr>

                     <tdclass="leftTd">

                         <inputtype="button"id="btn_ok"value="登录"/>

                     </td>

                     <tdclass="rightTd">

                         <inputtype="button"id="btn_clear"value="重置"/>

                         <ahref ="javascript:void(0);"id="btn_reload">验证码看不清点刷新</a>

                     </td>

                  </tr>

              </tbody>

           </table>

           <inputname="goto"type="hidden"value=<%=url%>/>

       </form>

    </body>

</html>

 

4 .创建 image.jsp

<%@ pagecontentType="image/jpeg"import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*"%>

<%!

Color getRandColor(int fc,int bc){

        Random random = new Random();

        if(fc>255) fc=255;

        if(bc>255) bc=255;

        int r=fc+random.nextInt(bc-fc);

        int g=fc+random.nextInt(bc-fc);

        int b=fc+random.nextInt(bc-fc);

        returnnew Color(r,g,b);

        }

%>

<%

response.setHeader("Pragma","No-cache");

response.setHeader("Cache-Control","no-cache");

response.setDateHeader("Expires", 0);

 

int width=60, height=20;

BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

 

Graphics g = image.getGraphics();

 

Random random = new Random();

 

g.setColor(getRandColor(200,250));

g.fillRect(0, 0, width, height);

 

g.setFont(new Font("Times New Roman",Font.PLAIN,18));

 

g.setColor(getRandColor(160,200));

for (int i=0;i<155;i++)

{

    int x = random.nextInt(width);

    int y = random.nextInt(height);

        int xl = random.nextInt(12);

        int yl = random.nextInt(12);

    g.drawLine(x,y,x+xl,y+yl);

}

 

String sRand="";

for (int i=0;i<4;i++){

    String rand=String.valueOf(random.nextInt(10));

    sRand+=rand;

    g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));

    g.drawString(rand,13*i+6,16);

}

 

session.setAttribute("ccode",sRand);

 

g.dispose();

 

ImageIO.write(image, "JPEG", response.getOutputStream());

out.clear();

out = pageContext.pushBody();

%>

注意Jquery文件自己搜下。

 

5.配置Web.xml 

 

<context-param>

  <param-name>DomainName</param-name>

  <param-value>10.1.4.94(改成自己的实际IP地址,不需要端口)</param-value>

  </context-param>

   <context-param>

  <param-name>CookieName</param-name>

  <param-value>XiaoHaibingDesktopSSOID</param-value>

  </context-param>

 

创建web工程2 - SSOWebDemo1

  1.创建 Index.jsp

 

<%@ pagelanguage="java" pageEncoding="UTF-8"%>

<%

String SSOLoginPage =request.getSession().getServletContext().getInitParameter("SSOLoginPage");

String CookieName =request.getSession().getServletContext().getInitParameter("CookieName");

CookieName =CookieName.toLowerCase().trim();

Cookie[] cookies=   request.getCookies();

Cookie loginCookie =null;

String cookname ="";

if(cookies!=null){

    for(Cookie cookie:cookies){

        cookname =cookie.getName().trim().toLowerCase();

       if(CookieName.equals(cookname)){

           loginCookie =cookie;

           break;

       }

    }

}

if(loginCookie==null){

    String url =request.getRequestURL().toString();

    response.sendRedirect(SSOLoginPage+"?goto="+url);

}

%>

 

<!DOCTYPEHTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

    

    <title>ssowebdemo1</title>

    <metahttp-equiv="pragma"content="no-cache">

    <metahttp-equiv="cache-control"content="no-cache">

    <metahttp-equiv="expires"content="0">   

    <metahttp-equiv="keywords"content="keyword1,keyword2,keyword3">

    <metahttp-equiv="description"content="This is my page">

     

  </head>

 

  <body>

    WELCOME SsoWebDemo1 !<br>

  </body>

</html>

 

2.web.xml配置

<context-param>

       <param-name>CookieName</param-name>

       <param-value>

            XiaohaibingDesktopSSOID

       </param-value>

    </context-param>

    <context-param>

       <param-name>SSOLoginPage</param-name>

       <param-value>

           http://10.1.4.94(换成实际IP:8080/SSOAuth/login.jsp

       </param-value>

    </context-param>

 

工程3- SSOWebDemo2

 

 1.创建 Index.jsp

 

<%@ pagelanguage="java" pageEncoding="UTF-8"%>

<%

String SSOLoginPage =request.getSession().getServletContext().getInitParameter("SSOLoginPage");

String CookieName =request.getSession().getServletContext().getInitParameter("CookieName");

CookieName =CookieName.toLowerCase().trim();

Cookie[] cookies=   request.getCookies();

Cookie loginCookie =null;

String cookname ="";

if(cookies!=null){

    for(Cookie cookie:cookies){

        cookname =cookie.getName().trim().toLowerCase();

       if(CookieName.equals(cookname)){

           loginCookie =cookie;

           break;

       }

    }

}

if(loginCookie==null){

    String url =request.getRequestURL().toString();

    response.sendRedirect(SSOLoginPage+"?goto="+url);

}

%>

 

<!DOCTYPEHTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

    

    <title>ssowebdemo1</title>

    <metahttp-equiv="pragma"content="no-cache">

    <metahttp-equiv="cache-control"content="no-cache">

    <metahttp-equiv="expires"content="0">   

    <metahttp-equiv="keywords"content="keyword1,keyword2,keyword3">

    <metahttp-equiv="description"content="This is my page">

     

  </head>

 

  <body>

    WELCOME SsoWebDemo2 !<br>

  </body>

</html>

 

2.web.xml配置

<context-param>

       <param-name>CookieName</param-name>

       <param-value>

            XiaohaibingDesktopSSOID

       </param-value>

    </context-param>

    <context-param>

       <param-name>SSOLoginPage</param-name>

       <param-value>

           http://10.1.4.94(换成实际IP:8080/SSOAuth/login.jsp

       </param-value>

    </context-param>

 

 

 

原创粉丝点击