package act.handler; /*- * #%L * ACT Framework * %% * Copyright (C) 2014 - 2017 ActFramework * %% * Licensed 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. * #L% */ import act.Destroyable; import act.app.ActionContext; import act.handler.builtin.StaticFileGetter; import act.security.CORS; import act.security.CSRF; import org.osgl.$; /** * Defines a thread-save function object that can be applied * to a {@link ActionContext} context to * produce certain output which could be applied to the * {@link org.osgl.http.H.Response} associated with the * context */ public interface RequestHandler extends $.Function<ActionContext, Void>, Destroyable { /** * Invoke handler upon an action context * * @param context the context data */ void handle(ActionContext context); /** * Indicate the handler logic is fast enough to be put into network layer's io thread and * does not require to dispatch to worker thread. * * Note a handler that implements {@link ExpressHandler} should * always return `true` for this method * * @param context the action context * @return `true` if this handler support direct io thread processing */ boolean express(ActionContext context); /** * Indicate if this request handler support partial path lookup. * Usually this method should return {@code false}. However for * certain request handler like {@link StaticFileGetter} * they need to support partial path lookup. Take the example of * the following route mapping: * <p/> * <code> * GET /public staticDir: /public * </code> * <p/> * which map url path {@code /public} to a {@code StaticFileGetter} with * base dir set to {@code /public}, it needs to support all path starts * with "/public", like "/public/js/jquery.js" etc. * * @return {@code true} if the request handler support partial path lookup * or {@code false} otherwise */ boolean supportPartialPath(); /** * Returns if the handler require framework to resolve context. Usually it needs to * resolve the context so that handler can access request params, session/flash etc. * However some static handlers doesn't require framework to do those things, e.g. * {@link StaticFileGetter} */ boolean requireResolveContext(); /** * Setting up handler for authentication. For example, initialize the missing authentication * handler, csrf failure handler. * @param context the current action context */ void prepareAuthentication(ActionContext context); /** * Returns if the handler is session free or not. If a handler is session free then * the framework will NOT resolve session * @return `true` if the handler is session free */ boolean sessionFree(); /** * Get CORS specification that specifically applied to this request handler * @return the the CORS specification applied to this request handler */ CORS.Spec corsSpec(); /** * Get CSRF specification that applied to this request handler * * @return the CSRF specification applied to this requestion handler */ CSRF.Spec csrfSpec(); }