web-sso 系统集成 单点登录
来源:互联网 发布:淘宝拖鞋女 编辑:程序博客网 时间:2024/05/21 22:23
Web-sso原理网上自己搜,一堆,本文不给予讨论。
本人只给实例,通过实例去真实的感受Web-sso的原理。
不讨论太多的废话,开始web-sso实现。
1. 支持环境 jdk1.7 +tomcat7.0(具体自己网上搜,不会的)
2. 创建3个web工程。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>
- web-sso 系统集成 单点登录
- Web 单点登录SSO
- SSO单点登录系统WEB Service代码
- SSO单点登录系统WEB Service代码
- web sso 单点登录简单实例源码
- sso单点登录1
- sso单点登录2
- sso单点登录3
- SSO(单点登录)
- SSO单点登录
- 单点登录(SSO)
- SSO 单点登录
- SSO单点登录解决方案
- SSO单点登录解决方案
- SSO单点登录解决方案
- SSO单点登录
- SSO单点登录
- SSO单点登录解决方案
- 关于linux发行版i386/i686/x86-64/的区别
- 求一个从左到右从上到下矩阵中,寻找一个给定的数是否存在
- <长文本、二>SAP 通过BAPI创建、修改、读取以及删除
- Apache的commons组件Iterator类封装
- opencv的配置信息暂存
- web-sso 系统集成 单点登录
- js控制iframe的高度/宽度,自适应内容
- Covert VirtualBox vdi or vmdk to KVM qcow
- CSS、jQuery实现放大缩小动画效果
- OCP-1Z0-051-V9.02-112题
- objective-c检测网络状态
- IOS 地图坐标转换相关
- uva 10913 - Walking on a Grid(记忆化)
- vmdk修复(VERR_VD_VMDK_INVALID_HEADER错误)