diff --git a/cas-client-integration-tomcat/pom.xml b/cas-client-integration-tomcat/pom.xml new file mode 100644 index 0000000..76d487d --- /dev/null +++ b/cas-client-integration-tomcat/pom.xml @@ -0,0 +1,35 @@ + + + + cas-client + org.jasig.cas.client + 3.1.12-SNAPSHOT + + 4.0.0 + + org.jasig.cas.client + cas-client-integration-tomcat + jar + JA-SIG CAS Client for Java - Tomcat Integration + + + + org.apache.tomcat + tomcat-catalina + 7.0.0 + jar + compile + + + + org.jasig.cas.client + cas-client-core + ${project.version} + jar + compile + + + + \ No newline at end of file diff --git a/cas-client-integration-tomcat/src/main/java/org/jasig/cas/client/tomcat/CasAuthenticator.java b/cas-client-integration-tomcat/src/main/java/org/jasig/cas/client/tomcat/CasAuthenticator.java new file mode 100644 index 0000000..5f41826 --- /dev/null +++ b/cas-client-integration-tomcat/src/main/java/org/jasig/cas/client/tomcat/CasAuthenticator.java @@ -0,0 +1,67 @@ +package org.jasig.cas.client.tomcat; + +import org.apache.catalina.authenticator.AuthenticatorBase; +import org.apache.catalina.connector.Request; +import org.apache.catalina.deploy.LoginConfig; +import org.jasig.cas.client.util.AbstractCasFilter; +import org.jasig.cas.client.util.CommonUtils; +import org.jasig.cas.client.validation.Assertion; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.security.Principal; + +/** + * @author Scott Battaglia + * @version $Revision$ $Date$ + * @since 3.1.12 + */ +public abstract class CasAuthenticator extends AuthenticatorBase { + + private static final String INFO = "org.jasig.cas.client.tomcat.CasAuthenticator/1.0"; + + private String serverName; + + private String serviceUrl; + + private String casServerLoginUrl; + + private boolean encode; + + private boolean renew; + + protected abstract String getArtifactParameterName(); + + protected abstract String getServiceParameterName(); + + public String getInfo() { + return INFO; + } + + public boolean authenticate(final Request request, final HttpServletResponse httpServletResponse, final LoginConfig loginConfig) throws IOException { + final Assertion assertion = (Assertion) request.getSession(true).getAttribute(AbstractCasFilter.CONST_CAS_ASSERTION); + + if (assertion != null) { + return true; + } + + final String ticket = CommonUtils.safeGetParameter(request, getArtifactParameterName()); + + if (CommonUtils.isBlank(ticket)) { + final String serviceUrl = CommonUtils.constructServiceUrl(request, httpServletResponse, this.serviceUrl, this.serverName, getArtifactParameterName(), this.encode); + final String urlToRedirectTo = CommonUtils.constructRedirectUrl(this.casServerLoginUrl, getServiceParameterName(), serviceUrl, this.renew, false); + + httpServletResponse.sendRedirect(urlToRedirectTo); + return false; + } + + final Principal principal = this.context.getRealm().authenticate(null, ticket); + + + + return false; //To change body of implemented methods use File | Settings | File Templates. + } + + +} diff --git a/cas-client-integration-tomcat/src/main/java/org/jasig/cas/client/tomcat/CasRealm.java b/cas-client-integration-tomcat/src/main/java/org/jasig/cas/client/tomcat/CasRealm.java new file mode 100644 index 0000000..4efc18a --- /dev/null +++ b/cas-client-integration-tomcat/src/main/java/org/jasig/cas/client/tomcat/CasRealm.java @@ -0,0 +1,81 @@ +package org.jasig.cas.client.tomcat; + +import org.apache.catalina.Container; +import org.apache.catalina.Context; +import org.apache.catalina.Realm; +import org.apache.catalina.connector.Request; +import org.apache.catalina.connector.Response; +import org.apache.catalina.deploy.SecurityConstraint; + +import java.beans.PropertyChangeListener; +import java.io.IOException; +import java.security.Principal; +import java.security.cert.X509Certificate; + +/** + * Created by IntelliJ IDEA. + * User: scottbattaglia + * Date: Jul 19, 2010 + * Time: 11:11:28 PM + * To change this template use File | Settings | File Templates. + */ +public class CasRealm implements Realm { + + // <description>/<version> + + private static final String INFO = "org.jasig.cas.client.tomcat.CasRealm/1.0"; + + private Container container; + + public Container getContainer() { + return this.container; + } + + public void setContainer(final Container container) { + this.container = container; + } + + public String getInfo() { + return INFO; + } + + public void addPropertyChangeListener(PropertyChangeListener propertyChangeListener) { + //To change body of implemented methods use File | Settings | File Templates. + } + + public Principal authenticate(String s, String s1) { + return null; //To change body of implemented methods use File | Settings | File Templates. + } + + public Principal authenticate(String s, String s1, String s2, String s3, String s4, String s5, String s6, String s7) { + return null; //To change body of implemented methods use File | Settings | File Templates. + } + + public Principal authenticate(X509Certificate[] x509Certificates) { + return null; //To change body of implemented methods use File | Settings | File Templates. + } + + public void backgroundProcess() { + //To change body of implemented methods use File | Settings | File Templates. + } + + public SecurityConstraint[] findSecurityConstraints(Request request, Context context) { + return new SecurityConstraint[0]; //To change body of implemented methods use File | Settings | File Templates. + } + + public boolean hasResourcePermission(Request request, Response response, SecurityConstraint[] securityConstraints, Context context) throws IOException { + return false; //To change body of implemented methods use File | Settings | File Templates. + } + + public boolean hasRole(Principal principal, String s) { + return false; //To change body of implemented methods use File | Settings | File Templates. + } + + public boolean hasUserDataPermission(Request request, Response response, SecurityConstraint[] securityConstraints) throws IOException { + return false; //To change body of implemented methods use File | Settings | File Templates. + } + + public void removePropertyChangeListener(PropertyChangeListener propertyChangeListener) { + //To change body of implemented methods use File | Settings | File Templates. + } +} diff --git a/pom.xml b/pom.xml index 3c962d3..cfa095a 100644 --- a/pom.xml +++ b/pom.xml @@ -139,6 +139,7 @@ cas-client-integration-jboss cas-client-support-distributed-ehcache cas-client-support-distributed-memcached + cas-client-integration-tomcat