<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>lekkimworld.comwas</title>
    <link>http://lekkimworld.com/tags/was/</link>
    <description>IBM Lotus Notes/Domino, Websphere, IBM Connections, mobile, web, JavaScript, Java...</description>
    <language>en</language>
    <copyright>Mikkel Flindt Heisterberg (mh [at] intravision [dot] dk</copyright>
    <pubDate>Sat, 19 May 2012 06:50:25 GMT</pubDate>
    <dc:creator>Mikkel Flindt Heisterberg (mh [at] intravision [dot] dk</dc:creator>
    <dc:date>2012-05-19T06:50:25Z</dc:date>
    <dc:language>en</dc:language>
    <dc:rights>Mikkel Flindt Heisterberg (mh [at] intravision [dot] dk</dc:rights>
    <image>
      <title>lekkimworld.comwas</title>
      <url>http://lekkimworld.com/tags/was/</url>
    </image>
    <item>
      <title>File not found when using IBM Connections Media Gallery</title>
      <link>http://lekkimworld.com/2012/02/21/file_not_found_when_using_ibm_connections_media_gallery.html</link>
      <content:encoded>&lt;p&gt;
At a customer users were reporting that the media gallery in IBM Connections did not work. The error they were seeing was aneror message in the UI telling them that the file they just selected from their file system did not exist. Very strange. After diagnosing the issue it was caused by the media gallery not having been set up correctly as the default file types wasn't imported into the configuration. Why these defaults are not set automatically is the topic for another day. 
&lt;/p&gt;
&lt;p&gt;
There are two templates which determine the file types you can upload
by default. You should also have these in your AppSrv01 profiles, or your
nodes, etc. The step is done by following the instructions in the &lt;a href="http://www-10.lotus.com/ldd/lcwiki.nsf/dx/Importing_the_default_media_gallery_object_types_ic301"&gt;info center&lt;/a&gt;. 

&lt;/p&gt;</content:encoded>
      <category domain="http://lekkimworld.com/tags/connections/">connections</category>
      <category domain="http://lekkimworld.com/tags/ibm_connections/">ibm_connections</category>
      <category domain="http://lekkimworld.com/tags/ihs/">ihs</category>
      <category domain="http://lekkimworld.com/tags/was/">was</category>
      <category domain="http://lekkimworld.com/tags/websphere/">websphere</category>
      <pubDate>Tue, 21 Feb 2012 18:58:08 GMT</pubDate>
      <guid isPermaLink="false">tag:lekkimworld.com,2012-02-21:default/1329850688859</guid>
      <dc:date>2012-02-21T18:58:08Z</dc:date>
    </item>
    <item>
      <title>Disabling HTTPS communication between IHS WAS Plugin and WAS servers</title>
      <link>http://lekkimworld.com/2012/02/10/disabling_https_communication_between_ihs_was_plugin_and_was_servers.html</link>
      <content:encoded>&lt;p&gt;
Many people believe that you have to have multiple servers to run IBM Connections - this simply isn't true! There's no reason why you cannot run everything of the same server which is what we do here at the office. When you do that, if all servers are inside the firewall - or if you simply doesn't care about the security that it provides - you can disable the IHS WAS Plugin from communicating with the WAS server using SSL. A benefit from this is among other things that you do not have to care about certificates between the IHS WAS Plugin and the WAS server which simplifies installation and management. 
&lt;/p&gt;
&lt;p&gt;
Any way... For a while I've doing this configuration change manually directly in plugin-cfg.xml (by commenting the HTTPS transport out) until it bit us the other day. So I finally decided to find a proper, correct, solution. And of course there is a way to do this and it's very well documented in &lt;a href="http://www-01.ibm.com/support/docview.wss?uid=swg21452735"&gt;IBM Technote 1452735&lt;/a&gt;. So if you want to make that change go ahead and do it - I did and it's working flawlessly.
&lt;/p&gt;</content:encoded>
      <category domain="http://lekkimworld.com/tags/connections/">connections</category>
      <category domain="http://lekkimworld.com/tags/ibm_connections/">ibm_connections</category>
      <category domain="http://lekkimworld.com/tags/ihs/">ihs</category>
      <category domain="http://lekkimworld.com/tags/was/">was</category>
      <category domain="http://lekkimworld.com/tags/websphere/">websphere</category>
      <pubDate>Fri, 10 Feb 2012 13:52:50 GMT</pubDate>
      <guid isPermaLink="false">tag:lekkimworld.com,2012-02-10:default/1328881970109</guid>
      <dc:date>2012-02-10T13:52:50Z</dc:date>
    </item>
    <item>
      <title>WAS profile creation on Windows Server 2008 64 bit</title>
      <link>http://lekkimworld.com/2011/12/07/was_profile_creation_on_windows_server_2008_64_bit.html</link>
      <content:encoded>&lt;p&gt;
When installing Connections on Windows 2008 Server 64 bit the profile management tool doesn't work so profile creation is done using manageprofiles.bat/sh. The syntax is hard to remember so here it is for future reference. 
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Deployment manager:&lt;/b&gt;&lt;br/&gt;
c:\ibm\websphere\appserver\bin\manageprofiles.bat -create -templatePath ..\profileTemplates\management -profileName dmgr -profilePath d:\wasprofiles\dmgr -cellName LCCell01 -nodeName dmgrNode -serverType DEPLOYMENT_MANAGER
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Application server:&lt;/b&gt;&lt;br/&gt;
c:\ibm\websphere\appserver\bin\manageprofiles.bat -create -templatePath ..\profileTemplates\default -profileName AppSrv01 -profilePath d:\wasprofiles\appsrv01 -nodeName appNode01
&lt;/p&gt;</content:encoded>
      <category domain="http://lekkimworld.com/tags/connections/">connections</category>
      <category domain="http://lekkimworld.com/tags/was/">was</category>
      <category domain="http://lekkimworld.com/tags/websphere/">websphere</category>
      <pubDate>Wed, 07 Dec 2011 20:54:40 GMT</pubDate>
      <guid isPermaLink="false">tag:lekkimworld.com,2011-12-07:default/1323291280296</guid>
      <dc:date>2011-12-07T20:54:40Z</dc:date>
    </item>
    <item>
      <title>IBM Connections wsadmin cheat sheet</title>
      <link>http://lekkimworld.com/2011/10/05/ibm_connections_wsadmin_cheat_sheet.html</link>
      <content:encoded>&lt;p&gt;
Starting with IBM Connections 3 the Websphere wsadmin command is even more important as the only way to deploy Connections is using Websphere Application Server Network Deployment or ND for short. The wsadmin command is used to check out the Connections configuration files and check them back in after modification. Because some commands require different configuration services to be loaded I have started compiling a cheat-sheet of some of the commands one use all the time. I have created a &lt;a href="http://lekkimworld.com/pages/wsadmin_connections.html"&gt;page for them&lt;/a&gt;. Expect the list to grow over time. 
&lt;/p&gt;
&lt;p&gt;
Of course the Info centers and wikis also list the commands. 
&lt;/p&gt;</content:encoded>
      <category domain="http://lekkimworld.com/tags/connections/">connections</category>
      <category domain="http://lekkimworld.com/tags/ibm_connections/">ibm_connections</category>
      <category domain="http://lekkimworld.com/tags/was/">was</category>
      <category domain="http://lekkimworld.com/tags/websphere/">websphere</category>
      <pubDate>Wed, 05 Oct 2011 19:45:02 GMT</pubDate>
      <guid isPermaLink="false">tag:lekkimworld.com,2011-10-05:default/1317843902500</guid>
      <dc:date>2011-10-05T19:45:02Z</dc:date>
    </item>
    <item>
      <title>Solved my custom TAI issue with WAS 7</title>
      <link>http://lekkimworld.com/2011/09/21/solved_my_custom_tai_issue_with_was_7.html</link>
      <content:encoded>&lt;p&gt;
I've previously blogged about the goodness of &lt;a href="http://lekkimworld.com/tags/tai"&gt;Trust Association Interceptors&lt;/a&gt; in Websphere Application Server (WAS) and how I've used it to &lt;a href="http://lekkimworld.com/2011/06/07/turning_the_login_procedure_for_ibm_connections_on_its_head.html"&gt;turn the login procedure for IBM Connections on its head&lt;/a&gt;. We recently started upgrading the  customer I originally developed this for to IBM Connections 3.0.1 hence they needed an upgrade to WAS 7. After upgrading the WAS servers the custom TAI didn't work anymore. The TAI loaded just fine but it didn't generate the needed LtpaToken2 for the visiting user. I cried out for help in the Connections &lt;a href="http://www-10.lotus.com/ldd/lcforum.nsf/d6091795dfaa5b1185256a7a0048a2d0/a6adad76c679135e852579120066d8cb?OpenDocument"&gt;forum&lt;/a&gt;. I got a few pointers but none of them helped me.
&lt;/p&gt;
&lt;p&gt;
Fortunately I figured it out tonight.
&lt;/p&gt;
&lt;p&gt;
The issue was that my custom TAI created subjects (a subject is the entity that holds the identity of the authenticated user in WAS) in a custom realm that wasn't trusted by WAS. The only trusted realm was the one that WAS created for me when I configured Federated Repositories. The solution was to add the custom realm as trusted under Federated Repositories, configure &amp;lt;my realm&amp;gt; and then go to "Trusted authentication realms - inbound". The entry is at the bottom under "Related Items". Here I simply added my realm as Trusted, restarted WAS and I was golden!! Again this wasn't necessary in WAS 6 and actually the option isn't there at all in ISC.
&lt;/p&gt;
&lt;p&gt;
Now I'm back to thinking that WAS and TAI's are the best thing since sliced bread! :-)
&lt;/p&gt;</content:encoded>
      <category domain="http://lekkimworld.com/tags/connections/">connections</category>
      <category domain="http://lekkimworld.com/tags/ibm_connections/">ibm_connections</category>
      <category domain="http://lekkimworld.com/tags/lotus_connections/">lotus_connections</category>
      <category domain="http://lekkimworld.com/tags/tai/">tai</category>
      <category domain="http://lekkimworld.com/tags/was/">was</category>
      <pubDate>Wed, 21 Sep 2011 19:03:13 GMT</pubDate>
      <guid isPermaLink="false">tag:lekkimworld.com,2011-09-21:default/1316631793875</guid>
      <dc:date>2011-09-21T19:03:13Z</dc:date>
    </item>
    <item>
      <title>Make the Integrated Solutions Console (ISC) accessible on standard ports</title>
      <link>http://lekkimworld.com/2011/09/19/make_the_integrated_solutions_console_isc_accessible_on_standard_ports.html</link>
      <content:encoded>&lt;p&gt;
When you install Websphere Application Server (WAS) either standalone or as a network deployment (ND) you normally install the Integrated Solutions Console (ISC) as well to allow you to configure and manage the server. By default the ISC is available on ports 9060/9443 and it not normally mapped onto an IBM HTTP Server (IHS) for access on ports 80/443. This makes it a real hazzle to access it so I normally change WAS to make ISC available on ports 80/443 on servers where port 80/443 isn't used. Doing so is really easy and only require a few changes. Below I have outlines the required changes.
&lt;/p&gt;
&lt;p&gt;
In the left-hand menu go to "Environment / Virtual hosts" and select "admin_host" in the list. On the right select "Host Aliases", click "New" and add an entry for port 80 and one for port 443. 
&lt;/p&gt;
&lt;p&gt;
Now in the left-hand menu go to "System Administration / Deployment manager" and select "Ports". Now change the port for "WC_adminhost" from 9060 to 80 and "WC_adminhost_secure" from 9443 to 443. 
&lt;/p&gt;
&lt;p&gt;
Now save the configuration and restart the server or Deployment Manager running the ISC. When you access the ISC again it will be on http://hostname/ibm/console instead of http://hostname:9060/ibm/console.
&lt;/p&gt;
&lt;p&gt;
And as &lt;a href="http://www.wissel.net/blog"&gt;Stephan&lt;/a&gt; always says - YMMV...
&lt;/p&gt;</content:encoded>
      <category domain="http://lekkimworld.com/tags/isc/">isc</category>
      <category domain="http://lekkimworld.com/tags/was/">was</category>
      <category domain="http://lekkimworld.com/tags/websphere/">websphere</category>
      <pubDate>Mon, 19 Sep 2011 05:07:29 GMT</pubDate>
      <guid isPermaLink="false">tag:lekkimworld.com,2011-09-19:default/1316408849546</guid>
      <dc:date>2011-09-19T05:07:29Z</dc:date>
    </item>
    <item>
      <title>A TAI code example</title>
      <link>http://lekkimworld.com/2011/06/10/a_tai_code_example.html</link>
      <content:encoded>&lt;p&gt;
To complete &lt;a href="http://lekkimworld.com/tags/tai"&gt;my series posts&lt;/a&gt; on writing Trust Association Interceptors (TAI's) for Websphere Application Server I wanted to show a real-life example. Not a good example necessarily but an example never the less... :-)
&lt;/p&gt;
&lt;p&gt;
The below example is a very simple TAI that simply does the following:
&lt;ol&gt;
&lt;li&gt;The initialize() method reads a cookie name from the configuration done in the Websphere Application Server ISC. It illustrates how you can configure a TAI externally without having to hard code it.&lt;/li&gt;
&lt;li&gt;The isTargetInterceptor() method looks at the request and sees if a cookie with the configured name is available. If yes it continues to process the request and if not it aborts processing (from the TAI point of view).&lt;/li&gt;
&lt;li&gt;The negotiateValidateandEstablishTrust() method does the actual work by simply telling WAS that the username of user is the value from the cookie.&lt;/li&gt;
&lt;/ol&gt;
As you see writing a TAI is very simple but extremely powerful. Imagine what could be done if you did SSO between Websphere Application Server and Lotus Domino.
&lt;/p&gt;
&lt;p&gt;
&lt;pre&gt;
import java.util.Properties;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.ibm.websphere.security.WebTrustAssociationException;
import com.ibm.websphere.security.WebTrustAssociationFailedException;
import com.ibm.wsspi.security.tai.TAIResult;
import com.ibm.wsspi.security.tai.TrustAssociationInterceptor;

public class ExampleTAI implements TrustAssociationInterceptor {
   // declarations
   private String cookie = null;
   
   @Override
   public void cleanup() {
   }

   @Override
   public String getType() {
      return String.format("Example TAI %s", this.getVersion());
   }

   @Override
   public String getVersion() {
      return "1.0";
   }

   @Override
   public int initialize(Properties props) 
      throws WebTrustAssociationFailedException {
      System.out.println("ExampleTAI.initialize()");
      
      // read properties from configuration in WAS
      this.cookie = props.getProperty("cookieName");
      
      // return 0 to indicate success
      return 0;
   }

   @Override
   public boolean isTargetInterceptor(
      HttpServletRequest req) 
      throws WebTrustAssociationException {
      System.out.println("ExampleTAI.isTargetInterceptor()");
      for (Cookie c : req.getCookies()) {
         if (c.getName().equals(this.cookie)) return true;
      }
      return false;
   }

   @Override
   public TAIResult negotiateValidateandEstablishTrust(
      HttpServletRequest req, 
      HttpServletResponse res) 
      throws WebTrustAssociationFailedException {
      System.out.println("ExampleTAI.negotiate...()");
      for (Cookie c : req.getCookies()) {
         if (c.getName().equals(this.cookie)) {
            // send 200 to signal we're okay
            return TAIResult.create(HttpServletResponse.SC_OK, 
                c.getValue());
         }
      }
      
      // not authenticated
      return TAIResult.create(HttpServletResponse.SC_UNAUTHORIZED);
   }

}
&lt;/pre&gt;
&lt;/p&gt;</content:encoded>
      <category domain="http://lekkimworld.com/categories/java/">Java</category>
      <category domain="http://lekkimworld.com/categories/ibm_products/">IBM</category>
      <category domain="http://lekkimworld.com/categories/web/">Web</category>
      <category domain="http://lekkimworld.com/tags/java/">java</category>
      <category domain="http://lekkimworld.com/tags/tai/">tai</category>
      <category domain="http://lekkimworld.com/tags/was/">was</category>
      <category domain="http://lekkimworld.com/tags/websphere/">websphere</category>
      <pubDate>Fri, 10 Jun 2011 12:06:58 GMT</pubDate>
      <guid isPermaLink="false">tag:lekkimworld.com,2011-06-10:default/1307707618593</guid>
      <dc:date>2011-06-10T12:06:58Z</dc:date>
    </item>
    <item>
      <title>Developing TAI's for Websphere Application Server</title>
      <link>http://lekkimworld.com/2011/06/08/developing_tais_for_websphere_application_server.html</link>
      <content:encoded>&lt;p&gt;
Trust Association Interceptors (or TAI's) for Websphere Application Server is quickly becoming my new favorite technology. They just might be best thing since sliced bread and the reason why why you want to embrace Websphere Application Server. And so quickly. 
&lt;/p&gt;
&lt;p&gt;
I have discussed TAI's and why they're important in an &lt;a href="http://lekkimworld.com/2011/06/07/turning_the_login_procedure_for_ibm_connections_on_its_head.html"&gt;earlier blog post&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
One thing to know however is when developing them you need to have the necessary stuff in place. For TAI's these are the JAR required on the class path and they are:
&lt;ul&gt;
&lt;li&gt;&amp;lt;WASHOME&amp;gt;\runtimes\com.ibm.ws.webservices.thinclient_6.1.0.jar&lt;/li&gt;
&lt;li&gt;&amp;lt;WASHOME&amp;gt;\lib\bootstrap.jar&lt;/li&gt;
&lt;li&gt;&amp;lt;WASHOME&amp;gt;\lib\com.ibm.ws.runtime.jar&lt;/li&gt;
&lt;li&gt;&amp;lt;WASHOME&amp;gt;\lib\j2ee.jar&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;
After that it's a matter of creating a new class and implementing the com.ibm.wsspi.security.tai.TrustAssociationInterceptor interface which only contains two methods:
&lt;ul&gt;
&lt;li&gt;public boolean isTargetInterceptor (HttpServletRequest req)&lt;br/&gt;
&lt;i&gt;"The isTargetInterceptor method determines whether the request originated with the proxy server that is associated with the interceptor. The implementation code must examine the incoming request object and determine if the proxy server that forwards the request is a valid proxy server for this interceptor. The result of this method determines whether the interceptor processes the request."&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;public TAIResult negotiateValidateandEstablishTrust (HttpServletRequest req, HttpServletResponse res)&lt;br/&gt;
&lt;i&gt;"The negotiateValidateandEstablishTrust method determines whether to trust the proxy server from which the request originated. The implementation code must authenticate the proxy server. The authentication mechanism is proxy-server specific. For example, in the product implementation for the WebSEAL server, this method retrieves the basic authentication information from the HTTP header and validates the information against the user registry that WebSphere Application Serve uses. If the credentials are not valid, the code creates the WebTrustAssociationException exception, which indicates that the proxy server is not trusted and the request is denied. If the credentials are valid, the code returns a TAIResult result, which indicates the status of the request processing with the client identity (Subject and principal name) to use for authorizing the Web resource."&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;
In short &lt;strong&gt;isTargetInterceptor&lt;/strong&gt; is called to determine if a given request matches a given TAI and if it returns true &lt;strong&gt;negotiateValidateandEstablishTrust&lt;/strong&gt; is called to determine if this TAI could authenticate the user and that the username ("Subject") is. Very easy. 
&lt;/p&gt;
&lt;p&gt;
It's important to note that "authenticate" could mean whatever you decide it means. That is you could actually do some work to authenticate the request but you could just as well simply decide that the user is authenticated and that the username is "John Doe123". Whether the authentication is done based on "real authentication", based on a cookie being set or something else is entirely up to you. That's why it's so powerful.
&lt;/p&gt;
&lt;p&gt;
Once deemed authenticated by negotiateValidateandEstablishTrust a valid LtpaToken/LtpaToken2 is generated and the user is granted access into the Kingdom.
&lt;/p&gt;
&lt;p&gt;
Infocenter: &lt;a href="http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.nd.doc/info/ae/ae/rsec_taisubcreate.html?resultof=%22TrustAssociationInterceptor%22%20%22trustassociationinterceptor%22"http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.nd.doc/info/ae/ae/rsec_taisubcreate.html?resultof=%22TrustAssociationInterceptor%22%20%22trustassociationinterceptor%22"&gt;
Trust association interceptor support for Subject creation&lt;/a&gt;
&lt;/p&gt;</content:encoded>
      <category domain="http://lekkimworld.com/tags/tai/">tai</category>
      <category domain="http://lekkimworld.com/tags/was/">was</category>
      <category domain="http://lekkimworld.com/tags/websphere/">websphere</category>
      <pubDate>Wed, 08 Jun 2011 11:22:25 GMT</pubDate>
      <guid isPermaLink="false">tag:lekkimworld.com,2011-06-08:default/1307532145921</guid>
      <dc:date>2011-06-08T11:22:25Z</dc:date>
    </item>
  </channel>
</rss>


