forked from actframework/actframework
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRequestHandler.java
More file actions
135 lines (120 loc) · 4.39 KB
/
RequestHandler.java
File metadata and controls
135 lines (120 loc) · 4.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
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.FileGetter;
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);
/**
* If this method returns `true` then the following events will not get triggered:
*
* * {@link act.handler.event.PreHandle}
* * {@link act.handler.event.BeforeResultCommit}
* * {@link act.handler.event.AfterResultCommit}
* * {@link act.handler.event.PostHandle}
*
* @param context the action context.
* @return `true` if it shall skip triggering result commit events for this handler.
*/
boolean skipEvents(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 FileGetter}
* 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 FileGetter}
*/
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 request handler
*/
CSRF.Spec csrfSpec();
/**
* Get `Content-Security-Policy` that applied to this request handler
*
* @return `Content-Security-Policy` that applied to this request handler
*/
String contentSecurityPolicy();
boolean disableContentSecurityPolicy();
}