portals-jetspeed-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From tay...@apache.org
Subject cvs commit: jakarta-jetspeed/proposals 0005.txt
Date Wed, 25 Apr 2001 00:04:25 GMT
taylor      01/04/24 17:04:25

  Modified:    proposals 0005.txt
  Log:
  updated the profiler service proposal :
  - NLS support using directories (not suffixes)
  - the anonymous directory is now hardcoded to psml/anon as per Santiago's suggestion
  - improved newAccount/creation of default resource
  
  Revision  Changes    Path
  1.3       +281 -174  jakarta-jetspeed/proposals/0005.txt
  
  Index: 0005.txt
  ===================================================================
  RCS file: /home/cvs/jakarta-jetspeed/proposals/0005.txt,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- 0005.txt	2000/12/22 13:26:09	1.2
  +++ 0005.txt	2001/04/25 00:04:25	1.3
  @@ -1,6 +1,6 @@
  -Jetspeed Proposal: role-based authorization concept
  -LAST MODIFIED: $Date: 2000/12/22 13:26:09 $
  -AUTHOR:  david.taylor@bluesunrise.com
  +Jetspeed Proposal: Profiler Service
  +LAST MODIFIED: $Date: 2001/04/25 00:04:25 $
  +AUTHOR:  david@bluesunrise.com (David S. Taylor)
   STATUS:  approved, work in progress for 1.3a2 release
   
   ============================
  @@ -79,7 +79,7 @@
   
   This resource name simply identifies the resource that the user is requesting.  An example
of a 'BenefitsPage' resource would be:
   
  -http://host/servlet/jetspeed/profile/BenefitsPage
  +http://host/servlet/jetspeed/page/BenefitsPage
   
   When no name or path is specified, the default resource is used for the current user. The
resource name can also have an extension. If it is omitted, the default is to append a configurable
extension (PSML).
   
  @@ -89,17 +89,17 @@
   
   Here are the supported parameters in a resource path url:
   
  -/profile/<ResourceName> - Specifies the name of the profiling resource.
  +/page/<ResourceName> - Specifies the name of the profiling resource.
   
   /role/<RoleName> - Specifies that the request can only be satisfied by a common role
resource . 
  -An example would be /profile/FinancePage/role/Accountant/, meaning that we are requesting
the FinancePage resource, and it is the Finance resource for the Accountant role. It will
be up to the Profiler implementation to determine if the user is authorized to assume this
role. The Security service, whether it is Turbine Security or other, should hold the controlling
access information.
  +An example would be /page/FinancePage/role/Accountant/, meaning that we are requesting
the FinancePage resource, and it is the Finance resource for the Accountant role. It will
be up to the Profiler implementation to determine if the user is authorized to assume this
role. The Security service, whether it is Turbine Security or other, should hold the controlling
access information.
   
   /group/<groupName> - Specifies that the request can only be satisfied by a common
group resource. 
  -An example would be /group/Finance/profile/BenefitsPage, meaning that we are requesting
the BenefitsPage, and it is the Benefits page for the group 'Finance'. It will be up to the
Profiler implementation to determine if the user is a member of this group. The Security service,
whether it be Turbine Security or other, should hold this mapping.
  +An example would be /group/Finance/page/BenefitsPage, meaning that we are requesting the
BenefitsPage, and it is the Benefits page for the group 'Finance'. It will be up to the Profiler
implementation to determine if the user is a member of this group. The Security service, whether
it be Turbine Security or other, should hold this mapping.
   
   /media-type/<mediaType> - To specifically request a mediatype in the request.
   
  -/user/ - Specifies that the request can only be satisfied by a user resource. An example
would be /profile/BenefitsPage/user/, meaning that we are requesting the BenefitsPage, but
only for the current user. Specifying the name of the user is not allowed, only the authenticated
username is applied. This format breaks the rules of Turbine name/value pairs in parameters.
Thus, the 'user' keyword must be specified last in the resource path.
  +/user/ - Specifies that the request can only be satisfied by a user resource. An example
would be /page/BenefitsPage/user/, meaning that we are requesting the BenefitsPage, but only
for the current user. Specifying the name of the user is not allowed, only the authenticated
username is applied. This format breaks the rules of Turbine name/value pairs in parameters.
Thus, the 'user' keyword must be specified last in the resource path.
   
   
   When no user/group/role parameter is specified, the resource is resolved by first looking
