On 01/22/2010 10:35 PM, Scott Battaglia wrote:
> Your cleanest way is to probably just add another action that
> accomplishes what you want.
> Cheers,
> Scott
>
> On Fri, Jan 22, 2010 at 6:26 PM, John Thiltges <[email protected]
> <mailto:[email protected]>> wrote:
>
> Hi all,
>
> I'm trying to extend CAS to set a domain-wide cookie on login and
> remove the cookie on logout.
>
Scott,
Thank you for the advice. I think we've got a working solution for
setting a domain-wide cookie in CAS 3.4.2. The details and sources are
below, in hopes it might be useful to others.
Thanks,
John
1) Modify login-webflow.xml to call SendDomainCookieAction, setting
cookie at login
2) Modify cas-servlet.xml to add interceptor
ClearDomainCookieInterceptor to /logout
3) Create configuration file domainCookie.xml to configure
CookieRetrievingCookieGenerator for domain cookie
4) Create Java files for SendDomainCookieAction and
ClearDomainCookieInterceptor
Modified file: login-webflow.xml
===================================
<action-state id="sendTicketGrantingTicket">
<evaluate expression="sendTicketGrantingTicketAction" />
<transition to="sendDomainCookie" />
</action-state>
<action-state id="sendDomainCookie">
<evaluate expression="sendDomainCookieAction" />
<transition on="success" to="serviceCheck" />
</action-state>
===================================
Modified file: cas-servlet.xml
= Add =============================
<bean id="clearDomainCookieInterceptor"
class="edu.unl.is.idm.cas.ClearDomainCookieInterceptor"
p:domainWideCookieGenerator-ref="domainWideCookieGenerator"/>
<bean
id="handlerMappingLogout"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property
name="mappings">
<props>
<prop
key="/logout">
logoutController
</prop>
</props>
</property>
<property
name="interceptors">
<list>
<ref bean="clearDomainCookieInterceptor" />
</list>
</property>
</bean>
= Remove from handlerMappingC =====
<prop
key="/logout">
logoutController
</prop>
===================================
New file: spring-configuration/domainCookie.xml
===================================
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean id="sendDomainCookieAction"
class="edu.unl.is.idm.cas.SendDomainCookieAction"
p:domainWideCookieGenerator-ref="domainWideCookieGenerator"/>
<bean id="domainWideCookieGenerator"
class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
p:cookieSecure="false"
p:cookieMaxAge="-1"
p:cookieName="example_sso"
p:cookieDomain=".example.edu" />
</beans>
===================================
New file: src/.../SendDomainCookieAction.java
===================================
package edu.unl.is.idm.cas;
import javax.validation.constraints.NotNull;
import org.jasig.cas.web.support.CookieRetrievingCookieGenerator;
import org.springframework.webflow.action.AbstractAction;
import org.springframework.webflow.execution.Event;
import org.springframework.webflow.execution.RequestContext;
import org.springframework.web.util.CookieGenerator;
import org.jasig.cas.web.support.WebUtils;
/**
* Action that handles the domain-wide cookie creation.
* This action always returns "success".
*
*/
public final class SendDomainCookieAction extends AbstractAction {
@NotNull
private CookieRetrievingCookieGenerator domainWideCookieGenerator;
protected Event doExecute(final RequestContext context) {
domainWideCookieGenerator.addCookie(WebUtils.getHttpServletResponse(context),
Long.toString(System.currentTimeMillis(), 36));
return success();
}
public void setDomainWideCookieGenerator(final
CookieRetrievingCookieGenerator domainWideCookieGenerator) {
this.domainWideCookieGenerator = domainWideCookieGenerator;
}
}
===================================
New file: src/.../ClearDomainCookieInterceptor.java
===================================
package edu.unl.is.idm.cas;
import javax.validation.constraints.NotNull;
import org.jasig.cas.web.support.CookieRetrievingCookieGenerator;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ClearDomainCookieInterceptor extends
HandlerInterceptorAdapter {
@NotNull
private CookieRetrievingCookieGenerator domainWideCookieGenerator;
public boolean preHandle(
HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception {
domainWideCookieGenerator.removeCookie(response);
return true;
}
public void setDomainWideCookieGenerator(final
CookieRetrievingCookieGenerator domainWideCookieGenerator) {
this.domainWideCookieGenerator = domainWideCookieGenerator;
}
}
===================================
--
You are currently subscribed to [email protected] as:
[email protected]
To unsubscribe, change settings or access archives, see
http://www.ja-sig.org/wiki/display/JSG/cas-user