211 lines
9.1 KiB
Java
211 lines
9.1 KiB
Java
/*
|
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
* contributor license agreements. See the NOTICE file distributed with
|
|
* this work for additional information regarding copyright ownership.
|
|
* The ASF licenses this file to You under the Apache License, Version 2.0
|
|
* (the "License"); you may not use this file except in compliance with
|
|
* the License. You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*
|
|
* $Header:$
|
|
*/
|
|
package org.apache.beehive.netui.pageflow;
|
|
|
|
import org.apache.beehive.netui.core.factory.Factory;
|
|
import org.apache.beehive.netui.core.factory.FactoryConfig;
|
|
import org.apache.beehive.netui.pageflow.adapter.Adapter;
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
import javax.servlet.http.HttpServletResponse;
|
|
import javax.security.auth.login.LoginException;
|
|
|
|
|
|
/**
|
|
* Adapter interface for plugging into various Servlet containers. An implementor of this interface is "discovered" at
|
|
* runtime. The discovery process is as follows:
|
|
* <ul>
|
|
* <li>
|
|
* A list of META-INF/services/org.apache.beehive.netui.pageflow.ServletContainerAdapter resources is obtained
|
|
* from classpath. This means, for example, that a file called
|
|
* "org.apache.beehive.netui.pageflow.ServletContainerAdapter" under directory META-INF/services would be
|
|
* found inside any JAR file on classpath.
|
|
* </li>
|
|
* <li>
|
|
* Inside each of these resources is the name of a class that implements ServletContainerAdapter. This class
|
|
* is loaded, and its {@link #accept accept} method is called.
|
|
* </li>
|
|
* <li>
|
|
* If {@link #accept accept} returns <code>true</code>, then that implementation class is chosen as the current
|
|
* adapter; otherwise, the next one in the list is tried.
|
|
* </li>
|
|
* <li>If no adapters are discovered, an instance of {@link DefaultServletContainerAdapter} is used.
|
|
* </ul>
|
|
*/
|
|
public interface ServletContainerAdapter
|
|
extends Adapter
|
|
{
|
|
/**
|
|
* Tell whether the server is running in production mode.
|
|
* @return <code>true</code> if the server is running in production mode.
|
|
*/
|
|
public boolean isInProductionMode();
|
|
|
|
/**
|
|
* Tell whether a web application resource requires a secure transport protocol. This is
|
|
* determined from web.xml; for example, the following block specifies that all resources under
|
|
* /login require a secure transport protocol.
|
|
* <pre>
|
|
* <security-constraint>
|
|
* <web-resource-collection>
|
|
* <web-resource-name>Secure PageFlow - begin</web-resource-name>
|
|
* <url-pattern>/login/*</url-pattern>
|
|
* </web-resource-collection>
|
|
* <user-data-constraint>
|
|
* <transport-guarantee>CONFIDENTIAL</transport-guarantee>
|
|
* </user-data-constraint>
|
|
* </security-constraint>
|
|
* </pre>
|
|
*
|
|
* @param path a webapp-relative path for a resource.
|
|
* @param request the current HttpServletRequest.
|
|
* @return <code>Boolean.TRUE</code> if a transport-guarantee of <code>CONFIDENTIAL</code> or
|
|
* <code>INTEGRAL</code> is associated with the given resource; <code>Boolean.FALSE</code>
|
|
* a transport-guarantee of <code>NONE</code> is associated with the given resource; or
|
|
* <code>null</code> if there is no transport-guarantee associated with the given resource.
|
|
*/
|
|
public SecurityProtocol getSecurityProtocol( String path, HttpServletRequest request );
|
|
|
|
/**
|
|
* Cause the server to do a security check for the given path. If required, it does a redirect to
|
|
* change the scheme (http/https).
|
|
*
|
|
* @param path the webapp-relative path on which to run security checks.
|
|
* @param request the current HttpServletRequest.
|
|
* @param response the current HttpServletResponse.
|
|
* @return <code>true</code> if a redirect occurred.
|
|
*/
|
|
boolean doSecurityRedirect( String path, HttpServletRequest request, HttpServletResponse response );
|
|
|
|
|
|
/**
|
|
* Get the port on which the server is listening for unsecure connections.
|
|
*
|
|
* @param request the current HttpServletRequest.
|
|
* @return the port on which the server is listening for unsecure connections.
|
|
*/
|
|
public int getListenPort( HttpServletRequest request );
|
|
|
|
/**
|
|
* Get the port on which the server is listening for secure connections.
|
|
*
|
|
* @param request the current HttpServletRequest.
|
|
* @return the port on which the server is listening for secure connections.
|
|
*/
|
|
public int getSecureListenPort( HttpServletRequest request );
|
|
|
|
/**
|
|
* Log in the user, using "weak" username/password authentication.
|
|
*
|
|
* @param username the user's login name.
|
|
* @param password the user's password.
|
|
* @param request the current HttpServletRequest.
|
|
* @param response the current HttpServletResponse.
|
|
*
|
|
* @exception LoginException if the authentication failed
|
|
*/
|
|
public void login( String username, String password, HttpServletRequest request, HttpServletResponse response )
|
|
throws LoginException;
|
|
|
|
/**
|
|
* Log out the current user.
|
|
*
|
|
* @param invalidateSessions if <code>true</code>, the session is invalidated (on all single-signon webapps);
|
|
* otherwise the session and its data are left intact. To invalidate the session in only the
|
|
* current webapp, set this parameter to <code>false</code> and call invalidate() on the HttpSession.
|
|
* @param request the current HttpServletRequest.
|
|
* @param response the current HttpServletResponse.
|
|
*/
|
|
public void logout( boolean invalidateSessions, HttpServletRequest request, HttpServletResponse response );
|
|
|
|
/**
|
|
* Return the webapp context path for the given request. This differs from HttpServletRequest.getContextPath()
|
|
* only in that it will return a valid value even if the request is for the default webapp.
|
|
*
|
|
* @param request the current HttpServletRequest.
|
|
*/
|
|
public String getFullContextPath( HttpServletRequest request );
|
|
|
|
/**
|
|
* Ensure that the given session attribute is replicated in a cluster for session failover.
|
|
* This method does not need to be implemented for servers that do not support clustering and
|
|
* session failover.
|
|
*
|
|
* @param attrName the name of the session attribute for which failover should be ensured.
|
|
* @param attrVal the value of the given session attribute.
|
|
* @param request the current HttpServletRequest.
|
|
*/
|
|
public void ensureFailover( String attrName, Object attrVal, HttpServletRequest request );
|
|
|
|
/**
|
|
* Called at the beginning of each processed request.
|
|
*
|
|
* @param request the current HttpServletRequest.
|
|
* @param response the current HttpServletResponse.
|
|
*/
|
|
public void beginRequest( HttpServletRequest request, HttpServletResponse response );
|
|
|
|
/**
|
|
* Called at the end of each processed request.
|
|
*
|
|
* @param request the current HttpServletRequest.
|
|
* @param response the current HttpServletResponse.
|
|
*/
|
|
public void endRequest( HttpServletRequest request, HttpServletResponse response );
|
|
|
|
/**
|
|
* Get a context object to support Beehive Controls.
|
|
*
|
|
* @param request the current HttpServletRequest.
|
|
* @param response the current HttpServletResponse.
|
|
* @return a new ControlBeanContext.
|
|
*/
|
|
public Object createControlBeanContext( HttpServletRequest request, HttpServletResponse response );
|
|
|
|
/**
|
|
* Get the name of the platform, which may be used to find platform-specific configuration files.
|
|
*
|
|
* @return the name of the platform
|
|
*/
|
|
public String getPlatformName();
|
|
|
|
/**
|
|
* Get an event reporter, which will be notified of events like "page flow created", "action raised", etc.
|
|
*/
|
|
public PageFlowEventReporter getEventReporter();
|
|
|
|
/**
|
|
* Generic method to get a Factory class that may be container dependent.
|
|
*
|
|
* <p>
|
|
* This method is called to get the following Factory implementations:
|
|
* </p>
|
|
* <ul>
|
|
* <li>{@link org.apache.beehive.netui.core.urltemplates.URLTemplatesFactory}</li>
|
|
* </ul>
|
|
*
|
|
* @param classType the class type that the factory should extend or implement.
|
|
* @param id can be used for the case where there is more than one possible Factory
|
|
* that extends or implaments the class type.
|
|
* @param config a configuration object passed to a {@link Factory}
|
|
* @return a Factory class that extends or implemtents the given class type.
|
|
*/
|
|
public Factory getFactory( Class classType, String id, FactoryConfig config );
|
|
}
|