for a user resource, then a group resource, and finally a role resource. Only groups and roles
that the user has read acess priveleges will be considered. 
  @@ -109,45 +109,46 @@
   --------------------------------
   
   Resources can optionally be localized. 
  -This is done by suffixing the resource name. The suffix is made up of a required ISO-639
standard two-character language abbreviation, and an optional IS0-3166 standard two-character
country code abbreviation.
  +Resources are localized by placing them in sub-directories based on language and country
code abbreviations. The language-code sub-directory contains one or more country-code subdirectories.

   
  -The suffix is of the format:
  +The language-code directory name is specified with an ISO-639 standard two-character language
abbreviation. The country-code subdirectory is optional, and is specified with an IS0-3166
standard two-character country code abbreviation.
   
  -_lc_cc 
  +An example:
   
  -where:
   
  -	lc = language code
  -	cc = country code
  +example:
   
  -Some examples 
  +user
  +   |-- david
  +        |-- html
  +             |-- fr                          // french language language-code
  +                  |-- FR                     // France country-code
  +                  |-- BE                     // Belgium country-code
  +
  +NOTE: The country codes must be in upper-case
   
  -groups/accounting/html/default_fr_FR.psml    // french language, France
  -groups/accounting/html/default_fr.psml       // french language, any country
   
   For a given locale of fr_FR, the search order for the default accounting resource would
be:
   
  -groups/accounting/html/default_fr_FR.psml    
  -groups/accounting/html/default_fr.psml       
  +groups/accounting/html/fr/FR/default.psml    
  +groups/accounting/html/fr/default.psml       
   groups/accounting/html/default.psml   
  -
  -The profiler will look at the "Content Language" HTML header for locale specific settings.
If there are multiple settings, all settings will be searched until the first resource is
found.
  -
  -Localization can be configured in the JetspeedResources.properties file.
  -
  -You can configure a default language. This language will be considered the default language
and no suffix will be necessary for their resources.
  -
  -# only french belgium
  -profiler.language.default=fr_BE
  +groups/accounting/fr/FR/default.psml   
  +groups/accounting/fr/default.psml   
  +groups/accounting/default.psml
  +groups/FR/fr/default.psml
  +groups/fr/default.psml
  +groups/default.psml
  +fr/FR/default.psml
  +fr/default.psml
  +default.psml                                  // finally, look in the psml root
   
  -# default language any spanish
  -profiler.language.default=es
  +The profiler looks at the "Content Language" HTML header for locale specific settings.
If there are multiple settings, all settings will be searched until the first resource is
found. (This is currently not supported)
   
  -# all resources must be suffixed
  -profiler.language.default=
  +Specifying a resource in a resource path by language-code or country-code is currently
not supported.
   
   To turn on/off all localization checking:
  -profiler.default=true/false
  +services.ProfileManager.language=true
   
   For a complete list of ISO-639 standard language abbreviations, see:
   http://www.ics.uci.edu/pub/ietf/http/related/iso639.txt
  @@ -162,37 +163,45 @@
   
   Optionally, names can include the media type explicitly.
   
  -http://host/servlet/jetspeed/profile/BenefitsPage/media-type/html/user/
  +http://host/servlet/jetspeed/media-type/html
   
  -In this case, the 'media-type' parameter must be specified, and then the actual media type
as the parameter value. The above example explicitly asks for the html resource for the BenefitsPage,
and explicitly for the current user. First the profiler will look for the media type in the
resource name. If it is not specified there, it will then query the CapabilityMap.
  +In this case, the 'media-type' parameter must be specified, and then the actual media type
as the parameter value. 
  +The above example explicitly asks for the html resource for the current user. First the
profiler will look for the media type in the resource name. If it is not specified there,
it will then query the CapabilityMap.
   
   
   -------------------------------
   Default Media-Type and Fallback
   --------------------------------
   
  -If a request is for a given media type, and the resource is not found for the given media
type, then the profiler will fallback to a default resource if available. This default resource
is assumed to work for all media types without a specific resource. The default media type
resource should be placed in the root directory for a given user, role or group.
  +If a request is for a given media type, and the resource is not found for the 
  +given media type, then the profiler will fallback to a default resource if available. This
