gatein SVN: r8079 - in epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14: en-US and 8 other directories.
by do-not-reply@jboss.org
Author: smumford
Date: 2011-11-15 23:52:13 -0500 (Tue, 15 Nov 2011)
New Revision: 8079
Removed:
epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR/jcr.xml
Modified:
epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/Book_Info.xml
epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/Revision_History.xml
epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/Foundations.xml
epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR.xml
epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR/jcr/configuration/jdbc-data-container-config.xml
epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR/jcr/jbosscache-configuration-templates.xml
epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR/jcr/protocols/webdav.xml
epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR/jcr/query-handler-config.xml
epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR/jcr/searching/child-node-constraint.xml
epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR/jcr/searching/find-all-nodes.xml
epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR/jcr/searching/fulltext-search-and-settings.xml
epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR/jcr/searching/index-boost-value.xml
epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR/jcr/searching/jcr-query-usecases.xml
epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR/jcr/searching/node-name-constraint.xml
epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR/jcr/searching/not-constraint.xml
epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR/jcr/searching/spell-checker.xml
epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/AuthenticationAndIdentity/SSO.xml
epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/PortletDevelopment/Global_Portlet.xml
epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/publican.cfg
Log:
Edits of eXo JCR section
Modified: epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/Book_Info.xml
===================================================================
--- epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/Book_Info.xml 2011-11-16 02:48:49 UTC (rev 8078)
+++ epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/Book_Info.xml 2011-11-16 04:52:13 UTC (rev 8079)
@@ -9,7 +9,7 @@
<productname>JBoss Enterprise Portal Platform</productname>
<productnumber>5.2</productnumber>
<edition>5.2.0</edition>
- <pubsnumber>4</pubsnumber>
+ <pubsnumber>5</pubsnumber>
<abstract>
<para>
This Reference Guide is a high-level usage document. It deals with more advanced topics than the Installation and User Guides, adding new content or taking concepts discussed in the earlier documents further. It aims to provide supporting documentation for advanced users of the JBoss Enterprise Portal Platform product. Its primary focus is on advanced use of the product and it assumes an intermediate or advanced knowledge of the technology and terms.
Modified: epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/Revision_History.xml
===================================================================
--- epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/Revision_History.xml 2011-11-16 02:48:49 UTC (rev 8078)
+++ epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/Revision_History.xml 2011-11-16 04:52:13 UTC (rev 8079)
@@ -8,6 +8,20 @@
<simpara>
<revhistory>
<revision>
+ <revnumber>5.2.0-5</revnumber>
+ <date>Tue Nov 15 2011</date>
+ <author>
+ <firstname>Scott</firstname>
+ <surname>Mumford</surname>
+ <email></email>
+ </author>
+ <revdescription>
+ <simplelist>
+ <member>Staging for beta release.</member>
+ </simplelist>
+ </revdescription>
+ </revision>
+ <revision>
<revnumber>5.2.0-4</revnumber>
<date>Wed Nov 9 2011</date>
<author>
Modified: epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/Foundations.xml
===================================================================
--- epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/Foundations.xml 2011-11-16 02:48:49 UTC (rev 8078)
+++ epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/Foundations.xml 2011-11-16 04:52:13 UTC (rev 8079)
@@ -4,7 +4,7 @@
%BOOK_ENTITIES;
]>
<chapter id="chap-Reference_Guide_eXo_JCR_1.14-Foundations_">
- <title><remark>Foundations</remark></title>
+ <title>Foundations</title>
<xi:include href="Foundations/Kernel.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="Foundations/Config_Retrieval.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="Foundations/Advanced_Concepts.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
Modified: epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR/jcr/configuration/jdbc-data-container-config.xml
===================================================================
--- epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR/jcr/configuration/jdbc-data-container-config.xml 2011-11-16 02:48:49 UTC (rev 8078)
+++ epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR/jcr/configuration/jdbc-data-container-config.xml 2011-11-16 04:52:13 UTC (rev 8079)
@@ -6,11 +6,11 @@
<section id="sect-Reference_Guide_eXo_JCR_1.14-JDBC_Data_Container_Config">
<title>JDBC Data Container Config</title>
<section id="sect-Reference_Guide_eXo_JCR_1.14-JDBC_Data_Container_Config-Introduction">
- <title><remark>Introduction</remark></title>
- <para>eXo JCR persistent data container can work in two configuration
+ <title>Introduction</title>
+ <para>eXo JCR persistent data container can work in two configuration
modes:
- </para>
- <itemizedlist>
+ </para>
+ <itemizedlist>
<listitem>
<para><phrase>Multi-database</phrase>: One database for each
workspace (used in standalone eXo JCR service mode)</para>
@@ -33,7 +33,6 @@
Author [w/email]: Nicholas Filetto: nicolas.filotto(a)exoplatform.com
License: NA
-->
-<remark>Below list updated as per email from Nicholas Filetto to jbossexoD(a)googlegroups.com on 10/18/2011</remark>
<itemizedlist>
<listitem>
<para>
@@ -142,7 +141,7 @@
The JCR requires at least the <parameter>READ_COMMITED</parameter> isolation level and other RDBMS configurations can cause some side-effects and issues. So, please, make sure proper isolation level is configured on database server side.
</para>
</note>
- <note>
+ <note>
<para>One more mandatory JCR requirement for underlying databases is a
case sensitive collation. Microsoft SQL Server both 2005 and 2008
customers must configure their server with collation corresponding to
@@ -358,7 +357,7 @@
<para>
If a non-ANSI node name is used, you must use a database with MultiLanguage support. Some JDBC drivers need additional parameters for establishing a Unicode friendly connection. For example under mysql it is necessary to add an additional parameter for the JDBC driver at the end of JDBC URL:
</para>
- <para>There are preconfigured configuration files for HSQLDB. Look for
+ <para>There are preconfigured configuration files for HSQLDB. Look for
these files in /conf/portal and /conf/standalone folders of the jar-file
<package>exo.jcr.component.core-XXX.XXX.jar</package> or
source-distribution of eXo JCR implementation.</para>
Modified: epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR/jcr/jbosscache-configuration-templates.xml
===================================================================
--- epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR/jcr/jbosscache-configuration-templates.xml 2011-11-16 02:48:49 UTC (rev 8078)
+++ epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR/jcr/jbosscache-configuration-templates.xml 2011-11-16 04:52:13 UTC (rev 8079)
@@ -11,7 +11,7 @@
Each mentioned component uses instances of the JBoss Cache product for caching in clustered environment. So every element has its own transport and has to be configured correctly. As usual, workspaces have similar configuration differing only in cluster-names (and, possibly, some other parameters). The simplest way to configure them is to define their own configuration files for each component in each workspace:
</para>
-<programlisting language="XML" role="XML"><property name="jbosscache-configuration" value="conf/<remark>standalone</remark>
+<programlisting language="XML" role="XML"><property name="jbosscache-configuration" value="conf/standalone
/test-jbosscache-lock-db1-ws1.xml" /></programlisting>
<para>
But if there are few workspaces, configuring them in such a way can be painful and hard-manageable. eXo JCR offers a template-based configuration for JBoss Cache instances. You can have one template for Lock Manager, one for Indexer and one for data container and use them in all the workspaces, defining the map of substitution parameters in a main configuration file. Just simply define ${jbosscache-<parameter name>} inside xml-template and list correct value in JCR configuration file just below "jbosscache-configuration", as shown:
Modified: epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR/jcr/protocols/webdav.xml
===================================================================
--- epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR/jcr/protocols/webdav.xml 2011-11-16 02:48:49 UTC (rev 8078)
+++ epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR/jcr/protocols/webdav.xml 2011-11-16 04:52:13 UTC (rev 8079)
@@ -4,52 +4,52 @@
%BOOK_ENTITIES;
]>
<section id="sect-Reference_Guide_eXo_JCR_1.14-WebDAV">
- <!-- This document was created with Syntext Serna Free. --> <title>WebDAV</title>
- <section id="sect-Reference_Guide_eXo_JCR_1.14-WebDAV-Introduction">
- <title>Introduction</title>
- <para>
- The <application>WebDAV</application> protocol enables you to use third party tools to communicate with hierarchical content servers via the HTTP protocol. It is possible to add and remove documents or a set of documents from a path on the server.
- </para>
- <para>
- <application>DeltaV</application> is an extension of the WebDav protocol that allows managing document versioning. The <emphasis>Locking</emphasis> feature guarantees protection against multiple access when writing resources. The ordering support allows changing the position of the resource in the list and sort the directory to make the directory tree viewed conveniently. The full-text search makes it easy to find the necessary documents. You can search by using two languages: SQL and XPATH.
- </para>
- <para>
- In the eXo JCR, the WebDAV layer (based on the code taken from the extension modules of the reference implementation) is plugged in on top of our JCR implementation. This makes it possible to browse a workspace using the third party tools regardless of operating system environments. You can use a Java WebDAV client, such as <application>DAVExplorer</application> or <application>Internet Explorer</application> using <menuchoice><guimenu>File</guimenu><guimenuitem>Open as a Web Folder</guimenuitem></menuchoice>.
- </para>
- <para>
- WebDav is an extension of the REST service. To get the WebDav server ready, you must deploy the REST application. Then, you can access any workspaces of your repository by using the following URL:
- </para>
- <para>
- <ulink type="http" url="http://host:port/portal/rest/private/jcr/{RepositoryName}/{WorkspaceName}..." />
- </para>
- <para>
- When accessing the WebDAV server via <ulink type="http" url="http://localhost:8080/rest/jcr/repository/production" />, you can substitute <ulink type="http" url="http://localhost:8080/rest/jcr/repository/production">production</ulink> with <ulink type="http" url="http://localhost:8080/rest/jcr/repository/collaboration">collaboration</ulink>.
- </para>
- <para>
- You will be asked to enter your login credentials. These will then be checked by using the organization service that can be implemented thanks to an InMemory (dummy) module or a DB module or an LDAP one and the JCR user session will be created with the correct JCR Credentials.
- </para>
- <note>
- <title>Note:</title>
- <remark>DOCS NOTE: I have no idea what this means!</remark>
- <para>
- If you try the "in ECM" option, add "@ecm" to the user's password. Alternatively, you may modify jaas.conf by adding the <emphasis role="bold">domain=ecm</emphasis> option as follows:
- </para>
-
+ <!-- This document was created with Syntext Serna Free. --> <title>WebDAV</title>
+ <section id="sect-Reference_Guide_eXo_JCR_1.14-WebDAV-Introduction">
+ <title>Introduction</title>
+ <para>
+ The <application>WebDAV</application> protocol enables you to use third party tools to communicate with hierarchical content servers via the HTTP protocol. It is possible to add and remove documents or a set of documents from a path on the server.
+ </para>
+ <para>
+ <application>DeltaV</application> is an extension of the WebDav protocol that allows managing document versioning. The <emphasis>Locking</emphasis> feature guarantees protection against multiple access when writing resources. The ordering support allows changing the position of the resource in the list and sort the directory to make the directory tree viewed conveniently. The full-text search makes it easy to find the necessary documents. You can search by using two languages: SQL and XPATH.
+ </para>
+ <para>
+ In the eXo JCR, the WebDAV layer (based on the code taken from the extension modules of the reference implementation) is plugged in on top of our JCR implementation. This makes it possible to browse a workspace using the third party tools regardless of operating system environments. You can use a Java WebDAV client, such as <application>DAVExplorer</application> or <application>Internet Explorer</application> using <menuchoice><guimenu>File</guimenu><guimenuitem>Open as a Web Folder</guimenuitem></menuchoice>.
+ </para>
+ <para>
+ WebDav is an extension of the REST service. To get the WebDav server ready, you must deploy the REST application. Then, you can access any workspaces of your repository by using the following URL:
+ </para>
+ <para>
+ <ulink type="http" url="http://host:port/portal/rest/private/jcr/{RepositoryName}/{WorkspaceName}..." />
+ </para>
+ <para>
+ When accessing the WebDAV server via <ulink type="http" url="http://localhost:8080/rest/jcr/repository/production" />, you can substitute <ulink type="http" url="http://localhost:8080/rest/jcr/repository/production">production</ulink> with <ulink type="http" url="http://localhost:8080/rest/jcr/repository/collaboration">collaboration</ulink>.
+ </para>
+ <para>
+ You will be asked to enter your login credentials. These will then be checked by using the organization service that can be implemented thanks to an InMemory (dummy) module or a DB module or an LDAP one and the JCR user session will be created with the correct JCR Credentials.
+ </para>
+ <note>
+ <title>Note:</title>
+ <!-- <remark>DOCS NOTE: I have no idea what this means!</remark>-->
+ <para>
+ If you try the "in ECM" option, add "@ecm" to the user's password. Alternatively, you may modify jaas.conf by adding the <emphasis role="bold">domain=ecm</emphasis> option as follows:
+ </para>
+
<programlisting>exo-domain {
org.exoplatform.services.security.jaas.BasicLoginModule required domain=ecm;
};</programlisting>
- </note>
+ </note>
- </section>
-
- <section id="sect-Reference_Guide_eXo_JCR_1.14-WebDAV-WebDAV_Configuration">
- <title>WebDAV Configuration</title>
- <para>
- The WebDAV configuration is defined in the <remark><filename>DOC NOTE: where/is/this/file.xml</filename></remark>
- file:
- </para>
-
+ </section>
+
+ <section id="sect-Reference_Guide_eXo_JCR_1.14-WebDAV-WebDAV_Configuration">
+ <title>WebDAV Configuration</title>
+ <para>
+ The WebDAV configuration file: <!--is defined in the <remark><filename>DOC NOTE: where/is/this/file.xml</filename></remark>-->
+
+ </para>
+
<programlisting language="XML" role="XML"><component>
<key>org.exoplatform.services.webdav.WebDavServiceImpl</key>
<type>org.exoplatform.services.webdav.WebDavServiceImpl</type>
@@ -133,354 +133,354 @@
</init-params
</component></programlisting>
- </section>
-
- <section id="sect-Reference_Guide_eXo_JCR_1.14-WebDAV-Corresponding_WebDav_and_JCR_actions">
- <title>Corresponding WebDav and JCR actions</title>
- <table>
- <title></title>
- <tgroup cols="2">
- <thead>
- <row>
- <entry>
- WebDav
- </entry>
- <entry>
- JCR
- </entry>
+ </section>
+
+ <section id="sect-Reference_Guide_eXo_JCR_1.14-WebDAV-Corresponding_WebDav_and_JCR_actions">
+ <title>Corresponding WebDav and JCR actions</title>
+ <table>
+ <title></title>
+ <tgroup cols="2">
+ <thead>
+ <row>
+ <entry>
+ WebDav
+ </entry>
+ <entry>
+ JCR
+ </entry>
- </row>
+ </row>
- </thead>
- <tbody>
- <row>
- <entry>
- COPY
- </entry>
- <entry>
- Workspace.copy(...)
- </entry>
+ </thead>
+ <tbody>
+ <row>
+ <entry>
+ COPY
+ </entry>
+ <entry>
+ Workspace.copy(...)
+ </entry>
- </row>
- <row>
- <entry>
- DELETE
- </entry>
- <entry>
- Node.remove()
- </entry>
+ </row>
+ <row>
+ <entry>
+ DELETE
+ </entry>
+ <entry>
+ Node.remove()
+ </entry>
- </row>
- <row>
- <entry>
- GET
- </entry>
- <entry>
- Node.getProperty(...); Property.getValue()
- </entry>
+ </row>
+ <row>
+ <entry>
+ GET
+ </entry>
+ <entry>
+ Node.getProperty(...); Property.getValue()
+ </entry>
- </row>
- <row>
- <entry>
- HEAD
- </entry>
- <entry>
- Node.getProperty(...); Property.getLength()
- </entry>
+ </row>
+ <row>
+ <entry>
+ HEAD
+ </entry>
+ <entry>
+ Node.getProperty(...); Property.getLength()
+ </entry>
- </row>
- <row>
- <entry>
- MKCOL
- </entry>
- <entry>
- Node.addNode(...)
- </entry>
+ </row>
+ <row>
+ <entry>
+ MKCOL
+ </entry>
+ <entry>
+ Node.addNode(...)
+ </entry>
- </row>
- <row>
- <entry>
- MOVE
- </entry>
- <entry>
- Session.move(...) or Workspace.move(...)
- </entry>
+ </row>
+ <row>
+ <entry>
+ MOVE
+ </entry>
+ <entry>
+ Session.move(...) or Workspace.move(...)
+ </entry>
- </row>
- <row>
- <entry>
- PROPFIND
- </entry>
- <entry>
- Session.getNode(...); Node.getNode(...); Node.getNodes(...); Node.getProperties()
- </entry>
+ </row>
+ <row>
+ <entry>
+ PROPFIND
+ </entry>
+ <entry>
+ Session.getNode(...); Node.getNode(...); Node.getNodes(...); Node.getProperties()
+ </entry>
- </row>
- <row>
- <entry>
- PROPPATCH
- </entry>
- <entry>
- Node.setProperty(...); Node.getProperty(...).remove()
- </entry>
+ </row>
+ <row>
+ <entry>
+ PROPPATCH
+ </entry>
+ <entry>
+ Node.setProperty(...); Node.getProperty(...).remove()
+ </entry>
- </row>
- <row>
- <entry>
- PUT
- </entry>
- <entry>
- Node.addNode("node","nt:file"); Node.setProperty("jcr:data", "data")
- </entry>
+ </row>
+ <row>
+ <entry>
+ PUT
+ </entry>
+ <entry>
+ Node.addNode("node","nt:file"); Node.setProperty("jcr:data", "data")
+ </entry>
- </row>
- <row>
- <entry>
- CHECKIN
- </entry>
- <entry>
- Node.checkin()
- </entry>
+ </row>
+ <row>
+ <entry>
+ CHECKIN
+ </entry>
+ <entry>
+ Node.checkin()
+ </entry>
- </row>
- <row>
- <entry>
- CHECKOUT
- </entry>
- <entry>
- Node.checkout()
- </entry>
+ </row>
+ <row>
+ <entry>
+ CHECKOUT
+ </entry>
+ <entry>
+ Node.checkout()
+ </entry>
- </row>
- <row>
- <entry>
- REPORT
- </entry>
- <entry>
- Node.getVersionHistory(); VersionHistory.getAllVersions(); Version.getProperties()
- </entry>
+ </row>
+ <row>
+ <entry>
+ REPORT
+ </entry>
+ <entry>
+ Node.getVersionHistory(); VersionHistory.getAllVersions(); Version.getProperties()
+ </entry>
- </row>
- <row>
- <entry>
- RESTORE
- </entry>
- <entry>
- Node.restore(...)
- </entry>
+ </row>
+ <row>
+ <entry>
+ RESTORE
+ </entry>
+ <entry>
+ Node.restore(...)
+ </entry>
- </row>
- <row>
- <entry>
- UNCHECKOUT
- </entry>
- <entry>
- Node.restore(...)
- </entry>
+ </row>
+ <row>
+ <entry>
+ UNCHECKOUT
+ </entry>
+ <entry>
+ Node.restore(...)
+ </entry>
- </row>
- <row>
- <entry>
- VERSION-CONTROL
- </entry>
- <entry>
- Node.addMixin("mix:versionable")
- </entry>
+ </row>
+ <row>
+ <entry>
+ VERSION-CONTROL
+ </entry>
+ <entry>
+ Node.addMixin("mix:versionable")
+ </entry>
- </row>
- <row>
- <entry>
- LOCK
- </entry>
- <entry>
- Node.lock(...)
- </entry>
+ </row>
+ <row>
+ <entry>
+ LOCK
+ </entry>
+ <entry>
+ Node.lock(...)
+ </entry>
- </row>
- <row>
- <entry>
- UNLOCK
- </entry>
- <entry>
- Node.unlock()
- </entry>
+ </row>
+ <row>
+ <entry>
+ UNLOCK
+ </entry>
+ <entry>
+ Node.unlock()
+ </entry>
- </row>
- <row>
- <entry>
- ORDERPATCH
- </entry>
- <entry>
- Node.orderBefore(...)
- </entry>
+ </row>
+ <row>
+ <entry>
+ ORDERPATCH
+ </entry>
+ <entry>
+ Node.orderBefore(...)
+ </entry>
- </row>
- <row>
- <entry>
- SEARCH
- </entry>
- <entry>
- Workspace.getQueryManager(); QueryManager.createQuery(); Query.execute()
- </entry>
+ </row>
+ <row>
+ <entry>
+ SEARCH
+ </entry>
+ <entry>
+ Workspace.getQueryManager(); QueryManager.createQuery(); Query.execute()
+ </entry>
- </row>
+ </row>
- </tbody>
+ </tbody>
- </tgroup>
+ </tgroup>
- </table>
+ </table>
- </section>
-
- <section id="sect-Reference_Guide_eXo_JCR_1.14-WebDAV-WebDAV_Considerations">
- <title>WebDAV Considerations</title>
- <para>
- There are some restrictions for WebDAV in different operating systems.
- </para>
- <formalpara id="form-Reference_Guide_eXo_JCR_1.14-WebDAV_Considerations-Windows_7">
- <title>Windows 7</title>
- <para>
- When attemping to set up a web folder through <guilabel>Add a Network Location</guilabel> or <guilabel>Map a Network Drive</guilabel> through <guilabel>My Computer</guilabel>, an error message stating <guilabel>The folder you entered does not appear to be valid. Please choose another</guilabel> or <guilabel>Windows cannot access … Check the spelling of the name. Otherwise, there might be …</guilabel> may be encountered. These errors may appear when you are using SSL or non-SSL.
- </para>
+ </section>
+
+ <section id="sect-Reference_Guide_eXo_JCR_1.14-WebDAV-WebDAV_Considerations">
+ <title>WebDAV Considerations</title>
+ <para>
+ There are some restrictions for WebDAV in different operating systems.
+ </para>
+ <formalpara id="form-Reference_Guide_eXo_JCR_1.14-WebDAV_Considerations-Windows_7">
+ <title>Windows 7</title>
+ <para>
+ When attemping to set up a web folder through <guilabel>Add a Network Location</guilabel> or <guilabel>Map a Network Drive</guilabel> through <guilabel>My Computer</guilabel>, an error message stating <guilabel>The folder you entered does not appear to be valid. Please choose another</guilabel> or <guilabel>Windows cannot access … Check the spelling of the name. Otherwise, there might be …</guilabel> may be encountered. These errors may appear when you are using SSL or non-SSL.
+ </para>
- </formalpara>
- <para>
- To fix this, do as follows:
- </para>
- <orderedlist>
- <listitem>
- <para>
- Go to Windows Registry Editor.
- </para>
+ </formalpara>
+ <para>
+ To fix this, do as follows:
+ </para>
+ <orderedlist>
+ <listitem>
+ <para>
+ Go to Windows Registry Editor.
+ </para>
- </listitem>
- <listitem>
- <para>
- Find a key: \HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlset\services\WebClient\Parameters\BasicAuthLevel .
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ Find a key: \HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlset\services\WebClient\Parameters\BasicAuthLevel .
+ </para>
- </listitem>
- <listitem>
- <para>
- Change the value to 2.
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ Change the value to 2.
+ </para>
- </listitem>
+ </listitem>
- </orderedlist>
- <formalpara id="form-Reference_Guide_eXo_JCR_1.14-WebDAV_Considerations-Microsoft_Office_2010">
- <title>Microsoft Office 2010</title>
- <para>
- If you have:
- </para>
+ </orderedlist>
+ <formalpara id="form-Reference_Guide_eXo_JCR_1.14-WebDAV_Considerations-Microsoft_Office_2010">
+ <title>Microsoft Office 2010</title>
+ <para>
+ If you have:
+ </para>
- </formalpara>
- <itemizedlist>
- <listitem>
- <para>
- Microsoft Office 2007/2010 applications installed on a client computer AND...
- </para>
+ </formalpara>
+ <itemizedlist>
+ <listitem>
+ <para>
+ Microsoft Office 2007/2010 applications installed on a client computer AND...
+ </para>
- </listitem>
- <listitem>
- <para>
- The client computer is connected to a web server configured for Basic authentication VIA...
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ The client computer is connected to a web server configured for Basic authentication VIA...
+ </para>
- </listitem>
- <listitem>
- <para>
- A connection that does not use Secure Sockets Layer (SSL) AND...
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ A connection that does not use Secure Sockets Layer (SSL) AND...
+ </para>
- </listitem>
- <listitem>
- <para>
- You try to access an Office file that is stored on the remote server...
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ You try to access an Office file that is stored on the remote server...
+ </para>
- </listitem>
- <listitem>
- <para>
- You might experience the following symptoms when you try to open or to download the file:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- The Office file does not open or download.
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ You might experience the following symptoms when you try to open or to download the file:
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ The Office file does not open or download.
+ </para>
- </listitem>
- <listitem>
- <para>
- You do not receive a Basic authentication password prompt when you try to open or to download the file.
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ You do not receive a Basic authentication password prompt when you try to open or to download the file.
+ </para>
- </listitem>
- <listitem>
- <para>
- You do not receive an error message when you try to open the file. The associated Office application starts. However, the selected file does not open.
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ You do not receive an error message when you try to open the file. The associated Office application starts. However, the selected file does not open.
+ </para>
- </listitem>
+ </listitem>
- </itemizedlist>
+ </itemizedlist>
- </listitem>
+ </listitem>
- </itemizedlist>
- <para>
- These outcomes can be circumvented by enabling Basic authentication on the client machine.
- </para>
- <para>
- To enable Basic authentication on the client computer, follow these steps:
- </para>
- <orderedlist>
- <listitem>
- <para>
- Click Start, type <literal>regedit</literal> in the Start Search box, and then press Enter.
- </para>
+ </itemizedlist>
+ <para>
+ These outcomes can be circumvented by enabling Basic authentication on the client machine.
+ </para>
+ <para>
+ To enable Basic authentication on the client computer, follow these steps:
+ </para>
+ <orderedlist>
+ <listitem>
+ <para>
+ Click Start, type <literal>regedit</literal> in the Start Search box, and then press Enter.
+ </para>
- </listitem>
- <listitem>
- <para>
- Locate and then click the following registry subkey:
- </para>
- <para>
- <envar>HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Common\Internet</envar>
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ Locate and then click the following registry subkey:
+ </para>
+ <para>
+ <envar>HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Common\Internet</envar>
+ </para>
- </listitem>
- <listitem>
- <para>
- On the <guilabel>Edit</guilabel> menu, point to <guilabel>New</guilabel>, and then click <guilabel>DWORD Value</guilabel>.
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ On the <guilabel>Edit</guilabel> menu, point to <guilabel>New</guilabel>, and then click <guilabel>DWORD Value</guilabel>.
+ </para>
- </listitem>
- <listitem>
- <para>
- Type <literal>BasicAuthLevel</literal>, and then press <keycap>Enter</keycap>.
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ Type <literal>BasicAuthLevel</literal>, and then press <keycap>Enter</keycap>.
+ </para>
- </listitem>
- <listitem>
- <para>
- Right-click <literal>BasicAuthLevel</literal>, and then click <guilabel>Modify</guilabel>.
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ Right-click <literal>BasicAuthLevel</literal>, and then click <guilabel>Modify</guilabel>.
+ </para>
- </listitem>
- <listitem>
- <para>
- In the Value data box, type <literal>2</literal>, and then click <guilabel>OK</guilabel>.
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ In the Value data box, type <literal>2</literal>, and then click <guilabel>OK</guilabel>.
+ </para>
- </listitem>
+ </listitem>
- </orderedlist>
+ </orderedlist>
- </section>
-
+ </section>
+
</section>
Modified: epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR/jcr/query-handler-config.xml
===================================================================
--- epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR/jcr/query-handler-config.xml 2011-11-16 02:48:49 UTC (rev 8078)
+++ epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR/jcr/query-handler-config.xml 2011-11-16 04:52:13 UTC (rev 8079)
@@ -423,7 +423,7 @@
<locking useLockStriping="false" concurrencyLevel="50000" lockParentForChildInsertRemove="false"
lockAcquisitionTimeout="20000" />
<!-- Configure the TransactionManager -->
- <transaction transactionManagerLookupClass="org.jboss.cache.transaction.JBoss<remark>Standalone</remark>
+ <transaction transactionManagerLookupClass="org.jboss.cache.transaction.JBossStandalone
JTAManagerLookup" />
<clustering mode="replication" clusterName="${jbosscache-cluster-name}">
<stateRetrieval timeout="20000" fetchInMemoryState="false" />
Modified: epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR/jcr/searching/child-node-constraint.xml
===================================================================
--- epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR/jcr/searching/child-node-constraint.xml 2011-11-16 02:48:49 UTC (rev 8078)
+++ epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR/jcr/searching/child-node-constraint.xml 2011-11-16 04:52:13 UTC (rev 8079)
@@ -19,11 +19,11 @@
The repository is filled by "<literal>nt:folder</literal>" nodes. The nodes are placed in a multilayer tree.
</para>
<screen>root
-└── folder1 (nt:folder)
- └── folder2 (nt:folder)
- ├── folder3 (nt:folder) // This node we want to find
- │ └── folder4 (nt:folder) // This node is not child but a descendant of '/folder1/folder2/'
- └── folder5 (nt:folder) // This node we want to find
+ └── folder1 (nt:folder)
+ └── folder2 (nt:folder)
+ ├── folder3 (nt:folder) // This node we want to find
+ │ └── folder4 (nt:folder) // This node is not child but a descendant of '/folder1/folder2/'
+ └── folder5 (nt:folder) // This node we want to find
</screen>
</section>
Modified: epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR/jcr/searching/find-all-nodes.xml
===================================================================
--- epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR/jcr/searching/find-all-nodes.xml 2011-11-16 02:48:49 UTC (rev 8078)
+++ epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR/jcr/searching/find-all-nodes.xml 2011-11-16 04:52:13 UTC (rev 8079)
@@ -23,11 +23,11 @@
Repository contains many different nodes.
</para>
<programlisting>root
-└── folder1 (nt:folder)
- ├── document1 (nt:file)
- └── folder2 (nt:folder)
- ├── document2 (nt:unstructured)
- └── document3 (nt:folder)
+ └── folder1 (nt:folder)
+ ├── document1 (nt:file)
+ └── folder2 (nt:folder)
+ ├── document2 (nt:unstructured)
+ └── document3 (nt:folder)
</programlisting>
</section>
Modified: epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR/jcr/searching/fulltext-search-and-settings.xml
===================================================================
--- epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR/jcr/searching/fulltext-search-and-settings.xml 2011-11-16 02:48:49 UTC (rev 8078)
+++ epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR/jcr/searching/fulltext-search-and-settings.xml 2011-11-16 04:52:13 UTC (rev 8079)
@@ -4,334 +4,302 @@
%BOOK_ENTITIES;
]>
<section id="sect-Reference_Guide_eXo_JCR_1.14-Fulltext_Search_And_Affecting_Settings">
- <title>Fulltext Search And Affecting Settings</title>
- <section id="sect-Reference_Guide_eXo_JCR_1.14-Fulltext_Search_And_Affecting_Settings-Property_content_indexing">
- <title>Property content indexing</title>
- <para>
- Each property of a node (if it is indexable) is processed with Lucene analyzer and stored in Lucene index. That's called indexing of a property. After that we can perform a fulltext search among these indexed properties.
- </para>
+ <title>Fulltext Search And Affecting Settings</title>
+ <section id="sect-Reference_Guide_eXo_JCR_1.14-Fulltext_Search_And_Affecting_Settings-Property_content_indexing">
+ <title>Property content indexing</title>
+ <para>
+ Each property of a node (if it is indexable) is processed with Lucene analyzer and stored in Lucene index. That's called indexing of a property. After that we can perform a fulltext search among these indexed properties.
+ </para>
- </section>
-
- <section id="sect-Reference_Guide_eXo_JCR_1.14-Fulltext_Search_And_Affecting_Settings-Lucene_Analyzers">
- <title>Lucene Analyzers</title>
- <para>
- The sense of analyzers is to transform all strings stored in the index in a well-defined condition. The same analyzer(s) is/are used when searching in order to adapt the query string to the index reality.
- </para>
- <para>
- Therefore, performing the same query using different analyzers can return different results.
- </para>
- <para>
- Now, let's see how the same string is transformed by different analyzers.
- </para>
- <table id="tabl-Reference_Guide_eXo_JCR_1.14-Lucene_Analyzers-The_quick_brown_fox_jumped_over_the_lazy_dogs">
- <title>"The quick brown fox jumped over the lazy dogs"</title>
- <tgroup cols="2">
- <thead>
- <row>
- <entry>
- Analyzer
- </entry>
- <entry>
- Parsed
- </entry>
+ </section>
+
+ <section id="sect-Reference_Guide_eXo_JCR_1.14-Fulltext_Search_And_Affecting_Settings-Lucene_Analyzers">
+ <title>Lucene Analyzers</title>
+ <para>
+ The sense of analyzers is to transform all strings stored in the index in a well-defined condition. The same analyzer(s) is/are used when searching in order to adapt the query string to the index reality.
+ </para>
+ <para>
+ Therefore, performing the same query using different analyzers can return different results.
+ </para>
+ <para>
+ Now, let's see how the same string is transformed by different analyzers.
+ </para>
+ <table id="tabl-Reference_Guide_eXo_JCR_1.14-Lucene_Analyzers-The_quick_brown_fox_jumped_over_the_lazy_dogs">
+ <title>"The quick brown fox jumped over the lazy dogs"</title>
+ <tgroup cols="2">
+ <thead>
+ <row>
+ <entry>
+ Analyzer
+ </entry>
+ <entry>
+ Parsed
+ </entry>
- </row>
+ </row>
- </thead>
- <tbody>
- <row>
- <entry>
- org.apache.lucene.analysis.WhitespaceAnalyzer
- </entry>
- <entry>
- [The] [quick] [brown] [fox] [jumped] [over] [the] [lazy] [dogs]
- </entry>
+ </thead>
+ <tbody>
+ <row>
+ <entry>
+ org.apache.lucene.analysis.WhitespaceAnalyzer
+ </entry>
+ <entry>
+ [The] [quick] [brown] [fox] [jumped] [over] [the] [lazy] [dogs]
+ </entry>
- </row>
- <row>
- <entry>
- org.apache.lucene.analysis.SimpleAnalyzer
- </entry>
- <entry>
- [the] [quick] [brown] [fox] [jumped] [over] [the] [lazy] [dogs]
- </entry>
+ </row>
+ <row>
+ <entry>
+ org.apache.lucene.analysis.SimpleAnalyzer
+ </entry>
+ <entry>
+ [the] [quick] [brown] [fox] [jumped] [over] [the] [lazy] [dogs]
+ </entry>
- </row>
- <row>
- <entry>
- org.apache.lucene.analysis.StopAnalyzer
- </entry>
- <entry>
- [quick] [brown] [fox] [jumped] [over] [lazy] [dogs]
- </entry>
+ </row>
+ <row>
+ <entry>
+ org.apache.lucene.analysis.StopAnalyzer
+ </entry>
+ <entry>
+ [quick] [brown] [fox] [jumped] [over] [lazy] [dogs]
+ </entry>
- </row>
- <row>
- <entry>
- org.apache.lucene.analysis.standard.StandardAnalyzer
- </entry>
- <entry>
- [quick] [brown] [fox] [jumped] [over] [lazy] [dogs]
- </entry>
+ </row>
+ <row>
+ <entry>
+ org.apache.lucene.analysis.standard.StandardAnalyzer
+ </entry>
+ <entry>
+ [quick] [brown] [fox] [jumped] [over] [lazy] [dogs]
+ </entry>
- </row>
- <row>
- <entry>
- org.apache.lucene.analysis.snowball.SnowballAnalyzer
- </entry>
- <entry>
- [quick] [brown] [fox] [jump] [over] [lazi] [dog]
- </entry>
+ </row>
+ <row>
+ <entry>
+ org.apache.lucene.analysis.snowball.SnowballAnalyzer
+ </entry>
+ <entry>
+ [quick] [brown] [fox] [jump] [over] [lazi] [dog]
+ </entry>
- </row>
- <row>
- <entry>
- org.apache.lucene.analysis.standard.StandardAnalyzer (configured without stop word - jcr default analyzer)
- </entry>
- <entry>
- [the] [quick] [brown] [fox] [jumped] [over] [the] [lazy] [dogs]
- </entry>
+ </row>
+ <row>
+ <entry>
+ org.apache.lucene.analysis.standard.StandardAnalyzer (configured without stop word - jcr default analyzer)
+ </entry>
+ <entry>
+ [the] [quick] [brown] [fox] [jumped] [over] [the] [lazy] [dogs]
+ </entry>
- </row>
+ </row>
- </tbody>
+ </tbody>
- </tgroup>
+ </tgroup>
- </table>
- <table id="tabl-Reference_Guide_eXo_JCR_1.14-Lucene_Analyzers-XYampZ_Corporation_xyz...">
- <title>"XY&Z Corporation - xyz(a)example.com"</title>
- <tgroup cols="2">
- <thead>
- <row>
- <entry>
- Analyzer
- </entry>
- <entry>
- Parsed
- </entry>
+ </table>
+ <table id="tabl-Reference_Guide_eXo_JCR_1.14-Lucene_Analyzers-XYampZ_Corporation_xyz...">
+ <title>"XY&Z Corporation - xyz(a)example.com"</title>
+ <tgroup cols="2">
+ <thead>
+ <row>
+ <entry>
+ Analyzer
+ </entry>
+ <entry>
+ Parsed
+ </entry>
- </row>
+ </row>
- </thead>
- <tbody>
- <row>
- <entry>
- org.apache.lucene.analysis.WhitespaceAnalyzer
- </entry>
- <entry>
- [XY&Z] [Corporation] [-] [xyz(a)example.com]
- </entry>
+ </thead>
+ <tbody>
+ <row>
+ <entry>
+ org.apache.lucene.analysis.WhitespaceAnalyzer
+ </entry>
+ <entry>
+ [XY&Z] [Corporation] [-] [xyz(a)example.com]
+ </entry>
- </row>
- <row>
- <entry>
- org.apache.lucene.analysis.SimpleAnalyzer
- </entry>
- <entry>
- [xy] [z] [corporation] [xyz] [example] [com]
- </entry>
+ </row>
+ <row>
+ <entry>
+ org.apache.lucene.analysis.SimpleAnalyzer
+ </entry>
+ <entry>
+ [xy] [z] [corporation] [xyz] [example] [com]
+ </entry>
- </row>
- <row>
- <entry>
- org.apache.lucene.analysis.StopAnalyzer
- </entry>
- <entry>
- [xy] [z] [corporation] [xyz] [example] [com]
- </entry>
+ </row>
+ <row>
+ <entry>
+ org.apache.lucene.analysis.StopAnalyzer
+ </entry>
+ <entry>
+ [xy] [z] [corporation] [xyz] [example] [com]
+ </entry>
- </row>
- <row>
- <entry>
- org.apache.lucene.analysis.standard.StandardAnalyzer
- </entry>
- <entry>
- [xy&z] [corporation] [xyz@example] [com]
- </entry>
+ </row>
+ <row>
+ <entry>
+ org.apache.lucene.analysis.standard.StandardAnalyzer
+ </entry>
+ <entry>
+ [xy&z] [corporation] [xyz@example] [com]
+ </entry>
- </row>
- <row>
- <entry>
- org.apache.lucene.analysis.snowball.SnowballAnalyzer
- </entry>
- <entry>
- [xy&z] [corpor] [xyz@exampl] [com]
- </entry>
+ </row>
+ <row>
+ <entry>
+ org.apache.lucene.analysis.snowball.SnowballAnalyzer
+ </entry>
+ <entry>
+ [xy&z] [corpor] [xyz@exampl] [com]
+ </entry>
- </row>
- <row>
- <entry>
- org.apache.lucene.analysis.standard.StandardAnalyzer (configured without stop word - jcr default analyzer)
- </entry>
- <entry>
- [xy&z] [corporation] [xyz@example] [com]
- </entry>
+ </row>
+ <row>
+ <entry>
+ org.apache.lucene.analysis.standard.StandardAnalyzer (configured without stop word - jcr default analyzer)
+ </entry>
+ <entry>
+ [xy&z] [corporation] [xyz@example] [com]
+ </entry>
- </row>
+ </row>
- </tbody>
+ </tbody>
- </tgroup>
+ </tgroup>
- </table>
- <note>
- <para>
- StandardAnalyzer is the default analyzer in exo's jcr search engine. But we do not use stop words.
- </para>
+ </table>
+ <note>
+ <para>
+ StandardAnalyzer is the default analyzer in exo's jcr search engine. But we do not use stop words.
+ </para>
- </note>
- <para>
- You can assign your analyzer as described in <xref linkend="sect-Reference_Guide_eXo_JCR_1.14-Search_Configuration" />
- </para>
+ </note>
+ <para>
+ You can assign your analyzer as described in <xref linkend="sect-Reference_Guide_eXo_JCR_1.14-Search_Configuration" />
+ </para>
- </section>
-
- <section id="sect-Reference_Guide_eXo_JCR_1.14-Fulltext_Search_And_Affecting_Settings-How_are_different_properties_indexed">
- <title>How are different properties indexed?</title>
- <para>
- Different properties are indexed in different ways, this affects to if it can be searched like fulltext by property or not.
- </para>
- <para>
- Only two property types are indexed as fulltext searcheable: STRING and BINARY.
- </para>
- <table id="tabl-Reference_Guide_eXo_JCR_1.14-How_are_different_properties_indexed-Fulltext_search_by_different_properties">
- <title>Fulltext search by different properties</title>
- <tgroup cols="3">
- <thead>
- <row>
- <entry>
- Property Type
- </entry>
- <entry>
- Fulltext search by all properties
- </entry>
- <entry>
- Fulltext search by exact property
- </entry>
+ </section>
+
+ <section id="sect-Reference_Guide_eXo_JCR_1.14-Fulltext_Search_And_Affecting_Settings-How_are_different_properties_indexed">
+ <title>How are different properties indexed?</title>
+ <para>
+ Different properties are indexed in different ways, this affects to if it can be searched like fulltext by property or not.
+ </para>
+ <para>
+ Only two property types are indexed as fulltext searcheable: STRING and BINARY.
+ </para>
+ <table id="tabl-Reference_Guide_eXo_JCR_1.14-How_are_different_properties_indexed-Fulltext_search_by_different_properties">
+ <title>Fulltext search by different properties</title>
+ <tgroup cols="3">
+ <thead>
+ <row>
+ <entry>
+ Property Type
+ </entry>
+ <entry>
+ Fulltext search by all properties
+ </entry>
+ <entry>
+ Fulltext search by exact property
+ </entry>
- </row>
+ </row>
- </thead>
- <tbody>
- <row>
- <entry>
- STRING
- </entry>
- <entry>
- YES
- </entry>
- <entry>
- YES
- </entry>
+ </thead>
+ <tbody>
+ <row>
+ <entry>
+ STRING
+ </entry>
+ <entry>
+ YES
+ </entry>
+ <entry>
+ YES
+ </entry>
- </row>
- <row>
- <entry>
- BINARY
- </entry>
- <entry>
- YES
- </entry>
- <entry>
- NO
- </entry>
+ </row>
+ <row>
+ <entry>
+ BINARY
+ </entry>
+ <entry>
+ YES
+ </entry>
+ <entry>
+ NO
+ </entry>
- </row>
+ </row>
- </tbody>
+ </tbody>
- </tgroup>
+ </tgroup>
- </table>
- <para>
- For example, ưe have property jcr:data (it' BINARY). It's stored well, but you will never find any string with query like:
- </para>
-
+ </table>
+ <para>
+ For example, ưe have property jcr:data (it' BINARY). It's stored well, but you will never find any string with query like:
+ </para>
+
<programlisting>SELECT * FROM nt:resource WHERE CONTAINS(jcr:data, 'some string')</programlisting>
- <para>
- Because, BINARY is not searchable by fulltext search on exact property.
- </para>
- <para>
- But, next query will return result (off course if node has searched data):
- </para>
-
+ <para>
+ Because, BINARY is not searchable by fulltext search on exact property.
+ </para>
+ <para>
+ But, next query will return result (off course if node has searched data):
+ </para>
+
<programlisting>SELECT * FROM nt:resource WHERE CONTAINS( * , 'some string')</programlisting>
- </section>
-
- <section id="sect-Reference_Guide_eXo_JCR_1.14-Fulltext_Search_And_Affecting_Settings-Fulltext_search_query_examples">
- <title>Fulltext search query examples</title>
- <itemizedlist>
- <listitem>
- <para>
- <xref linkend="sect-Reference_Guide_eXo_JCR_1.14-Fulltext_Search_by_Property" />
- </para>
+ </section>
+
+ <section id="sect-Reference_Guide_eXo_JCR_1.14-Fulltext_Search_And_Affecting_Settings-Different_analyzers_in_action">
+ <title>Different analyzers in action</title>
+ <para>
+ First of all, we will fill repository by nodes with mixin type 'mix:title' and different values of 'jcr:description' property.
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ root
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ document1 (mix:title) jcr:description = "The quick brown fox jumped over the lazy dogs"
+ </para>
- </listitem>
- <listitem>
- <para>
- <xref linkend="sect-Reference_Guide_eXo_JCR_1.14-Fulltext_Search_by_All_Properties_in_Node" />
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ document2 (mix:title) jcr:description = "Brown fox live in forest."
+ </para>
- </listitem>
- <listitem>
- <para>
- <xref linkend="sect-Reference_Guide_eXo_JCR_1.14-Finding_ntfile_node_by_content_of_child_jcrcontent_node" />
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ document3 (mix:title) jcr:description = "Fox is a nice animal."
+ </para>
- </listitem>
- <listitem>
- <para>
- <xref linkend="sect-Reference_Guide_eXo_JCR_1.14-Ignoring_Accent_Symbols._New_Analyzer_Setting." />
- </para>
+ </listitem>
- </listitem>
+ </itemizedlist>
- </itemizedlist>
+ </listitem>
- </section>
-
- <section id="sect-Reference_Guide_eXo_JCR_1.14-Fulltext_Search_And_Affecting_Settings-Different_analyzers_in_action">
- <title>Different analyzers in action</title>
- <para>
- First of all, we will fill repository by nodes with mixin type 'mix:title' and different values of 'jcr:description' property.
- </para>
- <itemizedlist>
- <listitem>
- <para>
- root
- </para>
- <itemizedlist>
- <listitem>
- <para>
- document1 (mix:title) jcr:description = "The quick brown fox jumped over the lazy dogs"
- </para>
-
- </listitem>
- <listitem>
- <para>
- document2 (mix:title) jcr:description = "Brown fox live in forest."
- </para>
-
- </listitem>
- <listitem>
- <para>
- document3 (mix:title) jcr:description = "Fox is a nice animal."
- </para>
-
- </listitem>
-
- </itemizedlist>
-
- </listitem>
-
- </itemizedlist>
- <para>
- Let's see analyzers effect closer. In first case, we use base jcr settings, so, as mentioned above, string "The quick brown fox jumped over the lazy dogs" will be transformed to set {[the] [quick] [brown] [fox] [jumped] [over] [the] [lazy] [dogs] }
- </para>
-
+ </itemizedlist>
+ <para>
+ Let's see analyzers effect closer. In first case, we use base jcr settings, so, as mentioned above, string "The quick brown fox jumped over the lazy dogs" will be transformed to set {[the] [quick] [brown] [fox] [jumped] [over] [the] [lazy] [dogs] }
+ </para>
+
<programlisting language="Java" role="Java">// make SQL query
QueryManager queryManager = workspace.getQueryManager();
String sqlStatement = "SELECT * FROM mix:title WHERE CONTAINS(jcr:description, 'the')";
@@ -339,15 +307,15 @@
Query query = queryManager.createQuery(sqlStatement, Query.SQL);
// execute query and fetch result
QueryResult result = query.execute();</programlisting>
- <para>
- NodeIterator will return "document1".
- </para>
- <para>
- Now change the default analyzer to org.apache.lucene.analysis.StopAnalyzer. Fill repository again (new Analyzer must process nodes properties) and run the same query again. It will return nothing, because stop words like "the" will be excluded from parsed string set.
- </para>
+ <para>
+ NodeIterator will return "document1".
+ </para>
+ <para>
+ Now change the default analyzer to org.apache.lucene.analysis.StopAnalyzer. Fill repository again (new Analyzer must process nodes properties) and run the same query again. It will return nothing, because stop words like "the" will be excluded from parsed string set.
+ </para>
- </section>
-
+ </section>
+
</section>
Modified: epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR/jcr/searching/index-boost-value.xml
===================================================================
--- epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR/jcr/searching/index-boost-value.xml 2011-11-16 02:48:49 UTC (rev 8078)
+++ epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR/jcr/searching/index-boost-value.xml 2011-11-16 04:52:13 UTC (rev 8079)
@@ -6,7 +6,7 @@
<section id="sect-Reference_Guide_eXo_JCR_1.14-Changing_Priority_of_Node">
<title>Changing Priority of Node</title>
<formalpara>
- <title></title>
+ <title>Task:</title>
<para>
Set different boost values for predefined nodes, and check the effect of this change by selecting those nodes and order them by <literal>jcr:score</literal>.
</para>
Modified: epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR/jcr/searching/jcr-query-usecases.xml
===================================================================
--- epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR/jcr/searching/jcr-query-usecases.xml 2011-11-16 02:48:49 UTC (rev 8078)
+++ epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR/jcr/searching/jcr-query-usecases.xml 2011-11-16 04:52:13 UTC (rev 8079)
@@ -8,7 +8,7 @@
<section id="sect-Reference_Guide_eXo_JCR_1.14-JCR_Query_Usecases-Intro">
<title>Intro</title>
<para>
- JCR supports two query languages - JCR and XPath. A query, whether XPath or SQL, specifies a subset of nodes within a workspace, called the result set. The result set constitutes all the nodes in the workspace that meet the constraints stated in the query.
+ The JCR supports two query languages; JCR and XPath. A query, whether XPath or SQL, specifies a subset of nodes within a workspace, called the result set. The result set constitutes all the nodes in the workspace that meet the constraints stated in the query.
</para>
</section>
@@ -17,26 +17,28 @@
<title>Query Lifecycle</title>
<section id="sect-Reference_Guide_eXo_JCR_1.14-Query_Lifecycle-Query_Creation_and_Execution">
<title>Query Creation and Execution</title>
- <para>
- <emphasis role="bold">SQL</emphasis>
- </para>
-
+ <formalpara>
+ <title>SQL</title>
+ <para>
<programlisting language="Java" role="Java">// get QueryManager
QueryManager queryManager = workspace.getQueryManager();
// make SQL query
Query query = queryManager.createQuery("SELECT * FROM nt:base ", Query.SQL);
// execute query
QueryResult result = query.execute();</programlisting>
- <para>
- <emphasis role="bold">XPath</emphasis>
- </para>
-
+ </para>
+ </formalpara>
+ <formalpara>
+ <title>XPath</title>
+ <para>
<programlisting language="Java" role="Java">// get QueryManager
QueryManager queryManager = workspace.getQueryManager();
// make XPath query
Query query = queryManager.createQuery("//element(*,nt:base)", Query.XPATH);
// execute query
QueryResult result = query.execute();</programlisting>
+ </para>
+ </formalpara>
</section>
@@ -46,12 +48,12 @@
<programlisting language="Java" role="Java">// fetch query result
QueryResult result = query.execute();</programlisting>
<para>
- Now we can get result in an iterator of nodes:
+ To fetch the nodes:
</para>
<programlisting language="Java" role="Java">NodeIterator it = result.getNodes();</programlisting>
<para>
- or we get the result in a table:
+ The results can be formatted in a table:
</para>
<programlisting language="Java" role="Java">// get column names
@@ -76,7 +78,7 @@
eXo JCR Scoring is a mapping of Lucene scoring. For a more in-depth understanding, please study <ulink url="http://lucene.apache.org/java/2_4_1/scoring.html">Lucene documentation</ulink>.
</para>
<para>
- jcr:score counted in next way - (lucene score)*1000f.
+ The <literal>jcr:score</literal> is calculated as; <literal>(lucene score)*1000f</literal>.
</para>
<para>
Score may be increased for specified nodes, see <xref linkend="sect-Reference_Guide_eXo_JCR_1.14-Changing_Priority_of_Node" />
@@ -89,7 +91,7 @@
</section>
-
+
<section id="sect-Reference_Guide_eXo_JCR_1.14-JCR_Query_Usecases-Query_result_settings">
<title>Query result settings</title>
<itemizedlist>
Modified: epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR/jcr/searching/node-name-constraint.xml
===================================================================
--- epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR/jcr/searching/node-name-constraint.xml 2011-11-16 02:48:49 UTC (rev 8078)
+++ epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR/jcr/searching/node-name-constraint.xml 2011-11-16 04:52:13 UTC (rev 8079)
@@ -5,12 +5,17 @@
]>
<section id="sect-Reference_Guide_eXo_JCR_1.14-Node_Name_Constraint">
<title>Node Name Constraint</title>
- <para>
- Find all nodes with primary type 'nt:file' whose node name is 'document'. The node name is accessible by a function called "fn:name()".
- </para>
+ <formalpara>
+ <title>Task:</title>
+ <para>
+ Find all nodes with primary type <literal>nt:file</literal> whose node name is <parameter>document</parameter>. The node name is accessible by a function called <code>fn:name()</code>.
+ </para>
+ </formalpara>
+
<note>
+ <title>Note</title>
<para>
- fn:name() can be used ONLY with an equal('=') comparison.
+ <code>fn:name()</code> can be used ONLY with an equal(<literal>=</literal>) comparison.
</para>
</note>
@@ -19,45 +24,20 @@
<para>
The repository contains nt:file nodes with different names.
</para>
- <itemizedlist>
- <listitem>
- <para>
- root
- </para>
- <itemizedlist>
- <listitem>
- <para>
- document1 (nt:file)
- </para>
+<programlisting>root
+ ├── document1 (nt:file)
+ ├── file (nt:file)
+ └── somename (nt:file)
+</programlisting>
- </listitem>
- <listitem>
- <para>
- file (nt:file)
- </para>
- </listitem>
- <listitem>
- <para>
- somename (nt:file)
- </para>
-
- </listitem>
-
- </itemizedlist>
-
- </listitem>
-
- </itemizedlist>
-
</section>
<section id="sect-Reference_Guide_eXo_JCR_1.14-Node_Name_Constraint-Query_execution">
<title>Query execution</title>
- <para>
- <emphasis role="bold">SQL</emphasis>
- </para>
-
+ <formalpara>
+ <title>SQL</title>
+ <para>
<programlisting language="Java" role="Java">// make SQL query
QueryManager queryManager = workspace.getQueryManager();
// create query
@@ -65,10 +45,11 @@
Query query = queryManager.createQuery(sqlStatement, Query.SQL);
// execute query and fetch result
QueryResult result = query.execute();</programlisting>
- <para>
- <emphasis role="bold">XPath</emphasis>
- </para>
-
+ </para>
+ </formalpara>
+ <formalpara>
+ <title>XPath</title>
+ <para>
<programlisting language="Java" role="Java">// make XPath query
QueryManager queryManager = workspace.getQueryManager();
// create query
@@ -76,13 +57,15 @@
Query query = queryManager.createQuery(xpathStatement, Query.XPATH);
// execute query and fetch result
QueryResult result = query.execute();</programlisting>
+ </para>
+ </formalpara>
</section>
<section id="sect-Reference_Guide_eXo_JCR_1.14-Node_Name_Constraint-Fetching_the_Result">
<title>Fetching the Result</title>
<para>
- Let's get nodes:
+ To fetch appropriate nodes:
</para>
<programlisting language="Java" role="Java">NodeIterator it = result.getNodes();
@@ -92,10 +75,10 @@
Node findedNode = it.nextNode();
}</programlisting>
<para>
- The NodeIterator will return the node whose fn:name equals "document".
+ The <literal>NodeIterator</literal> will return the node whose <literal>fn:name</literal> equals <emphasis>document</emphasis>.
</para>
<para>
- Also we can get a table:
+ The results can also be formatted as a table:
</para>
<programlisting language="Java" role="Java">String[] columnNames = result.getColumnNames();
Modified: epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR/jcr/searching/not-constraint.xml
===================================================================
--- epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR/jcr/searching/not-constraint.xml 2011-11-16 02:48:49 UTC (rev 8078)
+++ epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR/jcr/searching/not-constraint.xml 2011-11-16 04:52:13 UTC (rev 8079)
@@ -5,53 +5,32 @@
]>
<section id="sect-Reference_Guide_eXo_JCR_1.14-NOT_Constraint">
<title>NOT Constraint</title>
- <para>
- Find all nodes with a mixin type 'mix:title' and where the property 'jcr:title' does NOT start with a 'P' symbol
- </para>
+ <formalpara>
+ <title>Task:</title>
+ <para>
+ Find all nodes with a mixin type <literal>mix:title</literal> and where the property <parameter>jcr:title</parameter> does <emphasis role="bold">not</emphasis> start with a <literal>P</literal> symbol.
+ </para>
+ </formalpara>
+
<section id="sect-Reference_Guide_eXo_JCR_1.14-NOT_Constraint-Repository_Structure">
<title>Repository Structure</title>
<para>
The repository contains a mix:title nodes, where the jcr:title has different values.
</para>
- <itemizedlist>
- <listitem>
- <para>
- root
- </para>
- <itemizedlist>
- <listitem>
- <para>
- document1 (mix:title) jcr:title="Star wars" jcr:description="Dart rules!!"
- </para>
+<programlisting>root
+ ├── document1 (mix:title) jcr:title="Star wars" jcr:description="Darth rules!!"
+ ├── document2 (mix:title) jcr:title="Prison break" jcr:description="Run, Forest, run ))"
+ └── document3 (mix:title) jcr:title="Panopticum" jcr:description="It's imagine film"
+</programlisting>
- </listitem>
- <listitem>
- <para>
- document2 (mix:title) jcr:title="Prison break" jcr:description="Run, Forest, run ))"
- </para>
-
- </listitem>
- <listitem>
- <para>
- document3 (mix:title) jcr:title="Panopticum" jcr:description="It's imagine film"
- </para>
-
- </listitem>
-
- </itemizedlist>
-
- </listitem>
-
- </itemizedlist>
-
</section>
<section id="sect-Reference_Guide_eXo_JCR_1.14-NOT_Constraint-Query_execution">
<title>Query execution</title>
- <para>
- <emphasis role="bold">SQL</emphasis>
- </para>
-
+
+ <formalpara>
+ <title>SQL</title>
+ <para>
<programlisting language="Java" role="Java">// make SQL query
QueryManager queryManager = workspace.getQueryManager();
// create query
@@ -59,10 +38,11 @@
Query query = queryManager.createQuery(sqlStatement, Query.SQL);
// execute query and fetch result
QueryResult result = query.execute();</programlisting>
- <para>
- <emphasis role="bold">XPath</emphasis>
- </para>
-
+ </para>
+ </formalpara>
+ <formalpara>
+ <title>XPath</title>
+ <para>
<programlisting language="Java" role="Java">// make XPath query
QueryManager queryManager = workspace.getQueryManager();
// create query
@@ -70,13 +50,15 @@
Query query = queryManager.createQuery(xpathStatement, Query.XPATH);
// execute query and fetch result
QueryResult result = query.execute();</programlisting>
+ </para>
+ </formalpara>
</section>
<section id="sect-Reference_Guide_eXo_JCR_1.14-NOT_Constraint-Fetching_the_result">
<title>Fetching the result</title>
<para>
- Let's get the nodes:
+ To fetch the matching nodes:
</para>
<programlisting language="Java" role="Java">NodeIterator it = result.getNodes();
@@ -86,10 +68,10 @@
Node findedNode = it.nextNode();
}</programlisting>
<para>
- NodeIterator will return "document1".
+ The <literal>NodeIterator</literal> will return <emphasis>document1</emphasis>.
</para>
<para>
- We can also get a table:
+ The results can also be formatted as a table:
</para>
<programlisting language="Java" role="Java">String[] columnNames = result.getColumnNames();
Modified: epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR/jcr/searching/spell-checker.xml
===================================================================
--- epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR/jcr/searching/spell-checker.xml 2011-11-16 02:48:49 UTC (rev 8078)
+++ epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR/jcr/searching/spell-checker.xml 2011-11-16 04:52:13 UTC (rev 8079)
@@ -5,9 +5,13 @@
]>
<section id="sect-Reference_Guide_eXo_JCR_1.14-Checking_the_spelling_of_Phrase">
<title>Checking the spelling of Phrase</title>
- <para>
- Check the correct spelling of phrase 'quik OR (-foo bar)' according to data already stored in index.
- </para>
+ <formalpara>
+ <title>Task:</title>
+ <para>
+ Check the correct spelling of phrase '<emphasis>quik OR (-foo bar)</emphasis>' according to data already stored in index.
+ </para>
+ </formalpara>
+
<note>
<para>
Refer to <xref linkend="sect-Reference_Guide_eXo_JCR_1.14-Searching_Repository_Content" /> for information about SpellChecker configuration.
@@ -15,12 +19,10 @@
</note>
<para>
- SpellChecker must be settled in query-handler config.
+ The SpellChecker must be set in query-handler configuration.
</para>
- <para>
- test-jcr-config.xml:
- </para>
-
+<example>
+ <title>test-jcr-config.xml:</title>
<programlisting language="XML" role="XML"><query-handler class="org.exoplatform.services.jcr.impl.core.query.lucene.SearchIndex">
<properties>
...
@@ -28,41 +30,28 @@
...
</properties>
</query-handler></programlisting>
+</example>
+
+
<section id="sect-Reference_Guide_eXo_JCR_1.14-Checking_the_spelling_of_Phrase-Repository_structure">
<title>Repository structure:</title>
<para>
Repository contains node, with string property "The quick brown fox jumps over the lazy dog."
</para>
- <itemizedlist>
- <listitem>
- <para>
- root
- </para>
- <itemizedlist>
- <listitem>
- <para>
- node1 property="The quick brown fox jumps over the lazy dog."
- </para>
+<programlisting>root
+ └── node1 property="The quick brown fox jumps over the lazy dog."
+</programlisting>
- </listitem>
-
- </itemizedlist>
-
- </listitem>
-
- </itemizedlist>
-
</section>
<section id="sect-Reference_Guide_eXo_JCR_1.14-Checking_the_spelling_of_Phrase-Query_execution">
<title>Query execution</title>
<para>
- Query looks only for root node, because spell checker looks for suggestions by full index. So complicated query is redundant.
+ The query looks only for the <literal>root</literal> node, because the spell checker looks for suggestions by full index. Therefore a complicated query is unecessary.
</para>
- <para>
- <emphasis role="bold">SQL</emphasis>
- </para>
-
+ <formalpara>
+ <title>SQL</title>
+ <para>
<programlisting language="Java" role="Java">// make SQL query
QueryManager queryManager = workspace.getQueryManager();
// create query
@@ -70,10 +59,11 @@
Query query = queryManager.createQuery(sqlStatement, Query.SQL);
// execute query and fetch result
QueryResult result = query.execute();</programlisting>
- <para>
- <emphasis role="bold">XPath</emphasis>
- </para>
-
+ </para>
+ </formalpara>
+ <formalpara>
+ <title>XPath</title>
+ <para>
<programlisting language="Java" role="Java">// make XPath query
QueryManager queryManager = workspace.getQueryManager();
// create query
@@ -81,13 +71,15 @@
Query query = queryManager.createQuery(xpathStatement, Query.XPATH);
// execute query and fetch result
QueryResult result = query.execute();</programlisting>
+ </para>
+ </formalpara>
</section>
<section id="sect-Reference_Guide_eXo_JCR_1.14-Checking_the_spelling_of_Phrase-Fetching_result">
<title>Fetching result</title>
<para>
- Get suggestion of correct spelling our phrase:
+ To get suggestions of the correct spelling of the nominated phrase:
</para>
<programlisting language="Java" role="Java">RowIterator it = result.getRows();
@@ -95,7 +87,7 @@
Value v = r.getValue("rep:spellcheck()");
String correctPhrase = v.getString();</programlisting>
<para>
- So, correct spelling for phrase "quik OR (-foo bar)" is "quick OR (-fox bar)".
+ The result would offer "<literal>quick OR (-fox bar)</literal>" as the correct spelling for the phrase "<literal>quik OR (-foo bar)</literal>" .
</para>
</section>
Deleted: epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR/jcr.xml
===================================================================
--- epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR/jcr.xml 2011-11-16 02:48:49 UTC (rev 8078)
+++ epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR/jcr.xml 2011-11-16 04:52:13 UTC (rev 8079)
@@ -1,81 +0,0 @@
-<?xml version='1.0' encoding='utf-8' ?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
-<!ENTITY % BOOK_ENTITIES SYSTEM "Reference_Guide_eXo_JCR_1.14.ent">
-%BOOK_ENTITIES;
-]>
-<section id="sect-Reference_Guide_eXo_JCR_1.14-eXoJCR">
- <title>Java Content Repository</title>
-
- <xi:include href="jcr/intro.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
-
- <!-- concepts -->
- <!-- <xi:include href="jcr/concepts/why-jcr.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> -->
- <xi:include href="jcr/concepts/jcr-exo-implementation.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
- <xi:include href="jcr/concepts/jcr-advantages.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
- <xi:include href="jcr/concepts/jcr-compatibility-levels.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
- <xi:include href="jcr/concepts/jcr-usage.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
-
- <!-- <xi:include href="jcr/concepts/jcr-extensions.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> -->
- <xi:include href="jcr/concepts/jcr-applications.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
- <xi:include href="jcr/concepts/nodetypes-and-namespaces.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
- <xi:include href="jcr/concepts/nodetype-registration.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
- <xi:include href="jcr/concepts/jcr-registry-service.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
- <xi:include href="jcr/concepts/jcr-namespace-altering.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
-
- <!-- common configs -->
- <xi:include href="jcr/configuration/exo-jcr-configuration.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
- <xi:include href="jcr/configuration/multilanguage-support.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
- <xi:include href="jcr/configuration/search-configuration.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
- <xi:include href="jcr/configuration/configuration-persister.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
- <xi:include href="jcr/configuration/jdbc-data-container-config.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
- <xi:include href="jcr/configuration/external-value-storages.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
- <xi:include href="jcr/configuration/workspace-persistence-storage.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
- <xi:include href="jcr/configuration/rest-services-on-groovy.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
-
- <!-- cluster configs -->
- <xi:include href="jcr/cluster-config.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
- <xi:include href="jcr/jbosscache-configuration-templates.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
- <xi:include href="jcr/lock-manager-config.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
- <xi:include href="jcr/query-handler-config.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
- <xi:include href="jcr/jbossts-transaction-service.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
- <xi:include href="jcr/transaction-manager-lookup.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
- <xi:include href="jcr/repository-creation-service.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
- <!-- search -->
- <xi:include href="jcr/searching/jcr-query-usecases.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
- <xi:include href="jcr/searching/searching-repository-content.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
- <xi:include href="jcr/searching/fulltext-search-and-settings.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
-
- <!-- api extensions -->
- <xi:include href="jcr/api-extensions.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
-
- <!-- protocols -->
- <xi:include href="jcr/protocols/webdav.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
- <xi:include href="jcr/protocols/ftp.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
-
- <!-- backup -->
- <xi:include href="jcr/backup/exojcr-backup-service.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
- <xi:include href="jcr/backup/backup-client.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
- <xi:include href="jcr/backup/use-external-backup-tool.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
-
- <!-- other -->
- <xi:include href="jcr/statistics.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
- <xi:include href="jcr/repository-check-controller.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
- <xi:include href="jcr/jta.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
- <xi:include href="jcr/jca.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
- <xi:include href="jcr/other/acl.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
- <xi:include href="jcr/other/acl-ext.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
- <xi:include href="jcr/other/link-producer.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
- <xi:include href="jcr/other/binary-values-processing.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
- <xi:include href="jcr/other/jcr-resources.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
-
- <!-- data container configs -->
- <xi:include href="jcr/data-container.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
- <!-- <xi:include href="jcr/data-container-howto.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> -->
- <xi:include href="jcr/db-cleaner-service.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
-
- <!-- tuning guide
- DOC NOTE: Could possibly be moved to a specific Tuning Guide later -->
- <xi:include href="jcr/performance-tuning-guide.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
-</section>
-
-
Modified: epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR.xml
===================================================================
--- epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR.xml 2011-11-16 02:48:49 UTC (rev 8078)
+++ epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/Advanced/eXoJCR.xml 2011-11-16 04:52:13 UTC (rev 8079)
@@ -4,9 +4,83 @@
%BOOK_ENTITIES;
]>
<chapter id="chap-Reference_Guide_eXo_JCR_1.14-eXo_JCR">
- <title><remark>eXo JCR</remark>
- </title>
- <xi:include href="eXoJCR/jcr.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <title>eXo JCR</title>
+ <!--<xi:include href="eXoJCR/eXoJCR/jcr.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />-->
+ <xi:include href="eXoJCR/jcr/intro.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+ <!-- concepts -->
+ <!-- <xi:include href="eXoJCR/jcr/concepts/why-jcr.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> -->
+ <xi:include href="eXoJCR/jcr/concepts/jcr-exo-implementation.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="eXoJCR/jcr/concepts/jcr-advantages.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="eXoJCR/jcr/concepts/jcr-compatibility-levels.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="eXoJCR/jcr/concepts/jcr-usage.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+ <!-- <xi:include href="eXoJCR/jcr/concepts/jcr-extensions.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> -->
+ <xi:include href="eXoJCR/jcr/concepts/jcr-applications.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="eXoJCR/jcr/concepts/nodetypes-and-namespaces.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="eXoJCR/jcr/concepts/nodetype-registration.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="eXoJCR/jcr/concepts/jcr-registry-service.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="eXoJCR/jcr/concepts/jcr-namespace-altering.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+ <!-- common configs -->
+ <xi:include href="eXoJCR/jcr/configuration/exo-jcr-configuration.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="eXoJCR/jcr/configuration/multilanguage-support.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="eXoJCR/jcr/configuration/search-configuration.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="eXoJCR/jcr/configuration/configuration-persister.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="eXoJCR/jcr/configuration/jdbc-data-container-config.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="eXoJCR/jcr/configuration/external-value-storages.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="eXoJCR/jcr/configuration/workspace-persistence-storage.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="eXoJCR/jcr/configuration/rest-services-on-groovy.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+ <!-- cluster configs -->
+ <xi:include href="eXoJCR/jcr/cluster-config.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="eXoJCR/jcr/jbosscache-configuration-templates.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="eXoJCR/jcr/lock-manager-config.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="eXoJCR/jcr/query-handler-config.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="eXoJCR/jcr/jbossts-transaction-service.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="eXoJCR/jcr/transaction-manager-lookup.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="eXoJCR/jcr/repository-creation-service.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <!-- search -->
+ <xi:include href="eXoJCR/jcr/searching/jcr-query-usecases.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="eXoJCR/jcr/searching/searching-repository-content.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="eXoJCR/jcr/searching/fulltext-search-and-settings.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+ <!-- api extensions -->
+ <xi:include href="eXoJCR/jcr/api-extensions.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+ <!-- protocols -->
+ <xi:include href="eXoJCR/jcr/protocols/webdav.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="eXoJCR/jcr/protocols/ftp.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+ <!-- backup -->
+ <xi:include href="eXoJCR/jcr/backup/exojcr-backup-service.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="eXoJCR/jcr/backup/backup-client.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="eXoJCR/jcr/backup/use-external-backup-tool.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+ <!-- other -->
+ <xi:include href="eXoJCR/jcr/statistics.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="eXoJCR/jcr/repository-check-controller.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="eXoJCR/jcr/jta.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="eXoJCR/jcr/jca.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="eXoJCR/jcr/other/acl.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="eXoJCR/jcr/other/acl-ext.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="eXoJCR/jcr/other/link-producer.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="eXoJCR/jcr/other/binary-values-processing.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="eXoJCR/jcr/other/jcr-resources.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+ <!-- data container configs -->
+ <xi:include href="eXoJCR/jcr/data-container.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <!-- <xi:include href="eXoJCR/jcr/data-container-howto.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> -->
+ <xi:include href="eXoJCR/jcr/db-cleaner-service.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+ <!-- tuning guide
+ DOC NOTE: Could possibly be moved to a specific Tuning Guide later -->
+ <xi:include href="eXoJCR/jcr/performance-tuning-guide.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+
+ <!--#####################################################################################-->
+
+
<xi:include href="eXoJCR/core.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="eXoJCR/ws.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="eXoJCR/jcr-with-gatein.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
Modified: epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/AuthenticationAndIdentity/SSO.xml
===================================================================
--- epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/AuthenticationAndIdentity/SSO.xml 2011-11-16 02:48:49 UTC (rev 8078)
+++ epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/AuthenticationAndIdentity/SSO.xml 2011-11-16 04:52:13 UTC (rev 8079)
@@ -4,7 +4,7 @@
%BOOK_ENTITIES;
]>
<section id="sect-Reference_Guide_eXo_JCR_1.14-SSO_Single_Sign_On">
- <title><remark>SSO - Single Sign On</remark></title>
+ <title>SSO - Single Sign On</title>
<section id="sect-Reference_Guide_eXo_JCR_1.14-SSO_Single_Sign_On-Overview">
<title>Overview</title>
Modified: epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/PortletDevelopment/Global_Portlet.xml
===================================================================
--- epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/PortletDevelopment/Global_Portlet.xml 2011-11-16 02:48:49 UTC (rev 8078)
+++ epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/en-US/modules/PortletDevelopment/Global_Portlet.xml 2011-11-16 04:52:13 UTC (rev 8079)
@@ -4,7 +4,7 @@
%BOOK_ENTITIES;
]>
<chapter id="chap-Reference_Guide_eXo_JCR_1.14-Shared_portlet.xml">
- <title><remark>Shared <filename>portlet.xml</filename></remark></title>
+ <title>Shared <filename>portlet.xml</filename></title>
<para>
The Java Portlet Specification introduces <literal>PortletFilter</literal> as a standard approach to extend the behaviors of portlet objects. For example, a filter can transform the content of portlet requests and portlet responses.
@@ -91,15 +91,15 @@
With the XML configuration below, the filter <literal>ApplicationMonitoringFilter</literal> involves in request handling on any deployed portlet.
</para>
-<programlisting role="XML" language="XML"><![CDATA[<filter>
-<filter-name>org.exoplatform.portal.application.ApplicationMonitoringFilter</filter-name>
-<filter-class>org.exoplatform.portal.application.ApplicationMonitoringFilter</filter-class>
- <lifecycle>ACTION_PHASE</lifecycle>
- <lifecycle>RENDER_PHASE</lifecycle>
- <lifecycle>EVENT_PHASE</lifecycle>
- <lifecycle>RESOURCE_PHASE</lifecycle>
-</filter>
-]]></programlisting>
+<programlisting role="XML" language="XML"><![CDATA[<filter>
+<filter-name>org.exoplatform.portal.application.ApplicationMonitoringFilter</filter-name>
+<filter-class>org.exoplatform.portal.application.ApplicationMonitoringFilter</filter-class>
+ <lifecycle>ACTION_PHASE</lifecycle>
+ <lifecycle>RENDER_PHASE</lifecycle>
+ <lifecycle>EVENT_PHASE</lifecycle>
+ <lifecycle>RESOURCE_PHASE</lifecycle>
+</filter>
+]]></programlisting>
<para>
<emphasis role="bold">Application Monitoring Filter</emphasis> supports four lifecycle phases in the order below:
</para>
Modified: epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/publican.cfg
===================================================================
--- epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/publican.cfg 2011-11-16 02:48:49 UTC (rev 8078)
+++ epp/docs/branches/5.2/Reference_Guide-eXoJCR-1.14/publican.cfg 2011-11-16 04:52:13 UTC (rev 8079)
@@ -3,7 +3,7 @@
cvs_root: ":ext:cvs.devel.redhat.com:/cvs/dist"
cvs_branch: "DOCS-RHEL-6"
-show_remarks: 1
+#show_remarks: 1
cvs_pkg: "JBoss_Enterprise_Portal_Platform-Reference_Guide_eXo_JCR_1.14-5.2-web-__LANG__"
xml_lang: "en-US"
brand: JBoss
13 years, 1 month
gatein SVN: r8078 - epp/docs/branches/5.2/Admin_Guide/en-US.
by do-not-reply@jboss.org
Author: smumford
Date: 2011-11-15 21:48:49 -0500 (Tue, 15 Nov 2011)
New Revision: 8078
Modified:
epp/docs/branches/5.2/Admin_Guide/en-US/chapter-1-Introduction.xml
epp/docs/branches/5.2/Admin_Guide/en-US/chapter-2-REST.xml
epp/docs/branches/5.2/Admin_Guide/en-US/chapter-3-Command_Line_Interface.xml
epp/docs/branches/5.2/Admin_Guide/en-US/chapter-4-Management_Extensions.xml
Log:
Fixed errors encountered in Confluence export
Modified: epp/docs/branches/5.2/Admin_Guide/en-US/chapter-1-Introduction.xml
===================================================================
--- epp/docs/branches/5.2/Admin_Guide/en-US/chapter-1-Introduction.xml 2011-11-15 23:23:49 UTC (rev 8077)
+++ epp/docs/branches/5.2/Admin_Guide/en-US/chapter-1-Introduction.xml 2011-11-16 02:48:49 UTC (rev 8078)
@@ -154,7 +154,7 @@
</entry>
<entry>
<para>
- The read-resource operation is responsible for reading the managed resource; describing itself and listing any operations and/or sub-resources it may contain.
+ The read-resource operation is responsible for reading the managed resource; describing itself and listing any operations and/or sub-resources it may contain.
This is the primary operation to obtain information about a managed component and it's managed resources.
</para>
Modified: epp/docs/branches/5.2/Admin_Guide/en-US/chapter-2-REST.xml
===================================================================
--- epp/docs/branches/5.2/Admin_Guide/en-US/chapter-2-REST.xml 2011-11-15 23:23:49 UTC (rev 8077)
+++ epp/docs/branches/5.2/Admin_Guide/en-US/chapter-2-REST.xml 2011-11-16 02:48:49 UTC (rev 8078)
@@ -10,7 +10,7 @@
<para>To gain access to management resources and operations over REST a RESTful client must know the entry point URL, which is defined as follows:</para>
<example>
<title>URL Syntax</title>
- <programlisting>http(s)://&lt;host&gt;:&lt;port&gt;/&lt;rest-context-name&gt;/private/managed-components</programlisting>
+ <programlisting>http(s)://<host>:<port>/<rest-context-name>/private/managed-components</programlisting>
</example>
<para>Where the rest-context-name is the portal container's rest context name. So for the default portal, the rest context name is 'rest', and for a portal running on localhost and port 8080 the URL would be</para>
<example>
@@ -28,7 +28,7 @@
<para>REST resource URLs are mapped to management addresses, and since every managed resource has a unique management address, every managed resource can be represented by a unique REST URL. The URL for identifying managed resources is as follows:</para>
<example>
<title>URL Syntax</title>
- <programlisting>http://&lt;host&gt;:&lt;port&gt;/&lt;rest-context-name&gt;/private/managed-components/&lt;component-name&gt;/&lt;managed-resource-name&gt;/&lt;sub-resource-name&gt;/.../&lt;sub-resource-name&gt;</programlisting>
+ <programlisting>http://<host>:<port>/<rest-context-name>/private/managed-components/<component-name>/<managed-resource-name>/<sub-resource-name>/.../<sub-resource-name></programlisting>
</example>
<para>The URL below uniquely identifies a managed resource named 'foo-bar', which is a sub-resource of 'bar', and 'bar' being a managed resource of the managed component 'foo'.</para>
<example>
@@ -260,7 +260,7 @@
<para>Management attributes (which are part of a management request) are mapped by including all request parameters of the HTTP request as attributes. So if an operation supports certain attributes, query parameters can be added to the request URL to be used as attributes of the management request.</para>
<example>
<title>Attributes first-name and last-name as request parameters</title>
- <programlisting>http://localhost:8080/rest/private/managed-components/foo/bar?first-name=...</programlisting>
+ <programlisting><![CDATA[http://localhost:8080/rest/private/managed-components/foo/bar?first-name=john&last-name=doe]]></programlisting>
</example>
<section id="sid-8094332_GateInManagement-MultivalueAttributes">
@@ -268,7 +268,7 @@
<para>Management attributes can be multi-valued (meaning more then one value associated with an attribute). This is easy as HTTP query parameters can be multi-valued as well.</para>
<example>
<title>Multi-valued attribute colors as request parameters</title>
- <programlisting>http://localhost:8080/rest/private/managed-components/foo/bar?colors=red&...</programlisting>
+ <programlisting><![CDATA[http://localhost:8080/rest/private/managed-components/foo/bar?colors=red&colors=green&colors=blue]]></programlisting>
</example>
</section>
</section>
@@ -428,7 +428,7 @@
</section>
<section id="sid-8094332_GateInManagement-readresource">
- <title>resource</title>
+ <title>read-resource</title>
<para>
Since the
<code>read-resource</code>
@@ -478,24 +478,24 @@
<programlisting>HTTP/1.1 200 OK
Content-Type: application/xml
-&lt;?xml version="1.0" encoding="UTF-8" standalone="yes"?&gt;
-&lt;resource&gt;
- &lt;description&gt;Available operations and children (sub-resources).&lt;/description&gt;
- &lt;children&gt;
- &lt;child&gt;
- &lt;name&gt;foo&lt;/name&gt;
- &lt;description&gt;Some description&lt;/description&gt;
- &lt;link href="http://localhost:8080/rest/private/managed-components/foo" rel="child"/&gt;
- &lt;/child&gt;
- &lt;/children&gt;
- &lt;operations&gt;
- &lt;operation&gt;
- &lt;operation-name&gt;read-resource&lt;/operation-name&gt;
- &lt;operation-description&gt;Lists information about a managed resource, including available operations and children (sub-resources).&lt;/operation-description&gt;
- &lt;link href="http://localhost:8080/rest/private/managed-components" rel="self" type="application/xml" method="get"/&gt;
- &lt;/operation&gt;
- &lt;/operations&gt;
-&lt;/resource&gt;</programlisting>
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<resource>
+ <description>Available operations and children (sub-resources).</description>
+ <children>
+ <child>
+ <name>foo</name>
+ <description>Some description</description>
+ <link href="http://localhost:8080/rest/private/managed-components/foo" rel="child"/>
+ </child>
+ </children>
+ <operations>
+ <operation>
+ <operation-name>read-resource</operation-name>
+ <operation-description>Lists information about a managed resource, including available operations and children (sub-resources).</operation-description>
+ <link href="http://localhost:8080/rest/private/managed-components" rel="self" type="application/xml" method="get"/>
+ </operation>
+ </operations>
+</resource></programlisting>
</example>
</section>
</section>
Modified: epp/docs/branches/5.2/Admin_Guide/en-US/chapter-3-Command_Line_Interface.xml
===================================================================
--- epp/docs/branches/5.2/Admin_Guide/en-US/chapter-3-Command_Line_Interface.xml 2011-11-15 23:23:49 UTC (rev 8077)
+++ epp/docs/branches/5.2/Admin_Guide/en-US/chapter-3-Command_Line_Interface.xml 2011-11-16 02:48:49 UTC (rev 8078)
@@ -35,7 +35,7 @@
<para>After deploying the CLI web application you can connect to the CLI over SSH as follows</para>
<example>
<title>SSH Syntax</title>
- <programlisting>ssh -p &lt;port&gt; &lt;user&gt;@&lt;host&gt;</programlisting>
+ <programlisting>ssh -p <port> <user>@<host></programlisting>
</example>
<example>
<title>SSH Example</title>
@@ -144,8 +144,8 @@
<example>
<title>Executing operation read-config-as-xml on managed component foo</title>
<programlisting>[ /]% mgmt exec --operation read-config-as-xml --contentType xml /foo
-&lt;?xml version='1.0' encoding='UTF-8'?&gt;
-&lt;data&gt;...&lt;/data&gt;
+<?xml version='1.0' encoding='UTF-8'?>
+<data>...</data>
[ /]%</programlisting>
</example>
@@ -171,8 +171,8 @@
path
[ /]% cat /foo
-&lt;?xml version='1.0' encoding='UTF-8'?&gt;
-&lt;data&gt;...&lt;/data&gt;
+<?xml version='1.0' encoding='UTF-8'?>
+<data>...</data>
[ /]%</programlisting>
</example>
Modified: epp/docs/branches/5.2/Admin_Guide/en-US/chapter-4-Management_Extensions.xml
===================================================================
--- epp/docs/branches/5.2/Admin_Guide/en-US/chapter-4-Management_Extensions.xml 2011-11-15 23:23:49 UTC (rev 8077)
+++ epp/docs/branches/5.2/Admin_Guide/en-US/chapter-4-Management_Extensions.xml 2011-11-16 02:48:49 UTC (rev 8078)
@@ -19,7 +19,7 @@
<title>Operations</title>
<section id="sid-8094332_GateInManagement-readconfigasxml">
- <title>config-as-xml</title>
+ <title>read-config-as-xml</title>
<para>
The
<code>read-config-as-xml</code>
@@ -251,7 +251,7 @@
</example>
<section id="sid-8094332_GateInManagement-readconfigasxmlx">
- <title>config-as-xml</title>
+ <title>read-config-as-xml</title>
<para>Example of reading the site layout as xml for site classic.</para>
<example>
<title>HTTP Request</title>
@@ -266,13 +266,13 @@
<programlisting>HTTP/1.1 200 OK
Content-Type: application/xml
-&lt;portal-config&gt;
- &lt;portal-name&gt;classic&lt;/portal-name&gt;
- &lt;label&gt;Classic&lt;/label&gt;
- &lt;description&gt;GateIn default portal&lt;/description&gt;
- &lt;locale&gt;en&lt;/locale&gt;
+<portal-config>
+ <portal-name>classic</portal-name>
+ <label>Classic</label>
+ <description>GateIn default portal</description>
+ <locale>en</locale>
...
-&lt;/portal-config&gt;</programlisting>
+</portal-config></programlisting>
</example>
</section>
<section id="sid-8094332_GateInManagement-exportresourcex">
@@ -321,16 +321,16 @@
<programlisting>HTTP/1.1 200 OK
Content-Type: application/xml
-&lt;page-set&gt;
- &lt;page&gt;
- &lt;name&gt;homepage&lt;/name&gt;
- &lt;title&gt;Home Page&lt;/title&gt;
- &lt;access-permissions&gt;Everyone&lt;/access-permissions&gt;
- &lt;edit-permission&gt;*:/platform/administrators&lt;/edit-permission&gt;
- &lt;show-max-window&gt;false&lt;/show-max-window&gt;
- &lt;portlet-application&gt;
+<page-set>
+ <page>
+ <name>homepage</name>
+ <title>Home Page</title>
+ <access-permissions>Everyone</access-permissions>
+ <edit-permission>*:/platform/administrators</edit-permission>
+ <show-max-window>false</show-max-window>
+ <portlet-application>
...
-&lt;/page-set&gt;</programlisting>
+</page-set></programlisting>
</example>
<para>Example of reading the homepage as xml for site classic.</para>
<example>
@@ -346,16 +346,16 @@
<programlisting>HTTP/1.1 200 OK
Content-Type: application/xml
-&lt;page-set&gt;
- &lt;page&gt;
- &lt;name&gt;homepage&lt;/name&gt;
- &lt;title&gt;Home Page&lt;/title&gt;
- &lt;access-permissions&gt;Everyone&lt;/access-permissions&gt;
- &lt;edit-permission&gt;*:/platform/administrators&lt;/edit-permission&gt;
- &lt;show-max-window&gt;false&lt;/show-max-window&gt;
- &lt;portlet-application&gt;
+<page-set>
+ <page>
+ <name>homepage</name>
+ <title>Home Page</title>
+ <access-permissions>Everyone</access-permissions>
+ <edit-permission>*:/platform/administrators</edit-permission>
+ <show-max-window>false</show-max-window>
+ <portlet-application>
...
-&lt;/page-set&gt;</programlisting>
+</page-set></programlisting>
</example>
</section>
<section id="sid-8094332_GateInManagement-exportresourcexx">
@@ -385,11 +385,12 @@
<para>The navigation resource represents the navigation of the portal. It's the data defined in the navigation.xml used in portal extensions to configure data.</para>
<example>
<title>URL</title>
- <programlisting>URL: /mop/{site-type}sites/{site-name}/navigation/{nav-uri}</programlisting>
+ <programlisting><![CDATA[
+ URL: /mop/{site-type}sites/{site-name}/navigation/{nav-uri}]]></programlisting>
</example>
<section id="sid-8094332_GateInManagement-readconfigasxmlxxx">
- <title>config-as-xml</title>
+ <title>read-config-as-xml</title>
<para>Example of reading all navigation as xml for site classic.</para>
<example>
<title>HTTP Request</title>
@@ -404,20 +405,20 @@
<programlisting>HTTP/1.1 200 OK
Content-Type: application/xml
-&lt;node-navigation&gt;
- &lt;priority&gt;1&lt;/priority&gt;
- &lt;page-nodes&gt;
- &lt;node&gt;
- &lt;name&gt;home&lt;/name&gt;
- &lt;label xml:lang="en"&gt;Home&lt;/label&gt;
+<node-navigation>
+ <priority>1</priority>
+ <page-nodes>
+ <node>
+ <name>home</name>
+ <label xml:lang="en">Home</label>
...
- &lt;visibility&gt;DISPLAYED&lt;/visibility&gt;
- &lt;page-reference&gt;portal::classic::homepage&lt;/page-reference&gt;
- &lt;/node&gt;
- &lt;node&gt;
- &lt;name&gt;sitemap&lt;/name&gt;
+ <visibility>DISPLAYED</visibility>
+ <page-reference>portal::classic::homepage</page-reference>
+ </node>
+ <node>
+ <name>sitemap</name>
...
-&lt;/node-navigation&gt;</programlisting>
+</node-navigation></programlisting>
</example>
<para>Example of reading the home node as xml for site classic.</para>
<example>
@@ -433,19 +434,19 @@
<programlisting>HTTP/1.1 200 OK
Content-Type: application/xml
-&lt;node-navigation&gt;
- &lt;priority&gt;1&lt;/priority&gt;
- &lt;page-nodes&gt;
- &lt;parent-uri&gt;&lt;/parent-uri&gt;
- &lt;node&gt;
- &lt;name&gt;home&lt;/name&gt;
- &lt;label xml:lang="en"&gt;Home&lt;/label&gt;
+<node-navigation>
+ <priority>1</priority>
+ <page-nodes>
+ <parent-uri></parent-uri>
+ <node>
+ <name>home</name>
+ <label xml:lang="en">Home</label>
...
- &lt;visibility&gt;DISPLAYED&lt;/visibility&gt;
- &lt;page-reference&gt;portal::classic::homepage&lt;/page-reference&gt;
- &lt;/node&gt;
- &lt;/page-nodes&gt;
-&lt;/node-navigation&gt;</programlisting>
+ <visibility>DISPLAYED</visibility>
+ <page-reference>portal::classic::homepage</page-reference>
+ </node>
+ </page-nodes>
+</node-navigation></programlisting>
</example>
</section>
<section id="sid-8094332_GateInManagement-exportresource_Example">
13 years, 1 month
gatein SVN: r8077 - in epp/portal/branches/EPP_5_2_Branch: web/portal/src/main/webapp/WEB-INF and 1 other directory.
by do-not-reply@jboss.org
Author: mposolda
Date: 2011-11-15 18:23:49 -0500 (Tue, 15 Nov 2011)
New Revision: 8077
Added:
epp/portal/branches/EPP_5_2_Branch/component/web/security/src/main/java/org/exoplatform/web/login/PortalClusteredSSOSupportValve.java
epp/portal/branches/EPP_5_2_Branch/web/portal/src/main/webapp/WEB-INF/context.xml
Removed:
epp/portal/branches/EPP_5_2_Branch/component/web/security/src/main/java/org/exoplatform/web/login/JBossClusteredSSOValveFilter.java
Modified:
epp/portal/branches/EPP_5_2_Branch/web/portal/src/main/webapp/WEB-INF/web.xml
Log:
JBEPP-1361 Cleaner approach with using valve instead of filter
Deleted: epp/portal/branches/EPP_5_2_Branch/component/web/security/src/main/java/org/exoplatform/web/login/JBossClusteredSSOValveFilter.java
===================================================================
--- epp/portal/branches/EPP_5_2_Branch/component/web/security/src/main/java/org/exoplatform/web/login/JBossClusteredSSOValveFilter.java 2011-11-15 23:21:03 UTC (rev 8076)
+++ epp/portal/branches/EPP_5_2_Branch/component/web/security/src/main/java/org/exoplatform/web/login/JBossClusteredSSOValveFilter.java 2011-11-15 23:23:49 UTC (rev 8077)
@@ -1,284 +0,0 @@
-/*
- * JBoss, a division of Red Hat
- * Copyright 2011, Red Hat Middleware, LLC, and individual
- * contributors as indicated by the @authors tag. See the
- * copyright.txt in the distribution for a full listing of
- * individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-
-package org.exoplatform.web.login;
-
-import org.apache.catalina.Container;
-import org.apache.catalina.Pipeline;
-import org.apache.catalina.Session;
-import org.apache.catalina.Valve;
-import org.apache.catalina.Wrapper;
-import org.apache.catalina.authenticator.Constants;
-import org.apache.catalina.authenticator.SingleSignOn;
-import org.apache.catalina.connector.Request;
-import org.exoplatform.container.ExoContainer;
-import org.exoplatform.container.web.AbstractFilter;
-import org.gatein.common.logging.Logger;
-import org.gatein.common.logging.LoggerFactory;
-import org.gatein.wci.security.Credentials;
-
-import javax.servlet.FilterChain;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import java.io.IOException;
-import java.lang.reflect.Field;
-
-/**
- * Helper filter for JBoss clustered SSO Valve. Valve requires reauthentication of user with same password on all cluster nodes.
- * So we need to use real password of user instead of wci ticket for updating SSO valve, which ensure that user will be reauthenticated
- * on second cluster node by SSO valve with his real password.
- *
- * @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
- */
-public class JBossClusteredSSOValveFilter extends AbstractFilter
-{
- // Name of session note where credentials will be stored. Credentials are removed after update of SSO valve
- private static final String NOTE_CREDENTIALS = "org.exoplatform.web.login.JBossClusteredSSOValveFilter.NOTE_CREDENTIALS";
-
- // Logger
- private static final Logger log = LoggerFactory.getLogger(JBossClusteredSSOValveFilter.class);
-
- // JBoss clustered SSO valve
- private SingleSignOn ssoValve = null;
-
- // Whether attempt to find sso valve has been already performed
- private boolean ssoValveAttempted = false;
-
- // Helper enum, which is used to obtain instance of catalina request
- private FilterStateEnum filterState = FilterStateEnum.BEFORE_INIT;
-
- @Override
- public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
- {
- SingleSignOn ssoValve = getSSOValve();
-
- // Simply continue with filter chain if jboss sso valve not present. Otherwise process it.
- if (ssoValve != null)
- {
- // Get Catalina request (accessible only on JBoss)
- Request tomcatRequest = getCurrentCatalinaRequest();
-
- if (tomcatRequest != null)
- {
- Session tomcatSession = tomcatRequest.getSessionInternal();
-
- // This means that request is going to PortalLoginController to start Login request
- if ("/login".equals(tomcatRequest.getServletPath()) && tomcatRequest.getNote(Constants.REQ_SSOID_NOTE) == null)
- {
- chain.doFilter(request, response);
-
- // Now credentials are in session and we can save them as note (notes are not replicated)
- Credentials credentials = (Credentials) tomcatSession.getSession().getAttribute(Credentials.CREDENTIALS);
- if (log.isDebugEnabled())
- {
- log.debug("Saving credentials " + credentials + " into session note for SSO valve.");
- }
- tomcatSession.setNote(NOTE_CREDENTIALS, credentials);
-
- return;
- }
- else if (tomcatSession.getNote(NOTE_CREDENTIALS) != null && tomcatRequest.getRemoteUser() != null)
- {
- // We are just logged. SSO valve needs to be updated with "real" password of user instead of wci ticket.
- Credentials credentials = (Credentials) tomcatSession.getNote(NOTE_CREDENTIALS);
- tomcatSession.removeNote(NOTE_CREDENTIALS);
-
- if (credentials != null)
- {
- String ssoId = (String) tomcatRequest.getNote(Constants.REQ_SSOID_NOTE);
- if (log.isDebugEnabled())
- {
- log.debug("Update SSO valve values with real credentials of user " + credentials.getUsername());
- }
- ssoValve.register(
- ssoId,
- tomcatSession.getPrincipal(),
- tomcatRequest.getAuthType(),
- credentials.getUsername(),
- credentials.getPassword());
- }
- }
- }
- }
-
- // Continue with filter chain
- chain.doFilter(request, response);
- }
-
- @Override
- public void destroy()
- {
- this.ssoValve = null;
- }
-
- // ------------------------------------------------------ Private helper methods
-
- private SingleSignOn getSSOValve()
- {
-
- // Return ssoValve if some client already tried to find it
- if (ssoValveAttempted)
- {
- return ssoValve;
- }
-
- // Find ssoValve
- findSSOValve();
-
- return ssoValve;
- }
-
- private synchronized void findSSOValve()
- {
- // This means that another client already tried to find sso valve
- if (ssoValveAttempted)
- {
- return;
- }
-
- // We need to have "cluster" profile active, and we need to be on JBoss. Otherwise SSO valve can't be used
- if (!ExoContainer.getProfiles().contains("cluster"))
- {
- }
- else if (getCurrentCatalinaRequest() == null)
- {
- }
- else
- {
- // Let's try to find SSOValve with JBossWeb api
- Request req = getCurrentCatalinaRequest();
-
- Wrapper wrapper = req.getWrapper();
- Container parent = wrapper.getParent();
-
- while ((ssoValve == null) && (parent != null))
- {
- if (!(parent instanceof Pipeline))
- {
- parent = parent.getParent();
- continue;
- }
- Valve valves[] = ((Pipeline) parent).getValves();
- for (int i = 0; i < valves.length; i++)
- {
- if (valves[i] instanceof SingleSignOn)
- {
- ssoValve = (SingleSignOn) valves[i];
- break;
- }
- }
- if (ssoValve == null)
- {
- parent = parent.getParent();
- }
- }
- }
-
- // Mark that finding has been performed
- this.ssoValveAttempted = true;
-
- if (ssoValve != null)
- {
- log.info("Found JBoss ClusteredSingleSignOn Valve at " + ssoValve);
- }
- else
- {
- log.info("No JBoss ClusteredSingleSignOn Valve is present");
- }
- }
-
- // Obtain correct instance of catalina Request. Current request is bound to ThreadLocal field, but class is different in JBoss 5 and JBoss 6.
- private Request getCurrentCatalinaRequest()
- {
- if (filterState == FilterStateEnum.SECURITY_ASSOC_VALVE)
- {
- return getCurrentTomcatRequestFromValve("org.jboss.web.tomcat.security.SecurityAssociationValve");
- }
- else if (filterState == FilterStateEnum.ACTIVE_REQUEST_VALVE)
- {
- return getCurrentTomcatRequestFromValve("org.jboss.web.tomcat.service.request.ActiveRequestResponseCacheValve");
- }
- else if (filterState == FilterStateEnum.NOT_JBOSS)
- {
- return null;
- }
- else
- {
- // We need to find correct valve and obtain catalina request from it
- Request req = getCurrentTomcatRequestFromValve("org.jboss.web.tomcat.security.SecurityAssociationValve");
- if (req != null)
- {
- filterState = FilterStateEnum.SECURITY_ASSOC_VALVE;
- }
- else
- {
- req = getCurrentTomcatRequestFromValve("org.jboss.web.tomcat.service.request.ActiveRequestResponseCacheValve");
- if (req != null)
- {
- filterState = FilterStateEnum.ACTIVE_REQUEST_VALVE;
- }
- else
- {
- filterState = FilterStateEnum.NOT_JBOSS;
- }
- }
-
- return req;
- }
- }
-
- private Request getCurrentTomcatRequestFromValve(String valveClassName)
- {
- try
- {
- Class<?> securityAssociationValve = Thread.currentThread().getContextClassLoader().loadClass(valveClassName);
- Field activeRequest = securityAssociationValve.getDeclaredField("activeRequest");
- ThreadLocal<Request> threadLocal = (ThreadLocal<Request>) activeRequest.get(null);
- Request req = threadLocal.get();
- if (log.isTraceEnabled())
- {
- log.trace("Current catalina Request obtained from " + valveClassName);
- }
- return req;
- }
- catch (Exception e)
- {
- log.debug("Can't obtain current catalina Request from " + valveClassName);
- return null;
- }
- }
-
- private enum FilterStateEnum
- {
- // We didn't try to obtain any catalina Request
- BEFORE_INIT,
- // We are not on JBoss
- NOT_JBOSS,
- // We are on JBoss 5.1 or earlier (Current catalina request can be obtained from SecurityAssociationValve threadlocal field)
- SECURITY_ASSOC_VALVE,
- // We are on JBoss 6 or EPP 5.1.1 (Current catalina request can be obtained from ActiveRequestResponseValve threadlocal field)
- ACTIVE_REQUEST_VALVE
- }
-
-}
Added: epp/portal/branches/EPP_5_2_Branch/component/web/security/src/main/java/org/exoplatform/web/login/PortalClusteredSSOSupportValve.java
===================================================================
--- epp/portal/branches/EPP_5_2_Branch/component/web/security/src/main/java/org/exoplatform/web/login/PortalClusteredSSOSupportValve.java (rev 0)
+++ epp/portal/branches/EPP_5_2_Branch/component/web/security/src/main/java/org/exoplatform/web/login/PortalClusteredSSOSupportValve.java 2011-11-15 23:23:49 UTC (rev 8077)
@@ -0,0 +1,163 @@
+/*
+ * JBoss, a division of Red Hat
+ * Copyright 2011, Red Hat Middleware, LLC, and individual
+ * contributors as indicated by the @authors tag. See the
+ * copyright.txt in the distribution for a full listing of
+ * individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.exoplatform.web.login;
+
+import org.apache.catalina.Container;
+import org.apache.catalina.Context;
+import org.apache.catalina.Pipeline;
+import org.apache.catalina.Session;
+import org.apache.catalina.Valve;
+import org.apache.catalina.authenticator.Constants;
+import org.apache.catalina.connector.Request;
+import org.apache.catalina.connector.Response;
+import org.apache.catalina.valves.ValveBase;
+import org.exoplatform.container.ExoContainer;
+import org.gatein.common.logging.Logger;
+import org.gatein.common.logging.LoggerFactory;
+import org.jboss.web.tomcat.service.sso.ClusteredSingleSignOn;
+
+import javax.servlet.ServletException;
+import java.io.IOException;
+
+/**
+ * Helper valve for supporting JBoss clustered SSO Valve. Clustered SSO Valve requires reauthentication of user with same password on
+ * all cluster nodes. So we need to use real password of user instead of wci ticket for updating SSO valve, which ensure that user
+ * will be reauthenticated on second cluster node by SSO valve with his real password.
+ *
+ * @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
+ */
+public class PortalClusteredSSOSupportValve extends ValveBase
+{
+
+ // Name of session note where credentials will be stored. Credentials are removed after update of SSO valve
+ private static final String NOTE_CREDENTIALS = "org.exoplatform.web.login.PortalClusteredSSOSupportValve.NOTE_CREDENTIALS";
+
+ // Logger
+ private static final Logger log = LoggerFactory.getLogger(PortalClusteredSSOSupportValve.class);
+
+ // JBoss clustered SSO valve
+ private ClusteredSingleSignOn ssoValve = null;
+
+ // The Context to which this Valve is attached.
+ private Context context = null;
+
+
+ @Override
+ public void setContainer(Container container)
+ {
+ if (!(container instanceof Context))
+ {
+ throw new IllegalArgumentException(sm.getString("authenticator.notContext"));
+ }
+ super.setContainer(container);
+ this.context = (Context) container;
+
+ findSSOValve();
+ }
+
+ @Override
+ public void invoke(Request request, Response response) throws IOException, ServletException
+ {
+ if (ssoValve != null)
+ {
+ Session tomcatSession = request.getSessionInternal();
+
+ // This means that request is going to PortalLoginController to start Login request
+ if ("/login".equals(request.getServletPath()) && request.getNote(Constants.REQ_SSOID_NOTE) == null)
+ {
+ String password = request.getParameter("password");
+ if (log.isDebugEnabled())
+ {
+ log.debug("Saving ccredentials into session note for SSO valve.");
+ }
+ tomcatSession.setNote(NOTE_CREDENTIALS, password);
+ }
+ else if (tomcatSession.getNote(NOTE_CREDENTIALS) != null && tomcatSession.getPrincipal() != null)
+ {
+ // We are just logged. SSO valve needs to be updated with "real" password of user instead of wci ticket.
+ String password = (String) tomcatSession.getNote(NOTE_CREDENTIALS);
+ tomcatSession.removeNote(NOTE_CREDENTIALS);
+ String ssoId = (String) request.getNote(Constants.REQ_SSOID_NOTE);
+
+ if (password != null && ssoId != null)
+ {
+ if (log.isDebugEnabled())
+ {
+ log.debug("Update SSO valve values with real credentials of user " + request.getRemoteUser());
+ }
+ ssoValve.register(
+ ssoId,
+ tomcatSession.getPrincipal(),
+ tomcatSession.getAuthType(),
+ request.getRemoteUser(),
+ password);
+ }
+ }
+ }
+
+ // Continue with HTTP request processing
+ getNext().invoke(request, response);
+ }
+
+ // finding sso valve
+ private void findSSOValve()
+ {
+ if (!ExoContainer.getProfiles().contains("cluster"))
+ {
+ return;
+ }
+
+ Container parent = context.getParent();
+ while ((ssoValve == null) && (parent != null))
+ {
+ if (!(parent instanceof Pipeline))
+ {
+ parent = parent.getParent();
+ continue;
+ }
+ Valve valves[] = ((Pipeline) parent).getValves();
+ for (Valve valve : ((Pipeline) parent).getValves())
+ {
+ if (valve instanceof ClusteredSingleSignOn)
+ {
+ ssoValve = (ClusteredSingleSignOn) valve;
+ break;
+ }
+ }
+ if (ssoValve == null)
+ {
+ parent = parent.getParent();
+ }
+ }
+
+ if (ssoValve != null)
+ {
+ log.info("Found JBoss ClusteredSingleSignOn Valve at " + ssoValve);
+ }
+ else
+ {
+ log.info("No JBoss ClusteredSingleSignOn Valve is present");
+ }
+ }
+}
Added: epp/portal/branches/EPP_5_2_Branch/web/portal/src/main/webapp/WEB-INF/context.xml
===================================================================
--- epp/portal/branches/EPP_5_2_Branch/web/portal/src/main/webapp/WEB-INF/context.xml (rev 0)
+++ epp/portal/branches/EPP_5_2_Branch/web/portal/src/main/webapp/WEB-INF/context.xml 2011-11-15 23:23:49 UTC (rev 8077)
@@ -0,0 +1,30 @@
+<!--
+ ~ JBoss, a division of Red Hat
+ ~ Copyright 2011, Red Hat Middleware, LLC, and individual
+ ~ contributors as indicated by the @authors tag. See the
+ ~ copyright.txt in the distribution for a full listing of
+ ~ individual contributors.
+ ~
+ ~ This is free software; you can redistribute it and/or modify it
+ ~ under the terms of the GNU Lesser General Public License as
+ ~ published by the Free Software Foundation; either version 2.1 of
+ ~ the License, or (at your option) any later version.
+ ~
+ ~ This software is distributed in the hope that it will be useful,
+ ~ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ ~ Lesser General Public License for more details.
+ ~
+ ~ You should have received a copy of the GNU Lesser General Public
+ ~ License along with this software; if not, write to the Free
+ ~ Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ ~ 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ -->
+
+<!-- This context file is specific to JBoss AS. Tomcat specific file is in META-INF/context.xml -->
+<Context>
+
+ <Valve className="org.exoplatform.web.login.PortalClusteredSSOSupportValve" />
+
+</Context>
+
Modified: epp/portal/branches/EPP_5_2_Branch/web/portal/src/main/webapp/WEB-INF/web.xml
===================================================================
--- epp/portal/branches/EPP_5_2_Branch/web/portal/src/main/webapp/WEB-INF/web.xml 2011-11-15 23:21:03 UTC (rev 8076)
+++ epp/portal/branches/EPP_5_2_Branch/web/portal/src/main/webapp/WEB-INF/web.xml 2011-11-15 23:23:49 UTC (rev 8077)
@@ -88,11 +88,6 @@
<filter-class>org.exoplatform.web.login.RememberMeFilter</filter-class>
</filter>
- <filter>
- <filter-name>JBossClusteredSSOValveFilter</filter-name>
- <filter-class>org.exoplatform.web.login.JBossClusteredSSOValveFilter</filter-class>
- </filter>
-
<filter>
<filter-name>ClusteredSSOFilter</filter-name>
<filter-class>org.exoplatform.web.login.ClusteredSSOFilter</filter-class>
@@ -130,11 +125,6 @@
</filter-mapping>
<filter-mapping>
- <filter-name>JBossClusteredSSOValveFilter</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
-
- <filter-mapping>
<filter-name>ClusteredSSOFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
13 years, 1 month
gatein SVN: r8076 - in portal/trunk: web/portal/src/main/webapp/WEB-INF and 1 other directory.
by do-not-reply@jboss.org
Author: mposolda
Date: 2011-11-15 18:21:03 -0500 (Tue, 15 Nov 2011)
New Revision: 8076
Added:
portal/trunk/component/web/security/src/main/java/org/exoplatform/web/login/PortalClusteredSSOSupportValve.java
portal/trunk/web/portal/src/main/webapp/WEB-INF/context.xml
Removed:
portal/trunk/component/web/security/src/main/java/org/exoplatform/web/login/JBossClusteredSSOValveFilter.java
Modified:
portal/trunk/web/portal/src/main/webapp/WEB-INF/web.xml
Log:
GTNPORTAL-2276 Using valve instead of filter, so that it's used only on JBoss and not on Tomcat or Jetty.
Deleted: portal/trunk/component/web/security/src/main/java/org/exoplatform/web/login/JBossClusteredSSOValveFilter.java
===================================================================
--- portal/trunk/component/web/security/src/main/java/org/exoplatform/web/login/JBossClusteredSSOValveFilter.java 2011-11-15 18:59:17 UTC (rev 8075)
+++ portal/trunk/component/web/security/src/main/java/org/exoplatform/web/login/JBossClusteredSSOValveFilter.java 2011-11-15 23:21:03 UTC (rev 8076)
@@ -1,284 +0,0 @@
-/*
- * JBoss, a division of Red Hat
- * Copyright 2011, Red Hat Middleware, LLC, and individual
- * contributors as indicated by the @authors tag. See the
- * copyright.txt in the distribution for a full listing of
- * individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-
-package org.exoplatform.web.login;
-
-import org.apache.catalina.Container;
-import org.apache.catalina.Pipeline;
-import org.apache.catalina.Session;
-import org.apache.catalina.Valve;
-import org.apache.catalina.Wrapper;
-import org.apache.catalina.authenticator.Constants;
-import org.apache.catalina.authenticator.SingleSignOn;
-import org.apache.catalina.connector.Request;
-import org.exoplatform.container.ExoContainer;
-import org.exoplatform.container.web.AbstractFilter;
-import org.gatein.common.logging.Logger;
-import org.gatein.common.logging.LoggerFactory;
-import org.gatein.wci.security.Credentials;
-
-import javax.servlet.FilterChain;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import java.io.IOException;
-import java.lang.reflect.Field;
-
-/**
- * Helper filter for JBoss clustered SSO Valve. Valve requires reauthentication of user with same password on all cluster nodes.
- * So we need to use real password of user instead of wci ticket for updating SSO valve, which ensure that user will be reauthenticated
- * on second cluster node by SSO valve with his real password.
- *
- * @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
- */
-public class JBossClusteredSSOValveFilter extends AbstractFilter
-{
- // Name of session note where credentials will be stored. Credentials are removed after update of SSO valve
- private static final String NOTE_CREDENTIALS = "org.exoplatform.web.login.JBossClusteredSSOValveFilter.NOTE_CREDENTIALS";
-
- // Logger
- private static final Logger log = LoggerFactory.getLogger(JBossClusteredSSOValveFilter.class);
-
- // JBoss clustered SSO valve
- private SingleSignOn ssoValve = null;
-
- // Whether attempt to find sso valve has been already performed
- private boolean ssoValveAttempted = false;
-
- // Helper enum, which is used to obtain instance of catalina request
- private FilterStateEnum filterState = FilterStateEnum.BEFORE_INIT;
-
- @Override
- public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
- {
- SingleSignOn ssoValve = getSSOValve();
-
- // Simply continue with filter chain if jboss sso valve not present. Otherwise process it.
- if (ssoValve != null)
- {
- // Get Catalina request (accessible only on JBoss)
- Request tomcatRequest = getCurrentCatalinaRequest();
-
- if (tomcatRequest != null)
- {
- Session tomcatSession = tomcatRequest.getSessionInternal();
-
- // This means that request is going to PortalLoginController to start Login request
- if ("/login".equals(tomcatRequest.getServletPath()) && tomcatRequest.getNote(Constants.REQ_SSOID_NOTE) == null)
- {
- chain.doFilter(request, response);
-
- // Now credentials are in session and we can save them as note (notes are not replicated)
- Credentials credentials = (Credentials) tomcatSession.getSession().getAttribute(Credentials.CREDENTIALS);
- if (log.isDebugEnabled())
- {
- log.debug("Saving credentials " + credentials + " into session note for SSO valve.");
- }
- tomcatSession.setNote(NOTE_CREDENTIALS, credentials);
-
- return;
- }
- else if (tomcatSession.getNote(NOTE_CREDENTIALS) != null && tomcatRequest.getRemoteUser() != null)
- {
- // We are just logged. SSO valve needs to be updated with "real" password of user instead of wci ticket.
- Credentials credentials = (Credentials) tomcatSession.getNote(NOTE_CREDENTIALS);
- tomcatSession.removeNote(NOTE_CREDENTIALS);
-
- if (credentials != null)
- {
- String ssoId = (String) tomcatRequest.getNote(Constants.REQ_SSOID_NOTE);
- if (log.isDebugEnabled())
- {
- log.debug("Update SSO valve values with real credentials of user " + credentials.getUsername());
- }
- ssoValve.register(
- ssoId,
- tomcatSession.getPrincipal(),
- tomcatRequest.getAuthType(),
- credentials.getUsername(),
- credentials.getPassword());
- }
- }
- }
- }
-
- // Continue with filter chain
- chain.doFilter(request, response);
- }
-
- @Override
- public void destroy()
- {
- this.ssoValve = null;
- }
-
- // ------------------------------------------------------ Private helper methods
-
- private SingleSignOn getSSOValve()
- {
-
- // Return ssoValve if some client already tried to find it
- if (ssoValveAttempted)
- {
- return ssoValve;
- }
-
- // Find ssoValve
- findSSOValve();
-
- return ssoValve;
- }
-
- private synchronized void findSSOValve()
- {
- // This means that another client already tried to find sso valve
- if (ssoValveAttempted)
- {
- return;
- }
-
- // We need to have "cluster" profile active, and we need to be on JBoss. Otherwise SSO valve can't be used
- if (!ExoContainer.getProfiles().contains("cluster"))
- {
- }
- else if (getCurrentCatalinaRequest() == null)
- {
- }
- else
- {
- // Let's try to find SSOValve with JBossWeb api
- Request req = getCurrentCatalinaRequest();
-
- Wrapper wrapper = req.getWrapper();
- Container parent = wrapper.getParent();
-
- while ((ssoValve == null) && (parent != null))
- {
- if (!(parent instanceof Pipeline))
- {
- parent = parent.getParent();
- continue;
- }
- Valve valves[] = ((Pipeline) parent).getValves();
- for (int i = 0; i < valves.length; i++)
- {
- if (valves[i] instanceof SingleSignOn)
- {
- ssoValve = (SingleSignOn) valves[i];
- break;
- }
- }
- if (ssoValve == null)
- {
- parent = parent.getParent();
- }
- }
- }
-
- // Mark that finding has been performed
- this.ssoValveAttempted = true;
-
- if (ssoValve != null)
- {
- log.info("Found JBoss ClusteredSingleSignOn Valve at " + ssoValve);
- }
- else
- {
- log.info("No JBoss ClusteredSingleSignOn Valve is present");
- }
- }
-
- // Obtain correct instance of catalina Request. Current request is bound to ThreadLocal field, but class is different in JBoss 5 and JBoss 6.
- private Request getCurrentCatalinaRequest()
- {
- if (filterState == FilterStateEnum.SECURITY_ASSOC_VALVE)
- {
- return getCurrentTomcatRequestFromValve("org.jboss.web.tomcat.security.SecurityAssociationValve");
- }
- else if (filterState == FilterStateEnum.ACTIVE_REQUEST_VALVE)
- {
- return getCurrentTomcatRequestFromValve("org.jboss.web.tomcat.service.request.ActiveRequestResponseCacheValve");
- }
- else if (filterState == FilterStateEnum.NOT_JBOSS)
- {
- return null;
- }
- else
- {
- // We need to find correct valve and obtain catalina request from it
- Request req = getCurrentTomcatRequestFromValve("org.jboss.web.tomcat.security.SecurityAssociationValve");
- if (req != null)
- {
- filterState = FilterStateEnum.SECURITY_ASSOC_VALVE;
- }
- else
- {
- req = getCurrentTomcatRequestFromValve("org.jboss.web.tomcat.service.request.ActiveRequestResponseCacheValve");
- if (req != null)
- {
- filterState = FilterStateEnum.ACTIVE_REQUEST_VALVE;
- }
- else
- {
- filterState = FilterStateEnum.NOT_JBOSS;
- }
- }
-
- return req;
- }
- }
-
- private Request getCurrentTomcatRequestFromValve(String valveClassName)
- {
- try
- {
- Class<?> securityAssociationValve = Thread.currentThread().getContextClassLoader().loadClass(valveClassName);
- Field activeRequest = securityAssociationValve.getDeclaredField("activeRequest");
- ThreadLocal<Request> threadLocal = (ThreadLocal<Request>) activeRequest.get(null);
- Request req = threadLocal.get();
- if (log.isTraceEnabled())
- {
- log.trace("Current catalina Request obtained from " + valveClassName);
- }
- return req;
- }
- catch (Exception e)
- {
- log.debug("Can't obtain current catalina Request from " + valveClassName);
- return null;
- }
- }
-
- private enum FilterStateEnum
- {
- // We didn't try to obtain any catalina Request
- BEFORE_INIT,
- // We are not on JBoss
- NOT_JBOSS,
- // We are on JBoss 5.1 or earlier (Current catalina request can be obtained from SecurityAssociationValve threadlocal field)
- SECURITY_ASSOC_VALVE,
- // We are on JBoss 6 or EPP 5.1.1 (Current catalina request can be obtained from ActiveRequestResponseValve threadlocal field)
- ACTIVE_REQUEST_VALVE
- }
-
-}
Added: portal/trunk/component/web/security/src/main/java/org/exoplatform/web/login/PortalClusteredSSOSupportValve.java
===================================================================
--- portal/trunk/component/web/security/src/main/java/org/exoplatform/web/login/PortalClusteredSSOSupportValve.java (rev 0)
+++ portal/trunk/component/web/security/src/main/java/org/exoplatform/web/login/PortalClusteredSSOSupportValve.java 2011-11-15 23:21:03 UTC (rev 8076)
@@ -0,0 +1,163 @@
+/*
+ * JBoss, a division of Red Hat
+ * Copyright 2011, Red Hat Middleware, LLC, and individual
+ * contributors as indicated by the @authors tag. See the
+ * copyright.txt in the distribution for a full listing of
+ * individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.exoplatform.web.login;
+
+import org.apache.catalina.Container;
+import org.apache.catalina.Context;
+import org.apache.catalina.Pipeline;
+import org.apache.catalina.Session;
+import org.apache.catalina.Valve;
+import org.apache.catalina.authenticator.Constants;
+import org.apache.catalina.connector.Request;
+import org.apache.catalina.connector.Response;
+import org.apache.catalina.valves.ValveBase;
+import org.exoplatform.container.ExoContainer;
+import org.gatein.common.logging.Logger;
+import org.gatein.common.logging.LoggerFactory;
+import org.jboss.web.tomcat.service.sso.ClusteredSingleSignOn;
+
+import javax.servlet.ServletException;
+import java.io.IOException;
+
+/**
+ * Helper valve for supporting JBoss clustered SSO Valve. Clustered SSO Valve requires reauthentication of user with same password on
+ * all cluster nodes. So we need to use real password of user instead of wci ticket for updating SSO valve, which ensure that user
+ * will be reauthenticated on second cluster node by SSO valve with his real password.
+ *
+ * @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
+ */
+public class PortalClusteredSSOSupportValve extends ValveBase
+{
+
+ // Name of session note where credentials will be stored. Credentials are removed after update of SSO valve
+ private static final String NOTE_CREDENTIALS = "org.exoplatform.web.login.PortalClusteredSSOSupportValve.NOTE_CREDENTIALS";
+
+ // Logger
+ private static final Logger log = LoggerFactory.getLogger(PortalClusteredSSOSupportValve.class);
+
+ // JBoss clustered SSO valve
+ private ClusteredSingleSignOn ssoValve = null;
+
+ // The Context to which this Valve is attached.
+ private Context context = null;
+
+
+ @Override
+ public void setContainer(Container container)
+ {
+ if (!(container instanceof Context))
+ {
+ throw new IllegalArgumentException(sm.getString("authenticator.notContext"));
+ }
+ super.setContainer(container);
+ this.context = (Context) container;
+
+ findSSOValve();
+ }
+
+ @Override
+ public void invoke(Request request, Response response) throws IOException, ServletException
+ {
+ if (ssoValve != null)
+ {
+ Session tomcatSession = request.getSessionInternal();
+
+ // This means that request is going to PortalLoginController to start Login request
+ if ("/login".equals(request.getServletPath()) && request.getNote(Constants.REQ_SSOID_NOTE) == null)
+ {
+ String password = request.getParameter("password");
+ if (log.isDebugEnabled())
+ {
+ log.debug("Saving ccredentials into session note for SSO valve.");
+ }
+ tomcatSession.setNote(NOTE_CREDENTIALS, password);
+ }
+ else if (tomcatSession.getNote(NOTE_CREDENTIALS) != null && tomcatSession.getPrincipal() != null)
+ {
+ // We are just logged. SSO valve needs to be updated with "real" password of user instead of wci ticket.
+ String password = (String) tomcatSession.getNote(NOTE_CREDENTIALS);
+ tomcatSession.removeNote(NOTE_CREDENTIALS);
+ String ssoId = (String) request.getNote(Constants.REQ_SSOID_NOTE);
+
+ if (password != null && ssoId != null)
+ {
+ if (log.isDebugEnabled())
+ {
+ log.debug("Update SSO valve values with real credentials of user " + request.getRemoteUser());
+ }
+ ssoValve.register(
+ ssoId,
+ tomcatSession.getPrincipal(),
+ tomcatSession.getAuthType(),
+ request.getRemoteUser(),
+ password);
+ }
+ }
+ }
+
+ // Continue with HTTP request processing
+ getNext().invoke(request, response);
+ }
+
+ // finding sso valve
+ private void findSSOValve()
+ {
+ if (!ExoContainer.getProfiles().contains("cluster"))
+ {
+ return;
+ }
+
+ Container parent = context.getParent();
+ while ((ssoValve == null) && (parent != null))
+ {
+ if (!(parent instanceof Pipeline))
+ {
+ parent = parent.getParent();
+ continue;
+ }
+ Valve valves[] = ((Pipeline) parent).getValves();
+ for (Valve valve : ((Pipeline) parent).getValves())
+ {
+ if (valve instanceof ClusteredSingleSignOn)
+ {
+ ssoValve = (ClusteredSingleSignOn) valve;
+ break;
+ }
+ }
+ if (ssoValve == null)
+ {
+ parent = parent.getParent();
+ }
+ }
+
+ if (ssoValve != null)
+ {
+ log.info("Found JBoss ClusteredSingleSignOn Valve at " + ssoValve);
+ }
+ else
+ {
+ log.info("No JBoss ClusteredSingleSignOn Valve is present");
+ }
+ }
+}
Added: portal/trunk/web/portal/src/main/webapp/WEB-INF/context.xml
===================================================================
--- portal/trunk/web/portal/src/main/webapp/WEB-INF/context.xml (rev 0)
+++ portal/trunk/web/portal/src/main/webapp/WEB-INF/context.xml 2011-11-15 23:21:03 UTC (rev 8076)
@@ -0,0 +1,29 @@
+<!--
+ ~ JBoss, a division of Red Hat
+ ~ Copyright 2011, Red Hat Middleware, LLC, and individual
+ ~ contributors as indicated by the @authors tag. See the
+ ~ copyright.txt in the distribution for a full listing of
+ ~ individual contributors.
+ ~
+ ~ This is free software; you can redistribute it and/or modify it
+ ~ under the terms of the GNU Lesser General Public License as
+ ~ published by the Free Software Foundation; either version 2.1 of
+ ~ the License, or (at your option) any later version.
+ ~
+ ~ This software is distributed in the hope that it will be useful,
+ ~ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ ~ Lesser General Public License for more details.
+ ~
+ ~ You should have received a copy of the GNU Lesser General Public
+ ~ License along with this software; if not, write to the Free
+ ~ Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ ~ 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ -->
+
+<!-- This context file is specific to JBoss AS. Tomcat specific file is in META-INF/context.xml -->
+<Context>
+
+ <Valve className="org.exoplatform.web.login.PortalClusteredSSOSupportValve" />
+
+</Context>
Modified: portal/trunk/web/portal/src/main/webapp/WEB-INF/web.xml
===================================================================
--- portal/trunk/web/portal/src/main/webapp/WEB-INF/web.xml 2011-11-15 18:59:17 UTC (rev 8075)
+++ portal/trunk/web/portal/src/main/webapp/WEB-INF/web.xml 2011-11-15 23:21:03 UTC (rev 8076)
@@ -88,11 +88,6 @@
<filter-class>org.exoplatform.web.login.RememberMeFilter</filter-class>
</filter>
- <filter>
- <filter-name>JBossClusteredSSOValveFilter</filter-name>
- <filter-class>org.exoplatform.web.login.JBossClusteredSSOValveFilter</filter-class>
- </filter>
-
<filter>
<filter-name>ClusteredSSOFilter</filter-name>
<filter-class>org.exoplatform.web.login.ClusteredSSOFilter</filter-class>
@@ -114,11 +109,6 @@
</filter-mapping>
<filter-mapping>
- <filter-name>JBossClusteredSSOValveFilter</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
-
- <filter-mapping>
<filter-name>ClusteredSSOFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
13 years, 1 month
gatein SVN: r8075 - epp/portal/branches/EPP_5_2_Branch/web/eXoResources/src/main/webapp/skin/DefaultSkin/portal/webui/component/view/UIToolbarContainer.
by do-not-reply@jboss.org
Author: mwringe
Date: 2011-11-15 13:59:17 -0500 (Tue, 15 Nov 2011)
New Revision: 8075
Modified:
epp/portal/branches/EPP_5_2_Branch/web/eXoResources/src/main/webapp/skin/DefaultSkin/portal/webui/component/view/UIToolbarContainer/Stylesheet.css
Log:
JBEPP-1258: tweak some of the css to fix some of the display issues in IE6.
Modified: epp/portal/branches/EPP_5_2_Branch/web/eXoResources/src/main/webapp/skin/DefaultSkin/portal/webui/component/view/UIToolbarContainer/Stylesheet.css
===================================================================
--- epp/portal/branches/EPP_5_2_Branch/web/eXoResources/src/main/webapp/skin/DefaultSkin/portal/webui/component/view/UIToolbarContainer/Stylesheet.css 2011-11-15 14:36:04 UTC (rev 8074)
+++ epp/portal/branches/EPP_5_2_Branch/web/eXoResources/src/main/webapp/skin/DefaultSkin/portal/webui/component/view/UIToolbarContainer/Stylesheet.css 2011-11-15 18:59:17 UTC (rev 8075)
@@ -1,5 +1,5 @@
-.UIToolbarContainer {
+.UIToolbarContainer {
padding: 0px;
height: auto;
position:relative;
@@ -9,13 +9,8 @@
padding:0;
margin:0;
list-style:none;
- _height: 32px;
-}
+}
-.UIToolbarContainer ul li a {
- _height: 0;
-}
-
.UIToolbarContainer .UserInfoPortletTDContainer {
float: right; /* orientation=lt */
float: left; /* orientation=rt */
@@ -73,7 +68,7 @@
}
.UIToolbarContainer .UIHorizontalTabs .UITab {
- line-height: 30px;
+ line-height: 30px;
background: url('background/ToolbarContainer.gif') no-repeat right -32px; /* orientation=lt */
background: url('background/ToolbarContainer-rt.gif') no-repeat left -32px; /* orientation=rt */
padding-right: 2px; /* orientation=lt */
@@ -111,7 +106,7 @@
position: absolute;
border: 1px solid #9e9fa3;
display: none;
- z-index: 1;
+ z-index: 1;
}
.UIToolbarContainer .MenuItemContainer li{
@@ -158,7 +153,9 @@
padding: 0px 25px 0px 35px; /* orientation=lt */
padding: 0px 35px 0px 25px; /* orientation=rt */
white-space: nowrap;
- color: #3e3e3e;
+ color: #3e3e3e;
+ display: block;
+*/ height: 28px; */
}
.UIToolbarContainer .ItemIcon {
@@ -237,8 +234,7 @@
padding: 0px 25px 0px 10px; /* orientation=rt */
color: #e66a1f; font-weight:bold; cursor:pointer;
display: block;
- line-height: 32px;
- float: right;
+ line-height: 32px;
}
.UIToolbarContainer .Name a:hover {
13 years, 1 month
gatein SVN: r8074 - in portal/trunk: web/portal/src/main/webapp/WEB-INF and 1 other directory.
by do-not-reply@jboss.org
Author: mposolda
Date: 2011-11-15 09:36:04 -0500 (Tue, 15 Nov 2011)
New Revision: 8074
Added:
portal/trunk/component/web/security/src/main/java/org/exoplatform/web/login/JBossClusteredSSOValveFilter.java
Modified:
portal/trunk/web/portal/src/main/webapp/WEB-INF/web.xml
Log:
GTNPORTAL-2276 JBoss SSO valve integration improvement
Added: portal/trunk/component/web/security/src/main/java/org/exoplatform/web/login/JBossClusteredSSOValveFilter.java
===================================================================
--- portal/trunk/component/web/security/src/main/java/org/exoplatform/web/login/JBossClusteredSSOValveFilter.java (rev 0)
+++ portal/trunk/component/web/security/src/main/java/org/exoplatform/web/login/JBossClusteredSSOValveFilter.java 2011-11-15 14:36:04 UTC (rev 8074)
@@ -0,0 +1,284 @@
+/*
+ * JBoss, a division of Red Hat
+ * Copyright 2011, Red Hat Middleware, LLC, and individual
+ * contributors as indicated by the @authors tag. See the
+ * copyright.txt in the distribution for a full listing of
+ * individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.exoplatform.web.login;
+
+import org.apache.catalina.Container;
+import org.apache.catalina.Pipeline;
+import org.apache.catalina.Session;
+import org.apache.catalina.Valve;
+import org.apache.catalina.Wrapper;
+import org.apache.catalina.authenticator.Constants;
+import org.apache.catalina.authenticator.SingleSignOn;
+import org.apache.catalina.connector.Request;
+import org.exoplatform.container.ExoContainer;
+import org.exoplatform.container.web.AbstractFilter;
+import org.gatein.common.logging.Logger;
+import org.gatein.common.logging.LoggerFactory;
+import org.gatein.wci.security.Credentials;
+
+import javax.servlet.FilterChain;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import java.io.IOException;
+import java.lang.reflect.Field;
+
+/**
+ * Helper filter for JBoss clustered SSO Valve. Valve requires reauthentication of user with same password on all cluster nodes.
+ * So we need to use real password of user instead of wci ticket for updating SSO valve, which ensure that user will be reauthenticated
+ * on second cluster node by SSO valve with his real password.
+ *
+ * @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
+ */
+public class JBossClusteredSSOValveFilter extends AbstractFilter
+{
+ // Name of session note where credentials will be stored. Credentials are removed after update of SSO valve
+ private static final String NOTE_CREDENTIALS = "org.exoplatform.web.login.JBossClusteredSSOValveFilter.NOTE_CREDENTIALS";
+
+ // Logger
+ private static final Logger log = LoggerFactory.getLogger(JBossClusteredSSOValveFilter.class);
+
+ // JBoss clustered SSO valve
+ private SingleSignOn ssoValve = null;
+
+ // Whether attempt to find sso valve has been already performed
+ private boolean ssoValveAttempted = false;
+
+ // Helper enum, which is used to obtain instance of catalina request
+ private FilterStateEnum filterState = FilterStateEnum.BEFORE_INIT;
+
+ @Override
+ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
+ {
+ SingleSignOn ssoValve = getSSOValve();
+
+ // Simply continue with filter chain if jboss sso valve not present. Otherwise process it.
+ if (ssoValve != null)
+ {
+ // Get Catalina request (accessible only on JBoss)
+ Request tomcatRequest = getCurrentCatalinaRequest();
+
+ if (tomcatRequest != null)
+ {
+ Session tomcatSession = tomcatRequest.getSessionInternal();
+
+ // This means that request is going to PortalLoginController to start Login request
+ if ("/login".equals(tomcatRequest.getServletPath()) && tomcatRequest.getNote(Constants.REQ_SSOID_NOTE) == null)
+ {
+ chain.doFilter(request, response);
+
+ // Now credentials are in session and we can save them as note (notes are not replicated)
+ Credentials credentials = (Credentials) tomcatSession.getSession().getAttribute(Credentials.CREDENTIALS);
+ if (log.isDebugEnabled())
+ {
+ log.debug("Saving credentials " + credentials + " into session note for SSO valve.");
+ }
+ tomcatSession.setNote(NOTE_CREDENTIALS, credentials);
+
+ return;
+ }
+ else if (tomcatSession.getNote(NOTE_CREDENTIALS) != null && tomcatRequest.getRemoteUser() != null)
+ {
+ // We are just logged. SSO valve needs to be updated with "real" password of user instead of wci ticket.
+ Credentials credentials = (Credentials) tomcatSession.getNote(NOTE_CREDENTIALS);
+ tomcatSession.removeNote(NOTE_CREDENTIALS);
+
+ if (credentials != null)
+ {
+ String ssoId = (String) tomcatRequest.getNote(Constants.REQ_SSOID_NOTE);
+ if (log.isDebugEnabled())
+ {
+ log.debug("Update SSO valve values with real credentials of user " + credentials.getUsername());
+ }
+ ssoValve.register(
+ ssoId,
+ tomcatSession.getPrincipal(),
+ tomcatRequest.getAuthType(),
+ credentials.getUsername(),
+ credentials.getPassword());
+ }
+ }
+ }
+ }
+
+ // Continue with filter chain
+ chain.doFilter(request, response);
+ }
+
+ @Override
+ public void destroy()
+ {
+ this.ssoValve = null;
+ }
+
+ // ------------------------------------------------------ Private helper methods
+
+ private SingleSignOn getSSOValve()
+ {
+
+ // Return ssoValve if some client already tried to find it
+ if (ssoValveAttempted)
+ {
+ return ssoValve;
+ }
+
+ // Find ssoValve
+ findSSOValve();
+
+ return ssoValve;
+ }
+
+ private synchronized void findSSOValve()
+ {
+ // This means that another client already tried to find sso valve
+ if (ssoValveAttempted)
+ {
+ return;
+ }
+
+ // We need to have "cluster" profile active, and we need to be on JBoss. Otherwise SSO valve can't be used
+ if (!ExoContainer.getProfiles().contains("cluster"))
+ {
+ }
+ else if (getCurrentCatalinaRequest() == null)
+ {
+ }
+ else
+ {
+ // Let's try to find SSOValve with JBossWeb api
+ Request req = getCurrentCatalinaRequest();
+
+ Wrapper wrapper = req.getWrapper();
+ Container parent = wrapper.getParent();
+
+ while ((ssoValve == null) && (parent != null))
+ {
+ if (!(parent instanceof Pipeline))
+ {
+ parent = parent.getParent();
+ continue;
+ }
+ Valve valves[] = ((Pipeline) parent).getValves();
+ for (int i = 0; i < valves.length; i++)
+ {
+ if (valves[i] instanceof SingleSignOn)
+ {
+ ssoValve = (SingleSignOn) valves[i];
+ break;
+ }
+ }
+ if (ssoValve == null)
+ {
+ parent = parent.getParent();
+ }
+ }
+ }
+
+ // Mark that finding has been performed
+ this.ssoValveAttempted = true;
+
+ if (ssoValve != null)
+ {
+ log.info("Found JBoss ClusteredSingleSignOn Valve at " + ssoValve);
+ }
+ else
+ {
+ log.info("No JBoss ClusteredSingleSignOn Valve is present");
+ }
+ }
+
+ // Obtain correct instance of catalina Request. Current request is bound to ThreadLocal field, but class is different in JBoss 5 and JBoss 6.
+ private Request getCurrentCatalinaRequest()
+ {
+ if (filterState == FilterStateEnum.SECURITY_ASSOC_VALVE)
+ {
+ return getCurrentTomcatRequestFromValve("org.jboss.web.tomcat.security.SecurityAssociationValve");
+ }
+ else if (filterState == FilterStateEnum.ACTIVE_REQUEST_VALVE)
+ {
+ return getCurrentTomcatRequestFromValve("org.jboss.web.tomcat.service.request.ActiveRequestResponseCacheValve");
+ }
+ else if (filterState == FilterStateEnum.NOT_JBOSS)
+ {
+ return null;
+ }
+ else
+ {
+ // We need to find correct valve and obtain catalina request from it
+ Request req = getCurrentTomcatRequestFromValve("org.jboss.web.tomcat.security.SecurityAssociationValve");
+ if (req != null)
+ {
+ filterState = FilterStateEnum.SECURITY_ASSOC_VALVE;
+ }
+ else
+ {
+ req = getCurrentTomcatRequestFromValve("org.jboss.web.tomcat.service.request.ActiveRequestResponseCacheValve");
+ if (req != null)
+ {
+ filterState = FilterStateEnum.ACTIVE_REQUEST_VALVE;
+ }
+ else
+ {
+ filterState = FilterStateEnum.NOT_JBOSS;
+ }
+ }
+
+ return req;
+ }
+ }
+
+ private Request getCurrentTomcatRequestFromValve(String valveClassName)
+ {
+ try
+ {
+ Class<?> securityAssociationValve = Thread.currentThread().getContextClassLoader().loadClass(valveClassName);
+ Field activeRequest = securityAssociationValve.getDeclaredField("activeRequest");
+ ThreadLocal<Request> threadLocal = (ThreadLocal<Request>) activeRequest.get(null);
+ Request req = threadLocal.get();
+ if (log.isTraceEnabled())
+ {
+ log.trace("Current catalina Request obtained from " + valveClassName);
+ }
+ return req;
+ }
+ catch (Exception e)
+ {
+ log.debug("Can't obtain current catalina Request from " + valveClassName);
+ return null;
+ }
+ }
+
+ private enum FilterStateEnum
+ {
+ // We didn't try to obtain any catalina Request
+ BEFORE_INIT,
+ // We are not on JBoss
+ NOT_JBOSS,
+ // We are on JBoss 5.1 or earlier (Current catalina request can be obtained from SecurityAssociationValve threadlocal field)
+ SECURITY_ASSOC_VALVE,
+ // We are on JBoss 6 or EPP 5.1.1 (Current catalina request can be obtained from ActiveRequestResponseValve threadlocal field)
+ ACTIVE_REQUEST_VALVE
+ }
+
+}
Modified: portal/trunk/web/portal/src/main/webapp/WEB-INF/web.xml
===================================================================
--- portal/trunk/web/portal/src/main/webapp/WEB-INF/web.xml 2011-11-15 14:25:55 UTC (rev 8073)
+++ portal/trunk/web/portal/src/main/webapp/WEB-INF/web.xml 2011-11-15 14:36:04 UTC (rev 8074)
@@ -88,6 +88,11 @@
<filter-class>org.exoplatform.web.login.RememberMeFilter</filter-class>
</filter>
+ <filter>
+ <filter-name>JBossClusteredSSOValveFilter</filter-name>
+ <filter-class>org.exoplatform.web.login.JBossClusteredSSOValveFilter</filter-class>
+ </filter>
+
<filter>
<filter-name>ClusteredSSOFilter</filter-name>
<filter-class>org.exoplatform.web.login.ClusteredSSOFilter</filter-class>
@@ -109,6 +114,11 @@
</filter-mapping>
<filter-mapping>
+ <filter-name>JBossClusteredSSOValveFilter</filter-name>
+ <url-pattern>/*</url-pattern>
+ </filter-mapping>
+
+ <filter-mapping>
<filter-name>ClusteredSSOFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
13 years, 1 month
gatein SVN: r8073 - in portal/trunk: component/web/security/src/main/java/org/exoplatform/web/security and 3 other directories.
by do-not-reply@jboss.org
Author: mposolda
Date: 2011-11-15 09:25:55 -0500 (Tue, 15 Nov 2011)
New Revision: 8073
Added:
portal/trunk/component/web/security/src/main/java/org/exoplatform/web/security/PortalLoginModule.java
Modified:
portal/trunk/component/web/security/src/main/java/org/exoplatform/web/login/ClusteredSSOFilter.java
portal/trunk/examples/portal/ear/src/main/application/META-INF/gatein-jboss-beans.xml
portal/trunk/packaging/jboss-as5/pkg/src/main/resources/jboss/server/default/deploy/gatein.ear/META-INF/gatein-jboss-beans.xml
portal/trunk/packaging/jboss-as6/pkg/src/main/resources/jboss/server/default/deploy/gatein.ear/META-INF/gatein-jboss-beans.xml
Log:
GTNPORTAL-2274 Can't login after unsuccessful login attempt in cluster profile
Modified: portal/trunk/component/web/security/src/main/java/org/exoplatform/web/login/ClusteredSSOFilter.java
===================================================================
--- portal/trunk/component/web/security/src/main/java/org/exoplatform/web/login/ClusteredSSOFilter.java 2011-11-15 12:21:46 UTC (rev 8072)
+++ portal/trunk/component/web/security/src/main/java/org/exoplatform/web/login/ClusteredSSOFilter.java 2011-11-15 14:25:55 UTC (rev 8073)
@@ -26,6 +26,7 @@
import org.exoplatform.container.ExoContainer;
import org.exoplatform.container.web.AbstractFilter;
+import org.exoplatform.web.security.PortalLoginModule;
import org.gatein.wci.security.Credentials;
import org.jboss.web.tomcat.security.login.WebAuthentication;
@@ -48,7 +49,7 @@
{
HttpServletRequest httpRequest = (HttpServletRequest)request;
- Credentials credentials = (Credentials)httpRequest.getSession().getAttribute(Credentials.CREDENTIALS);
+ Credentials credentials = (Credentials)httpRequest.getSession().getAttribute(PortalLoginModule.AUTHENTICATED_CREDENTIALS);
// Make programatic login if authenticated credentials are present in session - they were set in another cluster node
if (credentials != null && httpRequest.getRemoteUser() == null)
@@ -64,7 +65,7 @@
// This is a workaround... without this code this attr will vanish from session after first request - don't ask...
if (credentials != null && httpRequest.getSession(false) != null)
{
- httpRequest.getSession(false).setAttribute(Credentials.CREDENTIALS, credentials);
+ httpRequest.getSession(false).setAttribute(PortalLoginModule.AUTHENTICATED_CREDENTIALS, credentials);
}
}
else
Added: portal/trunk/component/web/security/src/main/java/org/exoplatform/web/security/PortalLoginModule.java
===================================================================
--- portal/trunk/component/web/security/src/main/java/org/exoplatform/web/security/PortalLoginModule.java (rev 0)
+++ portal/trunk/component/web/security/src/main/java/org/exoplatform/web/security/PortalLoginModule.java 2011-11-15 14:25:55 UTC (rev 8073)
@@ -0,0 +1,204 @@
+/*
+ * JBoss, a division of Red Hat
+ * Copyright 2011, Red Hat Middleware, LLC, and individual
+ * contributors as indicated by the @authors tag. See the
+ * copyright.txt in the distribution for a full listing of
+ * individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.exoplatform.web.security;
+
+import org.exoplatform.container.ExoContainer;
+import org.exoplatform.services.log.ExoLogger;
+import org.exoplatform.services.log.Log;
+import org.exoplatform.services.security.Authenticator;
+import org.exoplatform.services.security.Identity;
+import org.exoplatform.services.security.UsernameCredential;
+import org.exoplatform.services.security.jaas.AbstractLoginModule;
+import org.gatein.wci.security.Credentials;
+
+import javax.security.auth.login.LoginException;
+import javax.servlet.http.HttpServletRequest;
+import java.lang.reflect.Method;
+
+/**
+ * A login module implementation that is used to handle reauthentication of client with same HTTP session on various cluster nodes.
+ * After login of user on cluster node is attribute "authenticatedCredentials" added to HTTP session in method {@link #commit()}.
+ * Other cluster nodes can than read these credentials in method {@link #login()}, and can reuse them to relogin.
+ *
+ * @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
+ * @version $Revision$
+ */
+public class PortalLoginModule extends AbstractLoginModule
+{
+
+ /** Logger. */
+ private static final Log log = ExoLogger.getLogger(PortalLoginModule.class);
+
+ /** JACC get context method. */
+ private static final Method getContextMethod;
+
+ static
+ {
+ Method getContext = null;
+
+ log.debug("About to configure PortalLoginModule");
+ try
+ {
+ Class<?> policyContextClass = Thread.currentThread().getContextClassLoader().loadClass("javax.security.jacc.PolicyContext");
+ getContext = policyContextClass.getDeclaredMethod("getContext", String.class);
+ }
+ catch (ClassNotFoundException ignore)
+ {
+ log.debug("JACC not found ignoring it", ignore);
+ }
+ catch (Exception e)
+ {
+ log.error("Could not obtain JACC get context method", e);
+ }
+
+ //
+ getContextMethod = getContext;
+ }
+
+ public static final String AUTHENTICATED_CREDENTIALS = "authenticatedCredentials";
+
+ private static final String LOGIN_ON_DIFFERENT_NODE = "PortalLoginModule.loginOnDifferentNode";
+
+ /**
+ * @see javax.security.auth.spi.LoginModule#login()
+ */
+ @SuppressWarnings("unchecked")
+ public boolean login() throws LoginException
+ {
+ if (getContextMethod != null)
+ {
+ Credentials authCredentials = null;
+
+ try
+ {
+ HttpServletRequest request = (HttpServletRequest)getContextMethod.invoke(null, "javax.servlet.http.HttpServletRequest");
+ authCredentials = (Credentials)request.getSession().getAttribute(AUTHENTICATED_CREDENTIALS);
+
+ // If authenticated credentials were presented in HTTP session, it means that we were already logged on different cluster node
+ // with this HTTP session. We don't need to validate password again in this case (We don't have password anyway)
+ if (authCredentials != null)
+ {
+ Authenticator authenticator = (Authenticator)getContainer().getComponentInstanceOfType(Authenticator.class);
+ if (authenticator == null)
+ {
+ throw new LoginException("No Authenticator component found, check your configuration");
+ }
+
+ String username = authCredentials.getUsername();
+ Identity identity = authenticator.createIdentity(username);
+
+ sharedState.put("exo.security.identity", identity);
+ sharedState.put("javax.security.auth.login.name", username);
+
+ subject.getPublicCredentials().add(new UsernameCredential(username));
+
+ // Add empty password to subject and remove password key, so that SharedStateLoginModule won't be processed
+ subject.getPrivateCredentials().add("");
+ sharedState.remove("javax.security.auth.login.password");
+
+ // Add flag that we were logged with real password on different cluster node. Not on this node.
+ sharedState.put(LOGIN_ON_DIFFERENT_NODE, true);
+ }
+ }
+ catch(Exception e)
+ {
+ log.error(this, e);
+ LoginException le = new LoginException(e.getMessage());
+ le.initCause(e);
+ throw le;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * @see javax.security.auth.spi.LoginModule#commit()
+ */
+ public boolean commit() throws LoginException
+ {
+ // Add authenticated credentials to session only if we were logged on this host with "real" credentials
+ if (getContextMethod != null &&
+ sharedState.containsKey("javax.security.auth.login.name") &&
+ sharedState.containsKey("javax.security.auth.login.password") &&
+ sharedState.get(LOGIN_ON_DIFFERENT_NODE) == null)
+ {
+ String uid = (String)sharedState.get("javax.security.auth.login.name");
+
+ Credentials wc = new Credentials(uid, "");
+
+ HttpServletRequest request = null;
+ try
+ {
+ request = (HttpServletRequest)getContextMethod.invoke(null, "javax.servlet.http.HttpServletRequest");
+ request.getSession().setAttribute(AUTHENTICATED_CREDENTIALS, wc);
+ handleCredentialsRemoving(request);
+ }
+ catch(Exception e)
+ {
+ log.error(this,e);
+ log.error("LoginModule error. Turn off session credentials checking with proper configuration option of " +
+ "LoginModule set to false");
+ }
+ }
+ return true;
+ }
+
+ /**
+ * @see javax.security.auth.spi.LoginModule#abort()
+ */
+ public boolean abort() throws LoginException
+ {
+ return true;
+ }
+
+ /**
+ * @see javax.security.auth.spi.LoginModule#logout()
+ */
+ public boolean logout() throws LoginException
+ {
+ return true;
+ }
+
+ @Override
+ protected Log getLogger()
+ {
+ return log;
+ }
+
+ protected static boolean isClusteredSSO()
+ {
+ return ExoContainer.getProfiles().contains("cluster");
+ }
+
+ /**
+ * Remove credentials of authenticated user from HTTP session.
+ *
+ * @param request httpRequest
+ */
+ protected void handleCredentialsRemoving(HttpServletRequest request)
+ {
+ // TODO: We can't remove credentials from HTTP session right now because WSRP-Security relies on it. See method WSSecurityCredentialHelper.handleRequest
+ // request.getSession().removeAttribute(Credentials.CREDENTIALS);
+ }
+}
Modified: portal/trunk/examples/portal/ear/src/main/application/META-INF/gatein-jboss-beans.xml
===================================================================
--- portal/trunk/examples/portal/ear/src/main/application/META-INF/gatein-jboss-beans.xml 2011-11-15 12:21:46 UTC (rev 8072)
+++ portal/trunk/examples/portal/ear/src/main/application/META-INF/gatein-jboss-beans.xml 2011-11-15 14:25:55 UTC (rev 8073)
@@ -6,6 +6,10 @@
<module-option name="portalContainerName">sample-portal</module-option>
<module-option name="realmName">gatein-domain-sample-portal</module-option>
</login-module>
+ <login-module code="org.exoplatform.web.security.PortalLoginModule" flag="required">
+ <module-option name="portalContainerName">sample-portal</module-option>
+ <module-option name="realmName">gatein-domain-sample-portal</module-option>
+ </login-module>
<login-module code="org.exoplatform.services.security.jaas.SharedStateLoginModule" flag="required">
<module-option name="portalContainerName">sample-portal</module-option>
<module-option name="realmName">gatein-domain-sample-portal</module-option>
Modified: portal/trunk/packaging/jboss-as5/pkg/src/main/resources/jboss/server/default/deploy/gatein.ear/META-INF/gatein-jboss-beans.xml
===================================================================
--- portal/trunk/packaging/jboss-as5/pkg/src/main/resources/jboss/server/default/deploy/gatein.ear/META-INF/gatein-jboss-beans.xml 2011-11-15 12:21:46 UTC (rev 8072)
+++ portal/trunk/packaging/jboss-as5/pkg/src/main/resources/jboss/server/default/deploy/gatein.ear/META-INF/gatein-jboss-beans.xml 2011-11-15 14:25:55 UTC (rev 8073)
@@ -6,6 +6,10 @@
<module-option name="portalContainerName">portal</module-option>
<module-option name="realmName">gatein-domain</module-option>
</login-module>
+ <login-module code="org.exoplatform.web.security.PortalLoginModule" flag="required">
+ <module-option name="portalContainerName">portal</module-option>
+ <module-option name="realmName">gatein-domain</module-option>
+ </login-module>
<login-module code="org.exoplatform.services.security.jaas.SharedStateLoginModule" flag="required">
<module-option name="portalContainerName">portal</module-option>
<module-option name="realmName">gatein-domain</module-option>
Modified: portal/trunk/packaging/jboss-as6/pkg/src/main/resources/jboss/server/default/deploy/gatein.ear/META-INF/gatein-jboss-beans.xml
===================================================================
--- portal/trunk/packaging/jboss-as6/pkg/src/main/resources/jboss/server/default/deploy/gatein.ear/META-INF/gatein-jboss-beans.xml 2011-11-15 12:21:46 UTC (rev 8072)
+++ portal/trunk/packaging/jboss-as6/pkg/src/main/resources/jboss/server/default/deploy/gatein.ear/META-INF/gatein-jboss-beans.xml 2011-11-15 14:25:55 UTC (rev 8073)
@@ -6,6 +6,10 @@
<module-option name="portalContainerName">portal</module-option>
<module-option name="realmName">gatein-domain</module-option>
</login-module>
+ <login-module code="org.exoplatform.web.security.PortalLoginModule" flag="required">
+ <module-option name="portalContainerName">portal</module-option>
+ <module-option name="realmName">gatein-domain</module-option>
+ </login-module>
<login-module code="org.exoplatform.services.security.jaas.SharedStateLoginModule" flag="required">
<module-option name="portalContainerName">portal</module-option>
<module-option name="realmName">gatein-domain</module-option>
13 years, 1 month
gatein SVN: r8072 - in portal/trunk: component/web/controller/src/test/java/org/exoplatform/web/controller/performance and 11 other directories.
by do-not-reply@jboss.org
Author: trong.tran
Date: 2011-11-15 07:21:46 -0500 (Tue, 15 Nov 2011)
New Revision: 8072
Modified:
portal/trunk/component/web/controller/src/main/java/org/exoplatform/web/url/PortalURL.java
portal/trunk/component/web/controller/src/test/java/org/exoplatform/web/controller/performance/Standalone.java
portal/trunk/component/web/controller/src/test/java/org/exoplatform/web/controller/router/Names.java
portal/trunk/component/web/controller/src/test/java/org/exoplatform/web/controller/router/TestLegacyPortal.java
portal/trunk/component/web/controller/src/test/java/org/exoplatform/web/controller/router/TestPortalConfiguration.java
portal/trunk/component/web/controller/src/test/resources/org/exoplatform/web/controller/performance/controller.xml
portal/trunk/packaging/jboss-as5/pkg/src/main/resources/jboss/server/default/conf/gatein/controller.xml
portal/trunk/packaging/jboss-as6/pkg/src/main/resources/jboss/server/default/conf/gatein/controller.xml
portal/trunk/packaging/jboss-as7/pkg/src/main/resources/jboss/standalone/configuration/gatein/controller.xml
portal/trunk/packaging/jetty/pkg/src/main/resources/jetty/gatein/conf/controller.xml
portal/trunk/packaging/tomcat/pkg/src/main/resources/tomcat/gatein/conf/controller.xml
portal/trunk/webui/framework/src/main/java/org/exoplatform/webui/url/ComponentURL.java
portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/application/PortalRequestContext.java
portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/application/PortalURLBuilder.java
portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/application/ExoPortletInvocationContext.java
portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/login/UIForgetPassword.java
Log:
GTNPORTAL-2273 Sanitize controller.xml
Modified: portal/trunk/component/web/controller/src/main/java/org/exoplatform/web/url/PortalURL.java
===================================================================
--- portal/trunk/component/web/controller/src/main/java/org/exoplatform/web/url/PortalURL.java 2011-11-15 09:22:58 UTC (rev 8071)
+++ portal/trunk/component/web/controller/src/main/java/org/exoplatform/web/url/PortalURL.java 2011-11-15 12:21:46 UTC (rev 8072)
@@ -243,6 +243,18 @@
}
/**
+ * Reset the Portal URL state
+ */
+ public void reset()
+ {
+ Map<String, String[]> params = getQueryParameters();
+ if (params != null)
+ {
+ params.clear();
+ }
+ }
+
+ /**
* Returns the query parameters. Null can be returned.
*
* @return the query parameters
Modified: portal/trunk/component/web/controller/src/test/java/org/exoplatform/web/controller/performance/Standalone.java
===================================================================
--- portal/trunk/component/web/controller/src/test/java/org/exoplatform/web/controller/performance/Standalone.java 2011-11-15 09:22:58 UTC (rev 8071)
+++ portal/trunk/component/web/controller/src/test/java/org/exoplatform/web/controller/performance/Standalone.java 2011-11-15 12:21:46 UTC (rev 8072)
@@ -21,9 +21,6 @@
private static final QualifiedName HANDLER = QualifiedName.parse("gtn:handler");
/** . */
- private static final QualifiedName LANG = QualifiedName.parse("gtn:lang");
-
- /** . */
private static final QualifiedName SITETYPE = QualifiedName.parse("gtn:sitetype");
/** . */
@@ -32,15 +29,6 @@
/** . */
private static final QualifiedName PATH = QualifiedName.parse("gtn:path");
- /** . */
- private static final QualifiedName COMPONENT_ID = QualifiedName.parse("gtn:componentid");
-
- /** . */
- private static final QualifiedName ACTION = QualifiedName.parse("gtn:action");
-
- /** . */
- private static final QualifiedName OBJECT_ID = QualifiedName.parse("gtn:objectid");
-
public void testFoo() throws Exception
{
Modified: portal/trunk/component/web/controller/src/test/java/org/exoplatform/web/controller/router/Names.java
===================================================================
--- portal/trunk/component/web/controller/src/test/java/org/exoplatform/web/controller/router/Names.java 2011-11-15 09:22:58 UTC (rev 8071)
+++ portal/trunk/component/web/controller/src/test/java/org/exoplatform/web/controller/router/Names.java 2011-11-15 12:21:46 UTC (rev 8072)
@@ -42,6 +42,4 @@
QualifiedName GTN_SITETYPE = QualifiedName.parse("gtn:sitetype");
QualifiedName GTN_ACCESS = QualifiedName.parse("gtn:access");
QualifiedName GTN_PATH = QualifiedName.parse("gtn:path");
- QualifiedName GTN_COMPONENTID = QualifiedName.parse("gtn:componentid");
-
}
Modified: portal/trunk/component/web/controller/src/test/java/org/exoplatform/web/controller/router/TestLegacyPortal.java
===================================================================
--- portal/trunk/component/web/controller/src/test/java/org/exoplatform/web/controller/router/TestLegacyPortal.java 2011-11-15 09:22:58 UTC (rev 8071)
+++ portal/trunk/component/web/controller/src/test/java/org/exoplatform/web/controller/router/TestLegacyPortal.java 2011-11-15 12:21:46 UTC (rev 8072)
@@ -23,7 +23,6 @@
import org.exoplatform.web.controller.QualifiedName;
import static org.exoplatform.web.controller.metadata.DescriptorBuilder.*;
-import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
@@ -43,10 +42,7 @@
this.router = router().
add(route("/").
with(
- routeParam("gtn:handler").withValue("portal"),
- requestParam("gtn:componentid").named("portal:componentId"),
- requestParam("gtn:action").named("portal:action"),
- requestParam("gtn:objectid").named("portal:objectId")).
+ routeParam("gtn:handler").withValue("portal")).
sub(route("/public/{gtn:sitename}{gtn:path}").
with(
routeParam("gtn:access").withValue("public"),
@@ -65,11 +61,10 @@
expectedParameters.put(Names.GTN_SITENAME, "classic");
expectedParameters.put(Names.GTN_ACCESS, "private");
expectedParameters.put(Names.GTN_PATH, "");
- expectedParameters.put(Names.GTN_COMPONENTID, "foo");
//
- assertEquals(expectedParameters, router.route("/private/classic", Collections.singletonMap("portal:componentId", new String[]{"foo"})));
- assertEquals("/private/classic?portal:componentId=foo", router.render(expectedParameters));
+ assertEquals(expectedParameters, router.route("/private/classic"));
+ assertEquals("/private/classic", router.render(expectedParameters));
}
public void testPrivateClassic() throws Exception
@@ -105,11 +100,10 @@
expectedParameters.put(Names.GTN_SITENAME, "classic");
expectedParameters.put(Names.GTN_ACCESS, "private");
expectedParameters.put(Names.GTN_PATH, "/");
- expectedParameters.put(Names.GTN_COMPONENTID, "foo");
//
- assertEquals(expectedParameters, router.route("/private/classic/", Collections.singletonMap("portal:componentId", new String[]{"foo"})));
- assertEquals("/private/classic/?portal:componentId=foo", router.render(expectedParameters));
+ assertEquals(expectedParameters, router.route("/private/classic/"));
+ assertEquals("/private/classic/", router.render(expectedParameters));
}
public void testPrivateClassicHome() throws Exception
@@ -132,10 +126,9 @@
expectedParameters.put(Names.GTN_SITENAME, "classic");
expectedParameters.put(Names.GTN_ACCESS, "private");
expectedParameters.put(Names.GTN_PATH, "/home");
- expectedParameters.put(Names.GTN_COMPONENTID, "foo");
//
- assertEquals(expectedParameters, router.route("/private/classic/home", Collections.singletonMap("portal:componentId", new String[]{"foo"})));
- assertEquals("/private/classic/home?portal:componentId=foo", router.render(expectedParameters));
+ assertEquals(expectedParameters, router.route("/private/classic/home"));
+ assertEquals("/private/classic/home", router.render(expectedParameters));
}
}
Modified: portal/trunk/component/web/controller/src/test/java/org/exoplatform/web/controller/router/TestPortalConfiguration.java
===================================================================
--- portal/trunk/component/web/controller/src/test/java/org/exoplatform/web/controller/router/TestPortalConfiguration.java 2011-11-15 09:22:58 UTC (rev 8071)
+++ portal/trunk/component/web/controller/src/test/java/org/exoplatform/web/controller/router/TestPortalConfiguration.java 2011-11-15 12:21:46 UTC (rev 8072)
@@ -22,7 +22,6 @@
import org.exoplatform.web.controller.QualifiedName;
import static org.exoplatform.web.controller.metadata.DescriptorBuilder.*;
-import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
@@ -45,7 +44,6 @@
with(
routeParam("gtn:handler").withValue("site"),
routeParam("gtn:handler").withValue("site"),
- requestParam("gtn:componentid").named("portal:componentId"),
pathParam("gtn:path").matchedBy(".*").preservePath()),
route("/private/{gtn:sitetype}/{gtn:sitename}{gtn:path}").
with(
@@ -69,11 +67,10 @@
expectedParameters.put(Names.GTN_SITENAME, "classic");
expectedParameters.put(Names.GTN_SITETYPE, "portal");
expectedParameters.put(Names.GTN_PATH, "/");
- expectedParameters.put(Names.GTN_COMPONENTID, "foo");
//
- assertEquals(expectedParameters, router.route("/private/portal/classic/", Collections.singletonMap("portal:componentId", new String[]{"foo"})));
- assertEquals("/private/portal/classic/?portal:componentId=foo", router.render(expectedParameters));
+ assertEquals(expectedParameters, router.route("/private/portal/classic/"));
+ assertEquals("/private/portal/classic/", router.render(expectedParameters));
}
public void testPrivateClassic() throws Exception
Modified: portal/trunk/component/web/controller/src/test/resources/org/exoplatform/web/controller/performance/controller.xml
===================================================================
--- portal/trunk/component/web/controller/src/test/resources/org/exoplatform/web/controller/performance/controller.xml 2011-11-15 09:22:58 UTC (rev 8071)
+++ portal/trunk/component/web/controller/src/test/resources/org/exoplatform/web/controller/performance/controller.xml 2011-11-15 12:21:46 UTC (rev 8072)
@@ -83,11 +83,6 @@
<value>portal</value>
</route-param>
- <!-- Webui parameters -->
- <request-param qname="gtn:componentid" name="portal:componentId"/>
- <request-param qname="gtn:action" name="portal:action"/>
- <request-param qname="gtn:objectid" name="objectId"/>
-
<!-- The group access -->
<route path="/groups/{gtn:sitename}/{gtn:path}">
<request-param qname="gtn:lang" name="lang" value-mapping="never-empty">
Modified: portal/trunk/packaging/jboss-as5/pkg/src/main/resources/jboss/server/default/conf/gatein/controller.xml
===================================================================
--- portal/trunk/packaging/jboss-as5/pkg/src/main/resources/jboss/server/default/conf/gatein/controller.xml 2011-11-15 09:22:58 UTC (rev 8071)
+++ portal/trunk/packaging/jboss-as5/pkg/src/main/resources/jboss/server/default/conf/gatein/controller.xml 2011-11-15 12:21:46 UTC (rev 8072)
@@ -74,11 +74,6 @@
<value>portal</value>
</route-param>
- <!-- Webui parameters -->
- <request-param qname="gtn:componentid" name="portal:componentId"/>
- <request-param qname="gtn:action" name="portal:action"/>
- <request-param qname="gtn:objectid" name="objectId"/>
-
<!-- The group access -->
<route path="/g/{gtn:sitename}/{gtn:path}">
<request-param qname="gtn:lang" name="lang" value-mapping="never-empty">
Modified: portal/trunk/packaging/jboss-as6/pkg/src/main/resources/jboss/server/default/conf/gatein/controller.xml
===================================================================
--- portal/trunk/packaging/jboss-as6/pkg/src/main/resources/jboss/server/default/conf/gatein/controller.xml 2011-11-15 09:22:58 UTC (rev 8071)
+++ portal/trunk/packaging/jboss-as6/pkg/src/main/resources/jboss/server/default/conf/gatein/controller.xml 2011-11-15 12:21:46 UTC (rev 8072)
@@ -74,11 +74,6 @@
<value>portal</value>
</route-param>
- <!-- Webui parameters -->
- <request-param qname="gtn:componentid" name="portal:componentId"/>
- <request-param qname="gtn:action" name="portal:action"/>
- <request-param qname="gtn:objectid" name="objectId"/>
-
<!-- The group access -->
<route path="/g/{gtn:sitename}/{gtn:path}">
<request-param qname="gtn:lang" name="lang" value-mapping="never-empty">
Modified: portal/trunk/packaging/jboss-as7/pkg/src/main/resources/jboss/standalone/configuration/gatein/controller.xml
===================================================================
--- portal/trunk/packaging/jboss-as7/pkg/src/main/resources/jboss/standalone/configuration/gatein/controller.xml 2011-11-15 09:22:58 UTC (rev 8071)
+++ portal/trunk/packaging/jboss-as7/pkg/src/main/resources/jboss/standalone/configuration/gatein/controller.xml 2011-11-15 12:21:46 UTC (rev 8072)
@@ -74,11 +74,6 @@
<value>portal</value>
</route-param>
- <!-- Webui parameters -->
- <request-param qname="gtn:componentid" name="portal:componentId"/>
- <request-param qname="gtn:action" name="portal:action"/>
- <request-param qname="gtn:objectid" name="objectId"/>
-
<!-- The group access -->
<route path="/g/{gtn:sitename}/{gtn:path}">
<request-param qname="gtn:lang" name="lang" value-mapping="never-empty">
Modified: portal/trunk/packaging/jetty/pkg/src/main/resources/jetty/gatein/conf/controller.xml
===================================================================
--- portal/trunk/packaging/jetty/pkg/src/main/resources/jetty/gatein/conf/controller.xml 2011-11-15 09:22:58 UTC (rev 8071)
+++ portal/trunk/packaging/jetty/pkg/src/main/resources/jetty/gatein/conf/controller.xml 2011-11-15 12:21:46 UTC (rev 8072)
@@ -74,11 +74,6 @@
<value>portal</value>
</route-param>
- <!-- Webui parameters -->
- <request-param qname="gtn:componentid" name="portal:componentId"/>
- <request-param qname="gtn:action" name="portal:action"/>
- <request-param qname="gtn:objectid" name="objectId"/>
-
<!-- The group access -->
<route path="/g/{gtn:sitename}/{gtn:path}">
<request-param qname="gtn:lang" name="lang" value-mapping="never-empty">
Modified: portal/trunk/packaging/tomcat/pkg/src/main/resources/tomcat/gatein/conf/controller.xml
===================================================================
--- portal/trunk/packaging/tomcat/pkg/src/main/resources/tomcat/gatein/conf/controller.xml 2011-11-15 09:22:58 UTC (rev 8071)
+++ portal/trunk/packaging/tomcat/pkg/src/main/resources/tomcat/gatein/conf/controller.xml 2011-11-15 12:21:46 UTC (rev 8072)
@@ -74,11 +74,6 @@
<value>portal</value>
</route-param>
- <!-- Webui parameters -->
- <request-param qname="gtn:componentid" name="portal:componentId"/>
- <request-param qname="gtn:action" name="portal:action"/>
- <request-param qname="gtn:objectid" name="objectId"/>
-
<!-- The group access -->
<route path="/g/{gtn:sitename}/{gtn:path}">
<request-param qname="gtn:lang" name="lang" value-mapping="never-empty">
Modified: portal/trunk/webui/framework/src/main/java/org/exoplatform/webui/url/ComponentURL.java
===================================================================
--- portal/trunk/webui/framework/src/main/java/org/exoplatform/webui/url/ComponentURL.java 2011-11-15 09:22:58 UTC (rev 8071)
+++ portal/trunk/webui/framework/src/main/java/org/exoplatform/webui/url/ComponentURL.java 2011-11-15 12:21:46 UTC (rev 8072)
@@ -35,24 +35,18 @@
*/
public class ComponentURL extends PortalURL<UIComponent, ComponentURL>
{
+ public static final String PORTAL_COMPONENT_ID = "portal:componentId";
+ public static final String PORTAL_COMPONENT_ACTION = "portal:action";
+
/** . */
public static final ResourceType<UIComponent, ComponentURL> TYPE = new ResourceType<UIComponent, ComponentURL>() {};
/** . */
- public static final QualifiedName COMPONENT = QualifiedName.create("gtn", "componentid");
-
- /** . */
- public static final QualifiedName ACTION = QualifiedName.create("gtn", "action");
-
- /** . */
- public static final QualifiedName TARGET = QualifiedName.create("gtn", "objectid");
-
- /** . */
public static final QualifiedName PATH = QualifiedName.create("gtn", "path");
/** . */
- private static final Set<QualifiedName> NAMES = Collections.unmodifiableSet(Tools.toSet(COMPONENT, ACTION, TARGET, PATH));
+ private static final Set<QualifiedName> NAMES = Collections.unmodifiableSet(Tools.toSet(PATH));
/** . */
private UIComponent resource;
@@ -61,9 +55,6 @@
private String action;
/** . */
- private String targetBeanId;
-
- /** . */
private String path;
public ComponentURL(URLContext context) throws NullPointerException
@@ -79,9 +70,27 @@
public ComponentURL setResource(UIComponent resource)
{
this.resource = resource;
+
+ if (resource != null)
+ {
+ setQueryParameterValue(PORTAL_COMPONENT_ID, resource.getId());
+ }
+
return this;
}
+ public void reset()
+ {
+ super.reset();
+
+ //
+ if (resource != null)
+ {
+ setQueryParameterValue(PORTAL_COMPONENT_ID, resource.getId());
+ }
+ setQueryParameterValue(PORTAL_COMPONENT_ACTION, action);
+ }
+
public Set<QualifiedName> getParameterNames()
{
return NAMES;
@@ -89,20 +98,8 @@
public String getParameterValue(QualifiedName parameterName)
{
- if (COMPONENT.equals(parameterName))
+ if (PATH.equals(parameterName))
{
- return resource != null ? resource.getId() : null;
- }
- else if (ACTION.equals(parameterName))
- {
- return action;
- }
- else if (TARGET.equals(parameterName))
- {
- return targetBeanId;
- }
- else if (PATH.equals(parameterName))
- {
return path;
}
else
@@ -111,26 +108,12 @@
}
}
- public String getAction()
- {
- return action;
- }
-
public void setAction(String action)
{
this.action = action;
+ setQueryParameterValue(PORTAL_COMPONENT_ACTION, action);
}
- public String getTargetBeanId()
- {
- return targetBeanId;
- }
-
- public void setTargetBeanId(String targetBeanId)
- {
- this.targetBeanId = targetBeanId;
- }
-
public String getPath()
{
return path;
Modified: portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/application/PortalRequestContext.java
===================================================================
--- portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/application/PortalRequestContext.java 2011-11-15 09:22:58 UTC (rev 8071)
+++ portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/application/PortalRequestContext.java 2011-11-15 12:21:46 UTC (rev 8072)
@@ -89,9 +89,9 @@
final static public int PRIVATE_ACCESS = 1;
- final static public String UI_COMPONENT_ACTION = "portal:action";
+ final static public String UI_COMPONENT_ACTION = ComponentURL.PORTAL_COMPONENT_ACTION;
- final static public String UI_COMPONENT_ID = "portal:componentId";
+ final static public String UI_COMPONENT_ID = ComponentURL.PORTAL_COMPONENT_ID;
final static public String TARGET_NODE = "portal:targetNode";
@@ -475,7 +475,7 @@
public String getUIComponentIdParameterName()
{
- return PortalRequestContext.UI_COMPONENT_ID;
+ return ComponentURL.PORTAL_COMPONENT_ID;
}
public SiteType getSiteType()
Modified: portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/application/PortalURLBuilder.java
===================================================================
--- portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/application/PortalURLBuilder.java 2011-11-15 09:22:58 UTC (rev 8071)
+++ portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/application/PortalURLBuilder.java 2011-11-15 12:21:46 UTC (rev 8072)
@@ -59,11 +59,7 @@
private String createURL(boolean ajax, UIComponent targetComponent, String action, String confirm, String targetBeanId, Parameter[] params)
{
- Map<String,String[]> queryParameters = url.getQueryParameters();
- if (queryParameters != null)
- {
- queryParameters.clear();
- }
+ url.reset();
//
url.setAjax(ajax);
@@ -72,7 +68,7 @@
//
url.setAction(action);
- url.setTargetBeanId(targetBeanId);
+ url.setQueryParameterValue(UIComponent.OBJECTID, targetBeanId);
//
if (params != null)
Modified: portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/application/ExoPortletInvocationContext.java
===================================================================
--- portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/application/ExoPortletInvocationContext.java 2011-11-15 09:22:58 UTC (rev 8071)
+++ portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/application/ExoPortletInvocationContext.java 2011-11-15 12:21:46 UTC (rev 8072)
@@ -116,12 +116,8 @@
.append(PortalRequestContext.UI_COMPONENT_ID).append("=").append(this.portletId);
*/
- //Clear URL parameters
- Map<String, String[]> queryParameters = url.getQueryParameters();
- if (queryParameters != null)
- {
- queryParameters.clear();
- }
+ //Reset query parameters
+ url.reset();
String type;
if (containerURL instanceof RenderURL)
Modified: portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/login/UIForgetPassword.java
===================================================================
--- portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/login/UIForgetPassword.java 2011-11-15 09:22:58 UTC (rev 8071)
+++ portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/login/UIForgetPassword.java 2011-11-15 12:21:46 UTC (rev 8072)
@@ -39,6 +39,7 @@
import org.exoplatform.webui.form.UIFormStringInput;
import org.exoplatform.webui.form.validator.EmailAddressValidator;
import org.exoplatform.webui.form.validator.MandatoryValidator;
+import org.exoplatform.webui.url.ComponentURL;
import org.gatein.wci.security.Credentials;
import java.net.URLEncoder;
@@ -145,7 +146,7 @@
HttpServletRequest request = portalContext.getRequest();
String host = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort();
String activeLink = host + requestContext.getRequestContextPath() + "/public/" + portalName
- + "?portal:componentId=UIPortal&portal:action=RecoveryPasswordAndUsername&tokenId="
+ + "?" + ComponentURL.PORTAL_COMPONENT_ID + "=UIPortal&portal:action=RecoveryPasswordAndUsername&tokenId="
+ tokenId;
String mailText = headerMail + "\n" + activeLink + footerMail;
try
13 years, 1 month
gatein SVN: r8071 - epp/portal/branches/EPP_5_2_Branch/component/web/security/src/main/java/org/exoplatform/web/security.
by do-not-reply@jboss.org
Author: mposolda
Date: 2011-11-15 04:22:58 -0500 (Tue, 15 Nov 2011)
New Revision: 8071
Modified:
epp/portal/branches/EPP_5_2_Branch/component/web/security/src/main/java/org/exoplatform/web/security/PortalLoginModule.java
Log:
JBEPP-729 - Problem with credentials in HTTP session
Modified: epp/portal/branches/EPP_5_2_Branch/component/web/security/src/main/java/org/exoplatform/web/security/PortalLoginModule.java
===================================================================
--- epp/portal/branches/EPP_5_2_Branch/component/web/security/src/main/java/org/exoplatform/web/security/PortalLoginModule.java 2011-11-15 09:05:45 UTC (rev 8070)
+++ epp/portal/branches/EPP_5_2_Branch/component/web/security/src/main/java/org/exoplatform/web/security/PortalLoginModule.java 2011-11-15 09:22:58 UTC (rev 8071)
@@ -22,6 +22,9 @@
import org.exoplatform.container.ExoContainer;
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;
+import org.exoplatform.services.security.Authenticator;
+import org.exoplatform.services.security.Identity;
+import org.exoplatform.services.security.UsernameCredential;
import org.exoplatform.services.security.jaas.AbstractLoginModule;
import org.exoplatform.web.login.InitiateLoginServlet;
import org.gatein.wci.security.Credentials;
@@ -34,14 +37,9 @@
import java.lang.reflect.Method;
/**
- * A login module implementation that relies on the token store to check the
- * password validity. If the token store provides a valid {@link Credentials}
- * value then password stacking is used and the two entries are added in the
- * shared state map. The first entry is keyed by
- * <code>javax.security.auth.login.name</code> and contains the
- * {@link Credentials#getUsername()} value, the second entry is keyed by
- * <code>javax.security.auth.login.password</code> and contains the
- * {@link Credentials#getPassword()} ()} value.
+ * A login module implementation that is used to handle reauthentication of client with same HTTP session on various cluster nodes.
+ * After login of user on cluster node is attribute "authenticatedCredentials" added to HTTP session in method {@link #commit()}.
+ * Other cluster nodes can than read these credentials in method {@link #login()}, and can reuse them to relogin.
*
* @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
* @version $Revision$
@@ -58,23 +56,21 @@
static
{
Method getContext = null;
- if (isClusteredSSO())
+
+ log.debug("About to configure PortalLoginModule");
+ try
{
- log.debug("About to configure clustered SSO");
- try
- {
- Class<?> policyContextClass = Thread.currentThread().getContextClassLoader().loadClass("javax.security.jacc.PolicyContext");
- getContext = policyContextClass.getDeclaredMethod("getContext", String.class);
- }
- catch (ClassNotFoundException ignore)
- {
- log.debug("JACC not found ignoring it", ignore);
- }
- catch (Exception e)
- {
- log.error("Could not obtain JACC get context method", e);
- }
+ Class<?> policyContextClass = Thread.currentThread().getContextClassLoader().loadClass("javax.security.jacc.PolicyContext");
+ getContext = policyContextClass.getDeclaredMethod("getContext", String.class);
}
+ catch (ClassNotFoundException ignore)
+ {
+ log.debug("JACC not found ignoring it", ignore);
+ }
+ catch (Exception e)
+ {
+ log.error("Could not obtain JACC get context method", e);
+ }
//
getContextMethod = getContext;
@@ -82,61 +78,58 @@
public static final String AUTHENTICATED_CREDENTIALS = "authenticatedCredentials";
+ private static final String LOGIN_ON_DIFFERENT_NODE = "PortalLoginModule.loginOnDifferentNode";
+
/**
* @see javax.security.auth.spi.LoginModule#login()
*/
@SuppressWarnings("unchecked")
public boolean login() throws LoginException
{
-
- Callback[] callbacks = new Callback[2];
- callbacks[0] = new NameCallback("Username");
- callbacks[1] = new PasswordCallback("Password", false);
-
- try
+ if (getContextMethod != null)
{
- callbackHandler.handle(callbacks);
- String password = new String(((PasswordCallback)callbacks[1]).getPassword());
+ Credentials authCredentials = null;
- Credentials c = null;
-
- //
- // For clustered config check credentials stored and propagated in session. This won't work in tomcat because
- // of lack of JACC PolicyContext so the code must be a bit defensive
- if (getContextMethod != null && password.startsWith(InitiateLoginServlet.COOKIE_NAME))
+ try
{
- HttpServletRequest request;
- try
+ HttpServletRequest request = (HttpServletRequest)getContextMethod.invoke(null, "javax.servlet.http.HttpServletRequest");
+ authCredentials = (Credentials)request.getSession().getAttribute(AUTHENTICATED_CREDENTIALS);
+
+ // If authenticated credentials were presented in HTTP session, it means that we were already logged on different cluster node
+ // with this HTTP session. We don't need to validate password again in this case (We don't have password anyway)
+ if (authCredentials != null)
{
- request = (HttpServletRequest)getContextMethod.invoke(null, "javax.servlet.http.HttpServletRequest");
- Object o = request.getSession().getAttribute(AUTHENTICATED_CREDENTIALS);
-
- if (o instanceof Credentials)
+ Authenticator authenticator = (Authenticator)getContainer().getComponentInstanceOfType(Authenticator.class);
+ if (authenticator == null)
{
- c = (Credentials) o;
+ throw new LoginException("No Authenticator component found, check your configuration");
}
+
+ String username = authCredentials.getUsername();
+ Identity identity = authenticator.createIdentity(username);
+
+ sharedState.put("exo.security.identity", identity);
+ sharedState.put("javax.security.auth.login.name", username);
+
+ subject.getPublicCredentials().add(new UsernameCredential(username));
+
+ // Add empty password to subject and remove password key, so that SharedStateLoginModule won't be processed
+ subject.getPrivateCredentials().add("");
+ sharedState.remove("javax.security.auth.login.password");
+
+ // Add flag that we were logged with real password on different cluster node. Not on this node.
+ sharedState.put(LOGIN_ON_DIFFERENT_NODE, true);
}
- catch(Throwable e)
- {
- log.error(this,e);
- log.error("LoginModule error. Turn off session credentials checking with proper configuration option of " +
- "LoginModule set to false");
- }
}
-
- if (c != null)
+ catch(Exception e)
{
- sharedState.put("javax.security.auth.login.name", c.getUsername());
- sharedState.put("javax.security.auth.login.password", c.getPassword());
+ log.error(this, e);
+ LoginException le = new LoginException(e.getMessage());
+ le.initCause(e);
+ throw le;
}
- return true;
}
- catch (Exception e)
- {
- LoginException le = new LoginException();
- le.initCause(e);
- throw le;
- }
+ return true;
}
/**
@@ -144,21 +137,22 @@
*/
public boolean commit() throws LoginException
{
-
+ // Add authenticated credentials to session only if we were logged on this host with "real" credentials
if (getContextMethod != null &&
sharedState.containsKey("javax.security.auth.login.name") &&
- sharedState.containsKey("javax.security.auth.login.password"))
+ sharedState.containsKey("javax.security.auth.login.password") &&
+ sharedState.get(LOGIN_ON_DIFFERENT_NODE) == null)
{
String uid = (String)sharedState.get("javax.security.auth.login.name");
- String pass = (String)sharedState.get("javax.security.auth.login.password");
- Credentials wc = new Credentials(uid, pass);
+ Credentials wc = new Credentials(uid, "");
HttpServletRequest request = null;
try
{
request = (HttpServletRequest)getContextMethod.invoke(null, "javax.servlet.http.HttpServletRequest");
request.getSession().setAttribute(AUTHENTICATED_CREDENTIALS, wc);
+ handleCredentialsRemoving(request);
}
catch(Exception e)
{
@@ -196,4 +190,15 @@
{
return ExoContainer.getProfiles().contains("cluster");
}
+
+ /**
+ * Remove credentials of authenticated user from HTTP session.
+ *
+ * @param request httpRequest
+ */
+ protected void handleCredentialsRemoving(HttpServletRequest request)
+ {
+ // TODO: We can't remove credentials from HTTP session right now because WSRP-Security relies on it. See method WSSecurityCredentialHelper.handleRequest
+ // request.getSession().removeAttribute(Credentials.CREDENTIALS);
+ }
}
13 years, 1 month
gatein SVN: r8070 - in epp/portal/branches/EPP_5_2_Branch: web/portal/src/main/webapp/WEB-INF and 1 other directory.
by do-not-reply@jboss.org
Author: mposolda
Date: 2011-11-15 04:05:45 -0500 (Tue, 15 Nov 2011)
New Revision: 8070
Added:
epp/portal/branches/EPP_5_2_Branch/component/web/security/src/main/java/org/exoplatform/web/login/JBossClusteredSSOValveFilter.java
Modified:
epp/portal/branches/EPP_5_2_Branch/web/portal/src/main/webapp/WEB-INF/web.xml
Log:
JBEPP-1361 introduced JBossClusteredSSOValveFilter for easier integration of JBoss SSO valve
Added: epp/portal/branches/EPP_5_2_Branch/component/web/security/src/main/java/org/exoplatform/web/login/JBossClusteredSSOValveFilter.java
===================================================================
--- epp/portal/branches/EPP_5_2_Branch/component/web/security/src/main/java/org/exoplatform/web/login/JBossClusteredSSOValveFilter.java (rev 0)
+++ epp/portal/branches/EPP_5_2_Branch/component/web/security/src/main/java/org/exoplatform/web/login/JBossClusteredSSOValveFilter.java 2011-11-15 09:05:45 UTC (rev 8070)
@@ -0,0 +1,284 @@
+/*
+ * JBoss, a division of Red Hat
+ * Copyright 2011, Red Hat Middleware, LLC, and individual
+ * contributors as indicated by the @authors tag. See the
+ * copyright.txt in the distribution for a full listing of
+ * individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.exoplatform.web.login;
+
+import org.apache.catalina.Container;
+import org.apache.catalina.Pipeline;
+import org.apache.catalina.Session;
+import org.apache.catalina.Valve;
+import org.apache.catalina.Wrapper;
+import org.apache.catalina.authenticator.Constants;
+import org.apache.catalina.authenticator.SingleSignOn;
+import org.apache.catalina.connector.Request;
+import org.exoplatform.container.ExoContainer;
+import org.exoplatform.container.web.AbstractFilter;
+import org.gatein.common.logging.Logger;
+import org.gatein.common.logging.LoggerFactory;
+import org.gatein.wci.security.Credentials;
+
+import javax.servlet.FilterChain;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import java.io.IOException;
+import java.lang.reflect.Field;
+
+/**
+ * Helper filter for JBoss clustered SSO Valve. Valve requires reauthentication of user with same password on all cluster nodes.
+ * So we need to use real password of user instead of wci ticket for updating SSO valve, which ensure that user will be reauthenticated
+ * on second cluster node by SSO valve with his real password.
+ *
+ * @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
+ */
+public class JBossClusteredSSOValveFilter extends AbstractFilter
+{
+ // Name of session note where credentials will be stored. Credentials are removed after update of SSO valve
+ private static final String NOTE_CREDENTIALS = "org.exoplatform.web.login.JBossClusteredSSOValveFilter.NOTE_CREDENTIALS";
+
+ // Logger
+ private static final Logger log = LoggerFactory.getLogger(JBossClusteredSSOValveFilter.class);
+
+ // JBoss clustered SSO valve
+ private SingleSignOn ssoValve = null;
+
+ // Whether attempt to find sso valve has been already performed
+ private boolean ssoValveAttempted = false;
+
+ // Helper enum, which is used to obtain instance of catalina request
+ private FilterStateEnum filterState = FilterStateEnum.BEFORE_INIT;
+
+ @Override
+ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
+ {
+ SingleSignOn ssoValve = getSSOValve();
+
+ // Simply continue with filter chain if jboss sso valve not present. Otherwise process it.
+ if (ssoValve != null)
+ {
+ // Get Catalina request (accessible only on JBoss)
+ Request tomcatRequest = getCurrentCatalinaRequest();
+
+ if (tomcatRequest != null)
+ {
+ Session tomcatSession = tomcatRequest.getSessionInternal();
+
+ // This means that request is going to PortalLoginController to start Login request
+ if ("/login".equals(tomcatRequest.getServletPath()) && tomcatRequest.getNote(Constants.REQ_SSOID_NOTE) == null)
+ {
+ chain.doFilter(request, response);
+
+ // Now credentials are in session and we can save them as note (notes are not replicated)
+ Credentials credentials = (Credentials) tomcatSession.getSession().getAttribute(Credentials.CREDENTIALS);
+ if (log.isDebugEnabled())
+ {
+ log.debug("Saving credentials " + credentials + " into session note for SSO valve.");
+ }
+ tomcatSession.setNote(NOTE_CREDENTIALS, credentials);
+
+ return;
+ }
+ else if (tomcatSession.getNote(NOTE_CREDENTIALS) != null && tomcatRequest.getRemoteUser() != null)
+ {
+ // We are just logged. SSO valve needs to be updated with "real" password of user instead of wci ticket.
+ Credentials credentials = (Credentials) tomcatSession.getNote(NOTE_CREDENTIALS);
+ tomcatSession.removeNote(NOTE_CREDENTIALS);
+
+ if (credentials != null)
+ {
+ String ssoId = (String) tomcatRequest.getNote(Constants.REQ_SSOID_NOTE);
+ if (log.isDebugEnabled())
+ {
+ log.debug("Update SSO valve values with real credentials of user " + credentials.getUsername());
+ }
+ ssoValve.register(
+ ssoId,
+ tomcatSession.getPrincipal(),
+ tomcatRequest.getAuthType(),
+ credentials.getUsername(),
+ credentials.getPassword());
+ }
+ }
+ }
+ }
+
+ // Continue with filter chain
+ chain.doFilter(request, response);
+ }
+
+ @Override
+ public void destroy()
+ {
+ this.ssoValve = null;
+ }
+
+ // ------------------------------------------------------ Private helper methods
+
+ private SingleSignOn getSSOValve()
+ {
+
+ // Return ssoValve if some client already tried to find it
+ if (ssoValveAttempted)
+ {
+ return ssoValve;
+ }
+
+ // Find ssoValve
+ findSSOValve();
+
+ return ssoValve;
+ }
+
+ private synchronized void findSSOValve()
+ {
+ // This means that another client already tried to find sso valve
+ if (ssoValveAttempted)
+ {
+ return;
+ }
+
+ // We need to have "cluster" profile active, and we need to be on JBoss. Otherwise SSO valve can't be used
+ if (!ExoContainer.getProfiles().contains("cluster"))
+ {
+ }
+ else if (getCurrentCatalinaRequest() == null)
+ {
+ }
+ else
+ {
+ // Let's try to find SSOValve with JBossWeb api
+ Request req = getCurrentCatalinaRequest();
+
+ Wrapper wrapper = req.getWrapper();
+ Container parent = wrapper.getParent();
+
+ while ((ssoValve == null) && (parent != null))
+ {
+ if (!(parent instanceof Pipeline))
+ {
+ parent = parent.getParent();
+ continue;
+ }
+ Valve valves[] = ((Pipeline) parent).getValves();
+ for (int i = 0; i < valves.length; i++)
+ {
+ if (valves[i] instanceof SingleSignOn)
+ {
+ ssoValve = (SingleSignOn) valves[i];
+ break;
+ }
+ }
+ if (ssoValve == null)
+ {
+ parent = parent.getParent();
+ }
+ }
+ }
+
+ // Mark that finding has been performed
+ this.ssoValveAttempted = true;
+
+ if (ssoValve != null)
+ {
+ log.info("Found JBoss ClusteredSingleSignOn Valve at " + ssoValve);
+ }
+ else
+ {
+ log.info("No JBoss ClusteredSingleSignOn Valve is present");
+ }
+ }
+
+ // Obtain correct instance of catalina Request. Current request is bound to ThreadLocal field, but class is different in JBoss 5 and JBoss 6.
+ private Request getCurrentCatalinaRequest()
+ {
+ if (filterState == FilterStateEnum.SECURITY_ASSOC_VALVE)
+ {
+ return getCurrentTomcatRequestFromValve("org.jboss.web.tomcat.security.SecurityAssociationValve");
+ }
+ else if (filterState == FilterStateEnum.ACTIVE_REQUEST_VALVE)
+ {
+ return getCurrentTomcatRequestFromValve("org.jboss.web.tomcat.service.request.ActiveRequestResponseCacheValve");
+ }
+ else if (filterState == FilterStateEnum.NOT_JBOSS)
+ {
+ return null;
+ }
+ else
+ {
+ // We need to find correct valve and obtain catalina request from it
+ Request req = getCurrentTomcatRequestFromValve("org.jboss.web.tomcat.security.SecurityAssociationValve");
+ if (req != null)
+ {
+ filterState = FilterStateEnum.SECURITY_ASSOC_VALVE;
+ }
+ else
+ {
+ req = getCurrentTomcatRequestFromValve("org.jboss.web.tomcat.service.request.ActiveRequestResponseCacheValve");
+ if (req != null)
+ {
+ filterState = FilterStateEnum.ACTIVE_REQUEST_VALVE;
+ }
+ else
+ {
+ filterState = FilterStateEnum.NOT_JBOSS;
+ }
+ }
+
+ return req;
+ }
+ }
+
+ private Request getCurrentTomcatRequestFromValve(String valveClassName)
+ {
+ try
+ {
+ Class<?> securityAssociationValve = Thread.currentThread().getContextClassLoader().loadClass(valveClassName);
+ Field activeRequest = securityAssociationValve.getDeclaredField("activeRequest");
+ ThreadLocal<Request> threadLocal = (ThreadLocal<Request>) activeRequest.get(null);
+ Request req = threadLocal.get();
+ if (log.isTraceEnabled())
+ {
+ log.trace("Current catalina Request obtained from " + valveClassName);
+ }
+ return req;
+ }
+ catch (Exception e)
+ {
+ log.debug("Can't obtain current catalina Request from " + valveClassName);
+ return null;
+ }
+ }
+
+ private enum FilterStateEnum
+ {
+ // We didn't try to obtain any catalina Request
+ BEFORE_INIT,
+ // We are not on JBoss
+ NOT_JBOSS,
+ // We are on JBoss 5.1 or earlier (Current catalina request can be obtained from SecurityAssociationValve threadlocal field)
+ SECURITY_ASSOC_VALVE,
+ // We are on JBoss 6 or EPP 5.1.1 (Current catalina request can be obtained from ActiveRequestResponseValve threadlocal field)
+ ACTIVE_REQUEST_VALVE
+ }
+
+}
Modified: epp/portal/branches/EPP_5_2_Branch/web/portal/src/main/webapp/WEB-INF/web.xml
===================================================================
--- epp/portal/branches/EPP_5_2_Branch/web/portal/src/main/webapp/WEB-INF/web.xml 2011-11-15 04:07:35 UTC (rev 8069)
+++ epp/portal/branches/EPP_5_2_Branch/web/portal/src/main/webapp/WEB-INF/web.xml 2011-11-15 09:05:45 UTC (rev 8070)
@@ -88,6 +88,11 @@
<filter-class>org.exoplatform.web.login.RememberMeFilter</filter-class>
</filter>
+ <filter>
+ <filter-name>JBossClusteredSSOValveFilter</filter-name>
+ <filter-class>org.exoplatform.web.login.JBossClusteredSSOValveFilter</filter-class>
+ </filter>
+
<filter>
<filter-name>ClusteredSSOFilter</filter-name>
<filter-class>org.exoplatform.web.login.ClusteredSSOFilter</filter-class>
@@ -125,6 +130,11 @@
</filter-mapping>
<filter-mapping>
+ <filter-name>JBossClusteredSSOValveFilter</filter-name>
+ <url-pattern>/*</url-pattern>
+ </filter-mapping>
+
+ <filter-mapping>
<filter-name>ClusteredSSOFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
13 years, 1 month