abstractwebapplicationservice.java
来自「CAS在Tomcat中实现单点登录项目,单点登录(Single Sign On 」· Java 代码 · 共 174 行
JAVA
174 行
/* * Copyright 2007 The JA-SIG Collaborative. All rights reserved. See license * distributed with this file and available online at * http://www.uportal.org/license.html */package org.jasig.cas.authentication.principal;import java.io.BufferedReader;import java.io.DataOutputStream;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL;import java.net.URLEncoder;import java.util.Collections;import java.util.HashMap;import java.util.Map;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.jasig.cas.util.DefaultUniqueTicketIdGenerator;import org.jasig.cas.util.SamlUtils;import org.jasig.cas.util.UniqueTicketIdGenerator;/** * Abstract implementation of a WebApplicationService. * * @author Scott Battaglia * @version $Revision: 1.3 $ $Date: 2007/04/19 20:13:01 $ * @since 3.1 * */public abstract class AbstractWebApplicationService implements WebApplicationService { protected static final Log LOG = LogFactory.getLog(SamlService.class); private static final Map<String, Object> EMPTY_MAP = Collections.unmodifiableMap(new HashMap<String, Object>()); private static final UniqueTicketIdGenerator GENERATOR = new DefaultUniqueTicketIdGenerator(); /** The id of the service. */ private final String id; /** The original url provided, used to reconstruct the redirect url. */ private final String originalUrl; private final String artifactId; private Principal principal; private boolean loggedOutAlready = false; protected AbstractWebApplicationService(final String id, final String originalUrl, final String artifactId) { this.id = id; this.originalUrl = originalUrl; this.artifactId = artifactId; } public final String toString() { return this.id; } public final String getId() { return this.id; } public final String getArtifactId() { return this.artifactId; } public final Map<String, Object> getAttributes() { return EMPTY_MAP; } protected static final String cleanupUrl(final String url) { if (url == null) { return null; } final int jsessionPosition = url.indexOf(";jsession"); if (jsessionPosition == -1) { return url; } final int questionMarkPosition = url.indexOf("?"); if (questionMarkPosition < jsessionPosition) { return url.substring(0, url.indexOf(";jsession")); } return url.substring(0, jsessionPosition) + url.substring(questionMarkPosition); } protected final String getOriginalUrl() { return this.originalUrl; } public boolean equals(final Object object) { if (object == null) { return false; } if (object instanceof Service) { final Service service = (Service) object; return getId().equals(service.getId()); } return false; } protected Principal getPrincipal() { return this.principal; } public void setPrincipal(final Principal principal) { this.principal = principal; } public boolean matches(final Service service) { return this.id.equals(service.getId()); } public synchronized boolean logOutOfService(final String sessionIdentifier) { if (this.loggedOutAlready) { return true; } LOG.debug("Sending logout request for: " + getId()); final String logoutRequest = "<samlp:LogoutRequest xmlns:samlp=\"urn:oasis:names:tc:SAML:2.0:protocol\" ID=\"" + GENERATOR.getNewTicketId("LR") + "\" Version=\"2.0\" IssueInstant=\"" + SamlUtils.getCurrentDateAndTime() + "\"><saml:NameID xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\">@NOT_USED@</saml:NameID><samlp:SessionIndex>" + sessionIdentifier + "</samlp:SessionIndex></samlp:LogoutRequest>"; HttpURLConnection connection = null; try { final URL logoutUrl = new URL(getOriginalUrl()); final String output = "logoutRequest=" + URLEncoder.encode(logoutRequest, "UTF-8"); connection = (HttpURLConnection) logoutUrl.openConnection(); connection.setDoInput(true); connection.setDoOutput(true); connection.setRequestProperty("Content-Length", "" + Integer.toString(output.getBytes().length)); connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); final DataOutputStream printout = new DataOutputStream(connection .getOutputStream()); printout.writeBytes(output); printout.flush(); printout.close(); final BufferedReader in = new BufferedReader(new InputStreamReader(connection .getInputStream())); while (in.readLine() != null) { // nothing to do } return true; } catch (final Exception e) { return false; } finally { if (connection != null) { connection.disconnect(); } this.loggedOutAlready = true; } }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?