default resource is assumed to work for all media types without a specific resource. The default
media type resource should be placed in the root directory for a given user, role or group.
   
  +When searching for default resources, the profiler will search back up language trees at
each node in the fallback path.
   
  +
   -------------------------------
   Anonymous Access and Profiles
   --------------------------------
  -
  -The default resource shown to anonymous logons is configured with profiler.anon.directory
setting. A device specific path could be set here, but probably should not so that Jetspeed
can autodectect the media type.
   
  -# Directory used for anonymous access
  -profiler.anon.directory=/user/default/
  +The resources shown to anonymous logons are stored in the /psml/anon directory tree. 
  +The /psml/anon directory can be configured for default resources and specific resouces
based on media type and language, just like in any other directory.
   
   The actual resource displayed is then dependent on media type, language, and the default
resource markup filename.
  +
  +-------------------------------
  +Creation of New Users
  +--------------------------------
   
  -Profiles available to anonymous users are configured with:
  +The profiler has a hook into the creation of new users. 
  +The profiler will search the fallback path starting at the /psml/user directory. You can
set your default resources anywhere in the fallback path, such as:
   
  -profiler.anon.profiles=/role/TennisNewUserProfile
  -profiler.anon.profiles=/role/RugbyNewUserProfile
  -profiler.anon.profiles=/role/BadmintonNewUserProfile
  +/psml/user/default.psml
  +/psml/user/html/fr/default.psml        // careful - a user may also be 'html'
  +/psml/html/fr/default.psml             // fallback to root and up to language 
  +/psml/html/default.psml
  +/psml/default.psml
   
  -These are not used directly by the default profiler, but could be used by applications
to provide choices of profiles available to anonymous users.
  -The roles must actually have their security setup correctly to work, meaning that access
should be given to 'everyone' on these roles.
  +As the examples show above, when searching for the default resource for a new user, the
profiler will search down the fallback path, and at each level, it will attempt to search
backup for media type, and then for languages specific resources.
   
   -------------------------------
   Authorized Profiles
  @@ -202,16 +211,22 @@
   profiler.authorized.profiles=/role/engineer/
   profiler.authorized.profiles=/group/accounting/
   
  +NOTE: this feature is not implemented.
  +
   --------------------------------
   Cookie-based Anonymous Sessions
   --------------------------------
  -Cookies are used to automatically remember an unauthorized user's last profile The cookie
would remember which 'anon' role it used last. This provides access for unauthorized users
to other resources besides the default.
  +Cookies are used to automatically remember an unauthorized user's last profile.
  + The cookie would remember which 'anon' role it used last. This provides access for unauthorized
users to other resources besides the default.
  +
  +NOTE: this feature is not implemented.
   
   --------------------------------
   Cookie-based Authorized Sessions
   --------------------------------
   Cookies are used to automatically logon an authorized user and remember the default profile
