<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:clearspace="http://www.jivesoftware.com/xmlns/clearspace/rss" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>Jivespace Community Blog</title>
    <link>http://www.jivesoftware.com/jivespace/blogs/jivespace</link>
    <description>Jivespace Developer Community Blog</description>
    <pubDate>Thu, 20 Nov 2008 21:44:04 GMT</pubDate>
    <generator>Clearspace 2.5.5 (http://jivesoftware.com/products/clearspace/)</generator>
    <dc:date>2008-11-20T21:44:04Z</dc:date>
    <item>
      <title>Support Design Introduction</title>
      <link>http://www.jivesoftware.com/jivespace/blogs/jivespace/2008/11/20/support-design-introduction</link>
      <description>&lt;!-- [DocumentBodyStart:4e10ac84-83fd-40a2-b1b9-6cdde9886313] --&gt;&lt;div class='jive-rendered-content'&gt;&lt;h1&gt;Supportal&lt;/h1&gt;&lt;p&gt;This is the first in a series of upcoming blog posts where we will delve into the details behind our Supportal.  As most of our customers are already aware, the Supportal is Jive's Clearspace customization that transforms generic communities into personal communities where Jive collaborates directly with our customers via cases, documents, and projects.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;This first post will provide the high-level overview, overriding design goals, business goals, and additional benefits to the Supportal.  Future posts will delve into the business decision details, and the architecture.&lt;/p&gt;&lt;h1&gt;The Name&lt;/h1&gt;&lt;p&gt;People often ask how the name Supportal came to be.  When it comes to overall creativity, I am horrible.  In this project's infancy, I used Customer Portal, Customer Support Portal, Support Portal, and many other terms as names.   Will French, Jive's Senior Support Engineer, and now the Supportal Development Lead, abbreviated Support Portal, to Supportal (likely making fun of me talking too fast), and the name stuck.  It also gets rid of that stigma around the word "portal" as well!&lt;/p&gt;&lt;h1&gt;Reasons for the Supportal&lt;/h1&gt;&lt;p&gt;The Supportal was created to resolve's Support's own business pains.  Prior to identifying the business pains however, we set 3 main overriding goals for the project:&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Simplicity: The goal of the supportal is to solve business pain.  Too many other support sites are tough to use and hard to navigate.  Creating a case needs to be as &lt;strong&gt;simple and easy as possible&lt;/strong&gt;&lt;strong&gt;.&lt;/strong&gt; We continue this philosophy on upcoming features, ensuring that additional features add benefit without causing pain.&lt;/li&gt;&lt;li&gt;Accessibility: Customers weren't getting the information they needed, and people within Jive were not seeing the information they needed.  The solution needed to include as many people as possible, while still being private so that only Jive and the customer can see the information.&lt;/li&gt;&lt;li&gt;Usability: Jive prides itself on this, and this is something that's always on our list.  Making the Supportal as usable as possible is also a guiding factor we focused on during the first iteration and continue to improve upon.&lt;/li&gt;&lt;/ol&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;With the overriding goals set, we identified the following business goals:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Create a solution where customers can go to create all their cases, regardless of severity&lt;br/&gt;&lt;/li&gt;&lt;li&gt;Replace email with an online system as the mode of communication&lt;br/&gt;&lt;/li&gt;&lt;li&gt;Recreate survey information.  Associate the survey to the case.&lt;br/&gt;&lt;/li&gt;&lt;li&gt;Integrate Discussions (only community) with cases to provide customers with a single location to get their answer.&lt;br/&gt;&lt;/li&gt;&lt;li&gt;Provide customers the ability to create public cases, allowing others (outside Jive support) to read, contribute, and resolve, while ensuring that Jive Support will answer your issue.&lt;br/&gt;&lt;/li&gt;&lt;li&gt;Provide the same functionality (email) for customers who refuse to use the new system.&lt;br/&gt;&lt;/li&gt;&lt;li&gt;Remove manual customer and contract validation process&lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;h1&gt;Solution&lt;/h1&gt;&lt;p&gt;With the business goals identified, we realized that we had to integrate with our online community.  Clearspace provided communities (security for each customer), email notification, reply by email, discussions, and a means to replace email as the primary mode of communication.  80% of the work was done for us.  The missing parts were:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Auto-creation of customer communities via account, customer, and contract information in Salesforce&lt;/li&gt;&lt;li&gt;Validating customer ability to create cases upon user login&lt;br/&gt;&lt;/li&gt;&lt;li&gt;Adding meta data into customer community discussions, allowing them to become cases.&lt;/li&gt;&lt;li&gt;Customizing customer communities to show cases instead of discussions.&lt;/li&gt;&lt;li&gt;Synchronizing the cases (specifically the meta data) with Salesforce.&lt;/li&gt;&lt;li&gt;Paging for Severity 1 cases&lt;/li&gt;&lt;li&gt;Surveys&lt;/li&gt;&lt;li&gt;Creating cases via email&lt;/li&gt;&lt;/ul&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;The following blog posts are going to delve into these sections providing more information behind each business goal, and how we customized Clearspace to solve the goal.&lt;/p&gt;&lt;h1&gt;Additional Benefits&lt;/h1&gt;&lt;p&gt;As with many solutions, we quickly realized that the Supportal can be used for more than just customer cases.  The first additional use case for the Supportal was identified when our professional services team started using Clearspace's project functionality within the Secure Communities.  This was exactly what Clearspace Projects were intended for, and the Supportal solved our PS department's communication requirements perfectily with no additional customizations.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;We also have experienced a slight decrease in overall cases due to the increased visibility of the cases.  Managers will frequently apply a community watch so that they receive emails whenever anyone creates a case in their community.  We have had managers reply to a case telling us to disregard the case due to it being something they need to solve internally.  We have also had managers follow up with their team directly when issues are stagnating, allowing us to resolve issues quicker.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Finally, the public case feature is being used for about 7% of all of our cases.  Not a huge number, but definitely significant, and each additional case that is made public results in additional information in our community for others to see and use.  This stat is without us pushing the feature at all.&lt;/p&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:4e10ac84-83fd-40a2-b1b9-6cdde9886313] --&gt;</description>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">plugin</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">supportal</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">customization</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">developers</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">support</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">community</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">jive_software</category>
      <pubDate>Thu, 20 Nov 2008 21:47:06 GMT</pubDate>
      <author>communities@jivesoftware.com</author>
      <guid>http://www.jivesoftware.com/jivespace/blogs/jivespace/2008/11/20/support-design-introduction</guid>
      <dc:date>2008-11-20T21:47:06Z</dc:date>
      <clearspace:dateToText>1 month, 2 weeks ago</clearspace:dateToText>
      <clearspace:replyCount>5</clearspace:replyCount>
      <wfw:comment>http://www.jivesoftware.com/jivespace/blogs/jivespace/comment/support-design-introduction</wfw:comment>
      <wfw:commentRss>http://www.jivesoftware.com/jivespace/blogs/jivespace/feeds/comments?blogPost=1630</wfw:commentRss>
    </item>
    <item>
      <title>Quick SSO on Clearspace 2.0</title>
      <link>http://www.jivesoftware.com/jivespace/blogs/jivespace/2008/07/01/quick-sso-on-clearspace-20</link>
      <description>&lt;!-- [DocumentBodyStart:bd658d7c-9102-4a64-bfdb-1af3d2de2fb9] --&gt;&lt;div class='jive-rendered-content'&gt;&lt;p&gt;Below is a small filter that I co-authored recently to integrate with Oracle Access Manager (formerly called Oblix). With the release of CS 2.0 we have totally revamped the authentication process and it is now built on spring-security (formerly acegi). Doing this makes it super easy for most of the typical SSO use-cases to be implemented in a reasonable amount of time. &lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Here was the use case:&lt;/p&gt;&lt;p&gt;1. User Makes initiial request and is not authenticated yet.&lt;/p&gt;&lt;p&gt;2. Webgate routes user to the corporate login page&lt;/p&gt;&lt;p&gt;3. User supplies auth credentials&lt;/p&gt;&lt;p&gt;4. Webgate authenticates the user&lt;/p&gt;&lt;p&gt;5. Webgate sets an Authentication Cookie that identifies this user to Webgate&lt;/p&gt;&lt;p&gt;6. Webgate adds custom HTTP Headers to a new request to the originally requested resource, in this case clearspace.&lt;/p&gt;&lt;p&gt;7. Clearspace ACEGI Filter chain executes for /*** path, this is where I inserted the OblixSSOFilter right before the form authentication.&lt;/p&gt;&lt;p&gt;8. The Filter executes, grabs the HTTP Header "jwt-dn" and extracts the users DN (the user name).&lt;/p&gt;&lt;p&gt;9. The Filter retrieves the User and creates an Authentication and allows the rest of the filters to execute.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;The User is now authenticated. The Default authoprovider ultimatly loads the Users permission etc downstream using the default AuthProvider. &lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Here is the code for the filter. The filter is pretty straight forward. It looks at the incoming HttpServletRequest and attempts to retrieve a HTTP Header that was sent along from the webgate authentication form previously visited by the user, as stated above, in this particular scenario I was able to assume authentication would always be done prior to accessing clearspace. &lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;!--[CodeBlockStart:260b97ed-909f-4079-ae65-88006973920e]--&gt;&lt;pre class="jive-pre"&gt;&lt;code class="jive-code jive-java"&gt; &lt;font color="navy"&gt;&lt;b&gt;package&lt;/b&gt;&lt;/font&gt; com.jivesoftware.clearspace.sso.oblix;
&amp;nbsp;
&amp;nbsp;
&lt;font color="navy"&gt;&lt;b&gt;import&lt;/b&gt;&lt;/font&gt; com.jivesoftware.community.aaa.AnonymousAuthentication;
&lt;font color="navy"&gt;&lt;b&gt;import&lt;/b&gt;&lt;/font&gt; com.jivesoftware.community.aaa.JiveUserAuthentication;
&lt;font color="navy"&gt;&lt;b&gt;import&lt;/b&gt;&lt;/font&gt; com.jivesoftware.base.*;
&amp;nbsp;
&amp;nbsp;
&lt;font color="navy"&gt;&lt;b&gt;import&lt;/b&gt;&lt;/font&gt; javax.servlet.*;
&lt;font color="navy"&gt;&lt;b&gt;import&lt;/b&gt;&lt;/font&gt; javax.servlet.http.HttpServletRequest;
&lt;font color="navy"&gt;&lt;b&gt;import&lt;/b&gt;&lt;/font&gt; javax.servlet.ServletResponse;
&lt;font color="navy"&gt;&lt;b&gt;import&lt;/b&gt;&lt;/font&gt; javax.servlet.FilterChain;
&lt;font color="navy"&gt;&lt;b&gt;import&lt;/b&gt;&lt;/font&gt; java.io.IOException;
&amp;nbsp;
&lt;font color="navy"&gt;&lt;b&gt;import&lt;/b&gt;&lt;/font&gt; org.acegisecurity.context.SecurityContextHolder;
&lt;font color="navy"&gt;&lt;b&gt;import&lt;/b&gt;&lt;/font&gt; org.acegisecurity.Authentication;
&lt;font color="navy"&gt;&lt;b&gt;import&lt;/b&gt;&lt;/font&gt; org.apache.commons.lang.StringUtils;
&amp;nbsp;
&lt;font color="darkgreen"&gt;/**
 * Created by IntelliJ IDEA.
 * User: fred
 * Date: Jun 11, 2008
 * Time: 12:36:14 PM
 */&lt;/font&gt;
&lt;font color="navy"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt; &lt;font color="navy"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/font&gt; OblixSSOFilter &lt;font color="navy"&gt;&lt;b&gt;implements&lt;/b&gt;&lt;/font&gt; Filter &lt;font color="navy"&gt;{&lt;/font&gt;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="navy"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/font&gt; &lt;font color="navy"&gt;&lt;b&gt;static&lt;/b&gt;&lt;/font&gt; String OAMHEADER = &lt;font color="red"&gt;"jwt-unique"&lt;/font&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="navy"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/font&gt; &lt;font color="navy"&gt;&lt;b&gt;static&lt;/b&gt;&lt;/font&gt; String HEADER_NAME = &lt;font color="red"&gt;"jwt-dn"&lt;/font&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="navy"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/font&gt; UserManager userManager;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="darkgreen"&gt;//possible to use system properties to enable and change the header, for&lt;/font&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="darkgreen"&gt;//now just keep it simple.&lt;/font&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="navy"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/font&gt; String oamHeaderName = HEADER_NAME;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="navy"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/font&gt; &lt;font color="navy"&gt;&lt;b&gt;boolean&lt;/b&gt;&lt;/font&gt; enabled = &lt;font color="navy"&gt;&lt;b&gt;true&lt;/b&gt;&lt;/font&gt;;
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="navy"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt; OblixSSOFilter()&lt;font color="navy"&gt;{&lt;/font&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="navy"&gt;&lt;b&gt;super&lt;/b&gt;&lt;/font&gt;();
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="navy"&gt;}&lt;/font&gt;
&amp;nbsp;
&amp;nbsp; 
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="navy"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt; &lt;font color="navy"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt; doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) &lt;font color="navy"&gt;&lt;b&gt;throws&lt;/b&gt;&lt;/font&gt; IOException, ServletException &lt;font color="navy"&gt;{&lt;/font&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Authentication authentication;
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="navy"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;(!enabled)&lt;font color="navy"&gt;{&lt;/font&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; filterChain.doFilter(servletRequest,servletResponse);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="navy"&gt;}&lt;/font&gt;&lt;font color="navy"&gt;&lt;b&gt;else&lt;/b&gt;&lt;/font&gt;&lt;font color="navy"&gt;{&lt;/font&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="navy"&gt;&lt;b&gt;try&lt;/b&gt;&lt;/font&gt; &lt;font color="navy"&gt;{&lt;/font&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Log.debug(&lt;font color="red"&gt;"executing oblix filter"&lt;/font&gt;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HttpServletRequest request = (HttpServletRequest)servletRequest;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String oamHeader = request.getHeader(getOamHeaderName());
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="navy"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;(oamHeader != &lt;font color="navy"&gt;&lt;b&gt;null&lt;/b&gt;&lt;/font&gt;)&lt;font color="navy"&gt;{&lt;/font&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Log.debug(&lt;font color="red"&gt;"got OAM header: "&lt;/font&gt; + oamHeader);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String userDN = extractUserDN(oamHeader);
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; User authenticationTarget = &lt;font color="navy"&gt;&lt;b&gt;null&lt;/b&gt;&lt;/font&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="navy"&gt;&lt;b&gt;try&lt;/b&gt;&lt;/font&gt;&lt;font color="navy"&gt;{&lt;/font&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; authenticationTarget = userManager.getUser(StringUtils.chomp(userDN));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="navy"&gt;}&lt;/font&gt;&lt;font color="navy"&gt;&lt;b&gt;catch&lt;/b&gt;&lt;/font&gt;(UserNotFoundException e)&lt;font color="navy"&gt;{&lt;/font&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Log.error(&lt;font color="red"&gt;"no user found with username: "&lt;/font&gt; + userDN);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="navy"&gt;}&lt;/font&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="darkgreen"&gt;//Found an a&lt;/font&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; authentication = &lt;font color="navy"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt; JiveUserAuthentication(authenticationTarget);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; authentication.setAuthenticated(&lt;font color="navy"&gt;&lt;b&gt;true&lt;/b&gt;&lt;/font&gt;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="navy"&gt;}&lt;/font&gt;&lt;font color="navy"&gt;&lt;b&gt;else&lt;/b&gt;&lt;/font&gt;&lt;font color="navy"&gt;{&lt;/font&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Log.debug(&lt;font color="red"&gt;"no OAM Header"&lt;/font&gt;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; authentication = &lt;font color="navy"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt; AnonymousAuthentication();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="navy"&gt;}&lt;/font&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SecurityContextHolder.getContext().setAuthentication(authentication);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="navy"&gt;}&lt;/font&gt;&lt;font color="navy"&gt;&lt;b&gt;catch&lt;/b&gt;&lt;/font&gt; (Exception e) &lt;font color="navy"&gt;{&lt;/font&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Log.error(&lt;font color="red"&gt;"Exception occured while trying to authenticate OAM response: "&lt;/font&gt; + e.getMessage());
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="navy"&gt;}&lt;/font&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; filterChain.doFilter(servletRequest,servletResponse);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="navy"&gt;}&lt;/font&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="navy"&gt;}&lt;/font&gt;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="navy"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/font&gt; String extractUserDN(String header)&lt;font color="navy"&gt;{&lt;/font&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String userName = &lt;font color="navy"&gt;&lt;b&gt;null&lt;/b&gt;&lt;/font&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String[] elements = StringUtils.split(header,&lt;font color="navy"&gt;','&lt;/font&gt;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="navy"&gt;&lt;b&gt;for&lt;/b&gt;&lt;/font&gt;(String element: elements)&lt;font color="navy"&gt;{&lt;/font&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Log.debug(&lt;font color="red"&gt;"processing header: "&lt;/font&gt; + element);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="navy"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;(element.startsWith(OAMHEADER))&lt;font color="navy"&gt;{&lt;/font&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String[] uniqueID = StringUtils.split(element,&lt;font color="navy"&gt;'='&lt;/font&gt;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; userName = uniqueID[1];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="navy"&gt;}&lt;/font&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="navy"&gt;}&lt;/font&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="navy"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt;(userName);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="navy"&gt;}&lt;/font&gt;
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="navy"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt; &lt;font color="navy"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt; destroy()&lt;font color="navy"&gt;{&lt;/font&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="navy"&gt;}&lt;/font&gt;
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="navy"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt; &lt;font color="navy"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt; setUserManager(UserManager userManager) &lt;font color="navy"&gt;{&lt;/font&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.userManager = userManager;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="navy"&gt;}&lt;/font&gt;
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="navy"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt; AuthenticationProvider getAuthenticationProvider() &lt;font color="navy"&gt;{&lt;/font&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="navy"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt; authenticationProvider;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="navy"&gt;}&lt;/font&gt;
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="navy"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt; &lt;font color="navy"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt; setAuthenticationProvider(AuthenticationProvider authenticationProvider) &lt;font color="navy"&gt;{&lt;/font&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.authenticationProvider = authenticationProvider;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="navy"&gt;}&lt;/font&gt;
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="navy"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt; String getOamHeaderName() &lt;font color="navy"&gt;{&lt;/font&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="navy"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt; oamHeaderName;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="navy"&gt;}&lt;/font&gt;
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="navy"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt; &lt;font color="navy"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt; setOamHeaderName(String oamHeaderName) &lt;font color="navy"&gt;{&lt;/font&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.oamHeaderName = oamHeaderName;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="navy"&gt;}&lt;/font&gt;
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="navy"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt; &lt;font color="navy"&gt;&lt;b&gt;boolean&lt;/b&gt;&lt;/font&gt; isEnabled() &lt;font color="navy"&gt;{&lt;/font&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="navy"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt; enabled;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="navy"&gt;}&lt;/font&gt;
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="navy"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt; &lt;font color="navy"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt; setEnabled(&lt;font color="navy"&gt;&lt;b&gt;boolean&lt;/b&gt;&lt;/font&gt; enabled) &lt;font color="navy"&gt;{&lt;/font&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.enabled = enabled;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="navy"&gt;}&lt;/font&gt;
&lt;font color="navy"&gt;}&lt;/font&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;!--[CodeBlockEnd:260b97ed-909f-4079-ae65-88006973920e]--&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;I simply created a jar containing this one class that I deployed to the WEB-INF\lib directory of a expanded clearspace war file. You can use any IDE or VI and Ant to create the jar, nothing special about it or clearspace specific.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;After I had the jar. I needed to tell clearspace about the filter. Since 2.0 there is a back door that can be utilized to override the default implementation of clearspace managers,DAOs and other spring managed beans, this back door is your jiveHome\etc directoy. Within the jiveHome\etc directory you can copy and modify the various spring context files packaged in the clearspace.jar file found in \WEB\lib. This is done by extracting the appropriate spring context file from the clearspace.jar file found in WEB-INF\lib, make your edits to it and copy it into \jiveHome\etc. In my case the authentication filter stack is configured in spring-securityContext.xml so I extracted that and made the changes listed below:&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;!--[CodeBlockStart:5fdf6317-6494-4215-a828-bc859d367e44]--&gt;&lt;pre class="jive-pre"&gt;&lt;code class="jive-code jive-xml"&gt;
&lt;span class="jive-xml-comment"&gt;&amp;lt;!-- NOTICE THE ADDITION OF oblixSS0Filter --&amp;gt;
&lt;span class="jive-xml-tag"&gt;&amp;lt;bean id="filterChainProxy" class="org.acegisecurity.util.FilterChainProxy"&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="jive-xml-tag"&gt;&amp;lt;property name="filterInvocationDefinitionSource"&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="jive-xml-tag"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PATTERN_TYPE_APACHE_ANT
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /upgrade/**=httpSessionContextIntegrationFilter, upgradeAuthenticationFilter, upgradeExceptionTranslationFilter,jiveAuthenticationTranslationFilter
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /post-upgrade/**=httpSessionContextIntegrationFilter, postUpgradeAuthenticationFilter, postUpgradeExceptionTranslationFilter,jiveAuthenticationTranslationFilter
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /admin/**=httpSessionContextIntegrationFilter, adminAuthenticationFilter, adminExceptionTranslationFilter,jiveAuthenticationTranslationFilter
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /rpc/xmlrpc=wsRequireSSLFilter, httpSessionContextIntegrationFilter, basicAuthenticationFilter, wsExceptionTranslator, jiveAuthenticationTranslationFilter, wsAccessTypeCheckFilter
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /rpc/rest/**=wsRequireSSLFilter, httpSessionContextIntegrationFilter, basicAuthenticationFilter, wsExceptionTranslator, jiveAuthenticationTranslationFilter, wsAccessTypeCheckFilter
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /rpc/soap/**=wsRequireSSLFilter, httpSessionContextIntegrationFilter, jiveAuthenticationTranslationFilter 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /**=httpSessionContextIntegrationFilter, oblixSSoFilter formAuthenticationFilter, rememberMeProcessingFilter, feedBasicAuthenticationFilter, jiveAuthenticationTranslationFilter
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="jive-xml-tag"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="jive-xml-tag"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="jive-xml-tag"&gt;&amp;lt;/bean&amp;gt;&lt;/span&gt;

&amp;lt;!-- DECLARE THE NEW FILTER --&amp;gt;&lt;/span&gt;
&lt;span class="jive-xml-tag"&gt;&amp;lt;bean id="oblixSSoFilter" class="com.jivesoftware.clearspace.sso.oblix.OblixSSOFilter"&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="jive-xml-tag"&gt;&amp;lt;property name="userManager" ref="userManager" &amp;gt;&lt;/span&gt;&lt;span class="jive-xml-tag"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="jive-xml-tag"&gt;&amp;lt;/bean&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;!--[CodeBlockEnd:5fdf6317-6494-4215-a828-bc859d367e44]--&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;As you can see the stack is configured to protect various resources within clearspace, you can add to this stack as required for your particular case, in my case it was simply a matter of declaring my filter, this allows spring to handle the creation of the object and changing the filter stack for the root path of the application to ensure the oblixSSOFilter fired off prior to formAuthentication. If the oblix filter is able to vouch for the user making the request (via the headers) the filter sets the Authentication on the SecurityContext and life moves forward with an authenticated user, if not, I allow it to fall to the next filter in the stack and the process repeats, with this new framework in place it makes it easy to support multiple authentication sources while still staying on the peripheral edges of the product which will help when it comes time to upgrade. &lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;After you have made the changes, restart your clearspace instance and you should be up and running with your new filter.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Enjoy!.&amp;nbsp;&amp;nbsp; &lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:bd658d7c-9102-4a64-bfdb-1af3d2de2fb9] --&gt;</description>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">sso</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">2.0</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">spring-security</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">acegi</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">code</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">customization</category>
      <pubDate>Tue, 01 Jul 2008 21:24:46 GMT</pubDate>
      <author>communities@jivesoftware.com</author>
      <guid>http://www.jivesoftware.com/jivespace/blogs/jivespace/2008/07/01/quick-sso-on-clearspace-20</guid>
      <dc:date>2008-07-01T21:24:46Z</dc:date>
      <clearspace:dateToText>6 months, 1 week ago</clearspace:dateToText>
      <clearspace:replyCount>11</clearspace:replyCount>
      <wfw:comment>http://www.jivesoftware.com/jivespace/blogs/jivespace/comment/quick-sso-on-clearspace-20</wfw:comment>
      <wfw:commentRss>http://www.jivesoftware.com/jivespace/blogs/jivespace/feeds/comments?blogPost=1547</wfw:commentRss>
    </item>
    <item>
      <title>Developing Plugins for Clearspace 2.0</title>
      <link>http://www.jivesoftware.com/jivespace/blogs/jivespace/2008/05/30/developing-plugins-for-clearspace-20</link>
      <description>&lt;!-- [DocumentBodyStart:d3de9466-60c5-4796-b422-3b73d0dc118f] --&gt;&lt;div class='jive-rendered-content'&gt;&lt;p&gt;Learn the basics of how to develop a plugin for Clearspace 2.0 from Jive engineer, &lt;a class="jive-link-external-small" href="http://www.jivesoftware.com/community/people/jon.garrison/"&gt;Jon Garrison&lt;/a&gt;. Jon talks about spring, struts, and more in this video.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;object data="http://blip.tv/scripts/flash/blipplayer.swf?autoStart=false&amp;amp;file=http://blip.tv/file/get/Samjive-PluginDevelopmentForClearspace20817.flv&amp;amp;source=" height="294" type="application/x-shockwave-flash" width="400" wmode="transparent"&gt;&lt;param name="movie" value="http://blip.tv/scripts/flash/blipplayer.swf?autoStart=false&amp;amp;file=http://blip.tv/file/get/Samjive-PluginDevelopmentForClearspace20817.flv&amp;amp;source="/&gt;&lt;/object&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;You can also download the &lt;a class="jive-link-external-small" href="http://blip.tv/file/get/Samjive-PluginDevelopmentForClearspace20817.mov"&gt;Quicktime version&lt;/a&gt; (Caution: file is ~140MB), or you can watch a &lt;a class="jive-link-external-small" href="http://blip.tv/file/949844"&gt;larger version online&lt;/a&gt;, which will improve readability of embedded screenshots (&lt;strong&gt;recommended&lt;/strong&gt;).&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;The entire presentation is also attached below as a PDF file.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:d3de9466-60c5-4796-b422-3b73d0dc118f] --&gt;</description>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">customization</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">clearspace</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">video</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">podcast</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">customization</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">plugins</category>
      <pubDate>Fri, 30 May 2008 22:59:05 GMT</pubDate>
      <author>communities@jivesoftware.com</author>
      <guid>http://www.jivesoftware.com/jivespace/blogs/jivespace/2008/05/30/developing-plugins-for-clearspace-20</guid>
      <dc:date>2008-05-30T22:59:05Z</dc:date>
      <clearspace:dateToText>7 months, 1 week ago</clearspace:dateToText>
      <wfw:comment>http://www.jivesoftware.com/jivespace/blogs/jivespace/comment/developing-plugins-for-clearspace-20</wfw:comment>
      <wfw:commentRss>http://www.jivesoftware.com/jivespace/blogs/jivespace/feeds/comments?blogPost=1532</wfw:commentRss>
    </item>
    <item>
      <title>Theming in Clearspace 2.0</title>
      <link>http://www.jivesoftware.com/jivespace/blogs/jivespace/2008/05/12/theming-in-clearspace-20</link>
      <description>&lt;!-- [DocumentBodyStart:3e58a3e4-4594-49df-9edb-2a155077ba30] --&gt;&lt;div class='jive-rendered-content'&gt;&lt;p&gt;As you know, we changed a few things in our underlying architecture for Clearspace 2.0, including some changes in the Freemarker templates as a result of moving from Webwork to Struts along with some other changes. In this video, Matt Walker, Professional Services Engineer at Jive Software, talks about the process of upgrading existing themes along with plenty of best practices to make your themes more easily upgradeable in the future.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Matt also did an earlier screencast as an &lt;a class="jive-link-external-small" href="http://www.jivesoftware.com/community/blogs/podcasts/2008/01/17/introduction-to-skinning-clearspace"&gt;Introduction to Skinning Clearspace&lt;/a&gt;, which you might also want to watch along with this video.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;object data="http://blip.tv/scripts/flash/blipplayer.swf?autoStart=false&amp;amp;file=http://blip.tv/file/get/Samjive-ThemingClearspace178.flv&amp;amp;source=" height="294" type="application/x-shockwave-flash" width="400" wmode="transparent"&gt;&lt;param name="movie" value="http://blip.tv/scripts/flash/blipplayer.swf?autoStart=false&amp;amp;file=http://blip.tv/file/get/Samjive-ThemingClearspace178.flv&amp;amp;source="/&gt;&lt;/object&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;You can also download the &lt;a class="jive-link-external-small" href="http://blip.tv/file/get/Samjive-ThemingClearspace178.mov"&gt;Quicktime version&lt;/a&gt; (Caution: file is ~200MB), or you can &lt;a class="jive-link-external-small" href="http://blip.tv/file/893313"&gt;watch a larger version&lt;/a&gt; online, which will improve readability of embedded screenshots (recommended). &lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;The entire presentation is also attached below as a PDF file.&lt;/p&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:3e58a3e4-4594-49df-9edb-2a155077ba30] --&gt;</description>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">jivespace</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">struts</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">clearspace</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">themes</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">customization</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">jivespace</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">jive_software</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">video</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">podcast</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">struts</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">freemarker</category>
      <pubDate>Mon, 12 May 2008 16:58:01 GMT</pubDate>
      <author>communities@jivesoftware.com</author>
      <guid>http://www.jivesoftware.com/jivespace/blogs/jivespace/2008/05/12/theming-in-clearspace-20</guid>
      <dc:date>2008-05-12T16:58:01Z</dc:date>
      <clearspace:dateToText>8 months, 1 day ago</clearspace:dateToText>
      <clearspace:replyCount>2</clearspace:replyCount>
      <wfw:comment>http://www.jivesoftware.com/jivespace/blogs/jivespace/comment/theming-in-clearspace-20</wfw:comment>
      <wfw:commentRss>http://www.jivesoftware.com/jivespace/blogs/jivespace/feeds/comments?blogPost=1523</wfw:commentRss>
    </item>
    <item>
      <title>Creating Dynamic Template Content in Clearspace</title>
      <link>http://www.jivesoftware.com/jivespace/blogs/jivespace/2008/02/08/creating-dynamic-template-content-in-clearspace</link>
      <description>&lt;!-- [DocumentBodyStart:58b00a23-141a-41ae-a8d7-0c53c63e0add] --&gt;&lt;div class='jive-rendered-content'&gt;&lt;p&gt;Jive's Rick Palmer, Professional Services Engineer, takes about 5 minutes to explain how to insert dynamic content into your Clearspace FreeMarker templates. The slide below provides more details.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;object data="http://blip.tv/scripts/flash/blipplayer.swf?autoStart=false&amp;amp;file=http://blip.tv/file/get/Samjive-CreatingDynamicTemplateContentInClearspace945.flv&amp;amp;source=" height="294" type="application/x-shockwave-flash" width="400" wmode="transparent"&gt;&lt;param name="movie" value="http://blip.tv/scripts/flash/blipplayer.swf?autoStart=false&amp;amp;file=http://blip.tv/file/get/Samjive-CreatingDynamicTemplateContentInClearspace945.flv&amp;amp;source="/&gt;&lt;/object&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Or you can &lt;a class="jive-link-external-small" href="http://blip.tv/file/get/Samjive-CreatingDynamicTemplateContentInClearspace945.mov"&gt;download the Quicktime Movie&lt;/a&gt; (Caution! 122MB)&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.jivesoftware.com/jivespace/servlet/JiveServlet/showImage/38-1385-1223/Picture+1.png"&gt;&lt;img src="http://www.jivesoftware.com/jivespace/servlet/JiveServlet/downloadImage/38-1385-1223/Picture+1.png" width="620"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:58b00a23-141a-41ae-a8d7-0c53c63e0add] --&gt;</description>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">jivespace</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">customization</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">themes</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">template</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">jivespace</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">podcast</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">video</category>
      <pubDate>Fri, 08 Feb 2008 17:51:35 GMT</pubDate>
      <author>communities@jivesoftware.com</author>
      <guid>http://www.jivesoftware.com/jivespace/blogs/jivespace/2008/02/08/creating-dynamic-template-content-in-clearspace</guid>
      <dc:date>2008-02-08T17:51:35Z</dc:date>
      <clearspace:dateToText>11 months, 5 days ago</clearspace:dateToText>
      <wfw:comment>http://www.jivesoftware.com/jivespace/blogs/jivespace/comment/creating-dynamic-template-content-in-clearspace</wfw:comment>
      <wfw:commentRss>http://www.jivesoftware.com/jivespace/blogs/jivespace/feeds/comments?blogPost=1385</wfw:commentRss>
    </item>
    <item>
      <title>Introduction to Skinning Clearspace</title>
      <link>http://www.jivesoftware.com/jivespace/blogs/jivespace/2008/01/17/introduction-to-skinning-clearspace</link>
      <description>&lt;!-- [DocumentBodyStart:636db110-862d-4c99-9120-8f12825f5bc4] --&gt;&lt;div class='jive-rendered-content'&gt;&lt;p&gt;Learn the basics of customizing your Clearspace theme in this introduction to skinning Clearspace with Matt Walker, professional services engineer (and juggler!) at Jive Software.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;object data="http://blip.tv/scripts/flash/blipplayer.swf?autoStart=false&amp;amp;file=http://blip.tv/file/get/Samjive-IntroductionToSkinningClearspace734.flv&amp;amp;source=" height="294" type="application/x-shockwave-flash" width="400" wmode="transparent"&gt;&lt;param name="movie" value="http://blip.tv/scripts/flash/blipplayer.swf?autoStart=false&amp;amp;file=http://blip.tv/file/get/Samjive-IntroductionToSkinningClearspace734.flv&amp;amp;source="/&gt;&lt;/object&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Or you can download the &lt;a class="jive-link-external-small" href="http://blip.tv/file/get/Samjive-IntroductionToSkinningClearspace734.mov"&gt;Quicktime version&lt;/a&gt; (Caution! ~100MB file)&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;You can also learn more about customizing Clearspace by visiting our &lt;a class="jive-link-external-small" href="http://www.jivesoftware.com/community/community/developer/clearspace/documentation"&gt;documentation space&lt;/a&gt;!&lt;/p&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:636db110-862d-4c99-9120-8f12825f5bc4] --&gt;</description>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">podcast</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">clearspace</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">jivespace</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">video</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">podcast</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">themes</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">customization</category>
      <pubDate>Thu, 17 Jan 2008 19:28:35 GMT</pubDate>
      <author>communities@jivesoftware.com</author>
      <guid>http://www.jivesoftware.com/jivespace/blogs/jivespace/2008/01/17/introduction-to-skinning-clearspace</guid>
      <dc:date>2008-01-17T19:28:35Z</dc:date>
      <clearspace:dateToText>11 months, 3 weeks ago</clearspace:dateToText>
      <clearspace:replyCount>1</clearspace:replyCount>
      <wfw:comment>http://www.jivesoftware.com/jivespace/blogs/jivespace/comment/introduction-to-skinning-clearspace</wfw:comment>
      <wfw:commentRss>http://www.jivesoftware.com/jivespace/blogs/jivespace/feeds/comments?blogPost=1365</wfw:commentRss>
    </item>
  </channel>
</rss>