for the authorized user.
   
  +NOTE: this feature is not implemented.
   
   --------
   Profile 
  @@ -224,40 +239,36 @@
   Jetspeed Resources Configuration
   -----------------------------------
   
  -# The Profiler Service is implemented as a Turbine service.
  -services.Profiler.classname=org.apache.jetspeed.services.profiler.JetspeedProfilerService
  +# The Profile Manager Service is implemented as a Turbine service.
  +services.ProfileManager.classname=org.apache.jetspeed.services.profiler.JetspeedProfileManagerService
   
   # The webapp relative path to the root profiling directory
  -services.Profiler.root=/profiles/
  -
  -# The webapp relative path to directory used for anonymous access
  -services.Profiler.anon.dir=/profiles/user/default/
  +services.ProfileManager.root=/WEB-INF/psml
   
   # The default resource filename
  -services.Profiler.resource.default=default
  +services.ProfileManager.resource.default=default
   
   # The default resource filename extension 
  -services.Profiler.resource.ext=psml
  +services.ProfileManager.resource.ext=.psml
   
   # Use security?
  -services.Profiler.security=false
  -
  -# language configuration
  -services.Profiler.language=false
  -
  -# ex: only french belgium
  -#services.Profiler.language.default=fr_BE
  -# ex: default language any spanish
  -#services.Profiler.language.default=es
  -# default: all resources must be suffixed
  -services.Profiler.language.default=
  +# if you aren't securing your psml files, turn this off
  +services.ProfileManager.security=false
   
  -# anonymous profile list
  -services.Profiler.profiles.anon=
  +# Use language?
  +# turn off language profiling if you have a one-language site
  +services.Profiler.language=true
  +
  +# Use NameCache?
  +# the name cache speeds up profiling, but if you want to 
  +#  add psml resources without taking the server down, the
  +#  cache currently doesn't support it
  +services.ProfileManager.namecache=false
  +
  +# Enable?
  +# If your psml is from version 1.3a1 or before, set to false
  +services.ProfileManager.enable=true
   
  -# authorized profile list
  -services.Profiler.profiles.authorized=
  -
   ----------------
   Directory Layout
   -----------------
  @@ -270,6 +281,7 @@
      | ---    / user
      | ---    / role
      | ---    / group
  +   | ---    / anon
      
   Under the /user subtree, are the directories for all users and likewise for roles and groups:
   
  @@ -288,6 +300,14 @@
      | ---    / marketing
      | ---    / accounting
   
  +anon
  +   | ---    / html
  +   | ---         / en
  +   | ---             / US
  +   | ---    / wml
  +   | ---         / fr
  +   | ---             / FR
  +
   
   Under each of these subtrees, there is one directory for each media type. 
   Media types are capable of supporting one or more mime types. 
  @@ -323,79 +343,101 @@
   Here is an example tree:
   
   {root}
  -	users
  -		{default}
  -		  default.psml     // fallback: can be used as crossdevice media 
  -			html
  -				default.psml
  -		raul
  -			html
  -				default.psml
  -				page1.psml
  -			wml
  -				default.psml
  -		steve
  -		  default.psml     // fallback: can be used as crossdevice media 
  -			html
  -				default.psml
  -	groups
  -		accounting
  -			html
  -				default.psml
  -				page1.psml
  -			wml
  -				default.psml
  -		marketing
  -			html
  -				default.psml
  +    users
  +        {default}
  +          default.psml     // fallback: can be used as crossdevice media 
  +            html
  +               en
  +                 US
  +                   default.psml
  +                   news.psml
  +                 UK
  +                   default.psml
  +                   news.psml
  +        raul
  +            html
  +                default.psml
  +                page1.psml
  +            wml
  +                default.psml
  +        steve
  +          default.psml     // fallback: can be used as crossdevice media 
  +            html
  +                default.psml
  +    groups
  +        accounting
  +            html
  +               en
  +                  default.psml
  +                  page1.psml
  +               fr
  +                  default.psml
  +                  page1.psml
  +            wml
  +                default.psml
  +        marketing
  +            html
  +                fr
  +                  default.psml
  +    anon
  +          default.psml     // default anon user: can be used as crossdevice 
  +
   
   An incoming request from an html browser of:
   
  -	http://server/servlet/jetspeed
  +    http://server/servlet/jetspeed
   
   would map to the resource path:
  +
  +    {root}/user/{current-user}/html/default.psml
  +
  +An incoming request from an html browser with a language-code of 'fr' and country code
of 'FR':
   
  -	{root}/user/{current-user}/html/default.psml
  +    http://server/servlet/jetspeed
   
  +would map to the resource path:
  +
  +    {root}/user/{current-user}/html/fr/Fr/default.psml
  +
   An incoming request from an html browser of:
   
  -	http://server/servlet/jetspeed/group/sales/profile/SalesCenter
  +    http://server/servlet/jetspeed/group/sales/page/SalesCenter
   
   would map to the resource path:
   
  -	{root}/group/sales/html/SalesCenter.psml
  +    {root}/group/sales/html/SalesCenter.psml
   
   An incoming request from a wml browser of:
   
  -	http://server/servlet/jetspeed/profile/JavaCenter/role/programmer/
  +    http://server/servlet/jetspeed/page/JavaCenter/role/programmer/
   
   would map to the resource path:
   
  -	{root}/role/programmer/wml/JavaCenter.psml
  +    {root}/role/programmer/wml/JavaCenter.psml
   
   An incoming request from a wml browser of for user 'raul':
   
  -	http://server/servlet/jetspeed/profile/MySportsPortal
  +    http://server/servlet/jetspeed/page/MySportsPortal
    
   would map to the resource path:
   
  -	{root}/user/raul/wml/MySportsPage.psml
  +    {root}/user/raul/wml/MySportsPage.psml
   
   and if that failed, it would try again for the user's groups and roles.
   it may find a page such as:
   
  -	{root}/role/footballfan/wml/MySportsPage.psml
  +    {root}/role/footballfan/wml/MySportsPage.psml
   
   
   -------------------------
   Modifications to the Code
   -------------------------
   
  -The JetspeedProfilerService will be implemented in the org.apache.jetspeed.services.profiler
package.
  +The JetspeedProfileManagerService will be implemented in the org.apache.jetspeed.services.profiler
package.
   
  -The ProfilerService interface will be placed in the org.apache.jetspeed.services.profiler
package.
  +The ProfileManagerService interface will be placed in the org.apache.jetspeed.services.profiler
package.
   
  -The Profile interface will be place in the org.apache.jetspeed.om.profiler
  +The ProfileManager commodity accessor classw will be placed in the org.apache.jetspeed.services.profiler
package.
   
   The JetspeedProfile class will be implemented and placed in the org.apache.jetspeed.om.profiler
package 
   
  @@ -403,24 +445,17 @@
   Home.java will need to be modified.
   This is under the assumption that there is only one entry point into Jetspeed markup generation.
   
  -The package org.apache.jetspeed.profiler will be removed.
  -All import statements to this package will be replaced with imports to the service.
  -A few new string resources will be adaded to JetspeedResources.java 
  -
   ------------------------------
   Modifications to Configuration
   ------------------------------
   
   The Profile Registry in the jcfg file would be removed.
   
  -The 'psml' directory will be removed. 
  -																													
  -A new directory under 'content' will be added, 'profiles'.
  -It will have the structure as shown in the default implementation above.
  +                                                                                      
                            
  +A new directory structure as described above is added under the 'WEB-INF/psml' directory.
   
  -The JetspeedResources.Properties will be modified to add the configuration settings described
above.
  +The JetspeedResources.properties will be modified to add the configuration settings described
above.
   
  -Add the profiler service to the TurbineResources.Properties.
   
   ====================
   Interfaces
  @@ -430,27 +465,125 @@
   The Profile interface defines a profile instance. 
   A Profile is the object representation of a Jetspeed PSML resource. 
   
  -public interface ProfilerService extends Service {
  +public interface ProfileManagerService extends Service
  +{
    
       /** The name of this service */
       public String SERVICE_NAME = "ProfileManager";
   
  -	/*
  -	 *	get the Profile object using the Rundata state and capability map
  -	 *	this is the mapping functionality of the profiler
  +    /**
  +     *  get the Profile object using the Rundata state and capability map
  +     * this is the mapping functionality of the profiler
        *
        * @param rundata the rundata object for the current request
        * @return a Profile object if found by the manager or null
  -	 */
  -	public Profile getProfile(RunData rundata);
  +     */
  +    public Profile getProfile(RunData rundata, CapabilityMap cm)
  +        throws ProfileException;
  +     /**
  +      * sets a profile as the current profile for this session
  +      *
  +      * @param rundata the rundata object for the current request
  +      * @param profile the profile object to set in the session context
  +      */
  +    public void setSessionProfile(RunData rundata, Profile profile);
  +
  +    /**
  +     * get the Profile object using the Rundata state and capability map
  +     * this is the mapping functionality of the profiler
  +     *
  +     * @param rundata the rundata object for the current request
  +     * @return a new Profile object
  +     */
  +    public Profile getProfile(RunData rundata)
  +                throws ProfileException;
  +
  +    /**
  +     * get the Profile object using the Rundata state and capability map
  +     * this is the mapping functionality of the profiler
  +     *
  +     * @param rundata the rundata object for the current request
  +     * @return a new Profile object
  +     */
  +    public Profile getProfile(RunData data, MimeType mt)
  +        throws ProfileException;
  +
  +     /**
  +      * gets the current profile for this session
  +      *
  +      * @param rundata the rundata object for the current request
  +      * @param profile the profile object to set in the session context
  +      */
  +    public Profile getSessionProfile(RunData rundata)
  +        throws ProfileException;
  +
  +    /**
  +     *  create a user profile and its resources (psml) for a new user
  +     *
  +     * @param rundata the rundata object for the current request
  +     * @param userName the new user to create
  +     * @return a new Profile object
  +     */
  +    public Profile createUserProfile(RunData rundata, String userName)
  +        throws IOException, ProfileException;
   
  -	 /*
  -	  * stores a cookie in response to the current resource
  +     /**
  +      * stores a cookie in response to the current resource
         *
         * @param rundata the rundata object for the current request
  -	  */
  -	 public void storeCookie(RunData rundata);
  +      */
  +     public DynamicURI makeDynamicURI( RunData data )
  +        throws ProfileException;
  +
  +     /**
  +      * stores a cookie in response to the current resource
  +      *
  +      * @param rundata the rundata object for the current request
  +      */
  +     public void storeCookie(RunData rundata);
  +
  +    /**
  +     *  turn on/off security checking when accessing profile resources
  +     *
  +     * @param flag indicates to turn security on with true, off with false.
  +     */
  +    public void setSecurity( boolean flag );
  +
  +    /**
  +     *  get status of security checking when accessing profile resources
  +     *
  +     * @return the security-checking status: true in on, false is off
  +     */
  +    public boolean getSecurity();
  +
  +    /**
  +     *  turn on/off NLS (language support) when accessing profile resources
  +     *
  +     * @param flag indicates to turn NLS on with true, off with false.
  +     */
  +    public void setLanguageProfiling( boolean flag );
   
  +    /**
  +     *  get status of NLS (language support) when accessing profile resources
  +     *
  +     * @return the language profiling status: true in on, false is off
  +     */
  +    public boolean getLanguageProfiling();
  +
  +    /**
  +     *  turn on/off caching of resource names
  +     *
  +     * @param flag indicates to turn caching on with true, off with false.
  +     */
  +    public void setResourceNameCaching( boolean flag );
  +
  +    /**
  +     *  get status of caching of resource names
  +     *
  +     * @return the resource caching status: true in on, false is off
  +     */
  +    public boolean getResourceNameCaching();
  +
   }
   
   public interface Profile extends Initable {
  @@ -459,65 +592,33 @@
   
          @return The root portlet set for this profile.
        */
  -	public PortletSet getRootSet();
  +    public PortletSet getRootSet(RunData rundata);
   
       /**
          Gets the PortletSetFactory for this profile
   
          @return The portlet set factory for this profile.
  +     */
  +    public PortletSetFactory getFactory();
  +
  +    /**
  +       Gets the URL for this profile, a fully qualified local path and resource name
  +
  +       @return The URL of the profile
        */
  -	public PortletSetFactory getFactory();
  +    public String getURL();
   
  +    public void setURL(String url);
   
  -	/**
  -	   stores the resource by merging and rewriting the psml file
  +    /**
  +       stores the resource by merging and rewriting the psml file
   
          @throws ProfileException if an error occurs storing the profile
  -	*/
  -	public void store() throws ProfileException;
  +    */
  +    public void store() throws ProfileException;
   
   }
   
  -------------------------------------------
  -Jetspeed Default Implementation Accessors:
  -------------------------------------------
  -
  -	class JetspeedProfile
  -	{
  -	   /*
  -		   accessors
  -			*/
  -		String getUser();
  -		String getGroup();
  -		String getRole();
  -		String getResourceName();
  -		String getResourcePath();
  -		String getMediaType();
  -		String getLanguageCode();
  -		String getCountryCode();
  -	}
  -
  -	class JetspeedProfilerService
  -	{
  -		/*
  -		 get the base URL for the profile registry 
  -		 */
  -		String getBaseURL();
  -	
  -		/*
  -		 get the default resource name
  -		 */
  -		String getDefaultResourceName();
  -	
  -		/*
  -		   is security enabled
  -			*/
  -		 boolean isSecurityEnabled();
  -	
  -		 getAuthorizedProfiles();
  -		 getAnonymousProfiles();
  -	}	
  -
   
   ==============================
   Future Directions
  @@ -529,5 +630,11 @@
   
   - The Profile's content generation based on runtime criteria, not static psml files
   
  +- Search Multiple languages supplied in device header
  +
  +- Request a resource by language or country code
  +
  +- Authorized Profiles
   
  +- Cookie-based sessions
   
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jetspeed-dev-help@jakarta.apache.org


Mime
View raw message