11
11
12
12
import org .eclipse .jetty .ee10 .cdi .CdiDecoratingListener ;
13
13
import org .eclipse .jetty .ee10 .cdi .CdiServletContainerInitializer ;
14
- import org .eclipse .jetty .plus .jndi .EnvEntry ;
15
- import org .eclipse .jetty .ee10 .security .jaspi .DefaultAuthConfigFactory ;
16
- import org .eclipse .jetty .ee10 .security .jaspi .JaspiAuthenticatorFactory ;
17
- import org .eclipse .jetty .ee10 .security .jaspi .provider .JaspiAuthConfigProvider ;
14
+ import org .eclipse .jetty .ee10 .servlet .ErrorPageErrorHandler ;
15
+ import org .eclipse .jetty .ee10 .servlet .ServletContextHandler ;
16
+ import org .eclipse .jetty .ee10 .servlet .security .ConstraintMapping ;
18
17
import org .eclipse .jetty .ee10 .servlet .security .ConstraintSecurityHandler ;
19
18
import org .eclipse .jetty .ee10 .webapp .WebAppContext ;
20
- import org .eclipse .jetty .security .DefaultIdentityService ;
21
- import org .eclipse .jetty .security .SecurityHandler ;
22
- import org .eclipse .jetty .security .jaas .JAASLoginService ;
19
+ import org .eclipse .jetty .plus .jndi .EnvEntry ;
20
+ import org .eclipse .jetty .security .Constraint ;
23
21
import org .eclipse .jetty .server .Connector ;
24
- import org .eclipse .jetty .server .Handler ;
25
22
import org .eclipse .jetty .server .HttpConfiguration ;
26
23
import org .eclipse .jetty .server .HttpConnectionFactory ;
27
- import org .eclipse .jetty .server .Request ;
28
- import org .eclipse .jetty .server .Response ;
29
24
import org .eclipse .jetty .server .Server ;
30
25
import org .eclipse .jetty .server .ServerConnector ;
31
26
import org .eclipse .jetty .server .handler .ContextHandler ;
32
- import org .eclipse .jetty .util .Callback ;
33
27
import org .eclipse .jetty .util .resource .ResourceFactory ;
34
28
import org .flywaydb .core .Flyway ;
35
29
import org .flywaydb .core .api .FlywayException ;
36
30
import org .slf4j .Logger ;
37
31
import org .slf4j .LoggerFactory ;
38
- import org .slf4j .MDC ;
39
32
40
- import jakarta .security .auth .message .config .AuthConfigFactory ;
33
+ import no .nav .foreldrepenger .abakus .app .konfig .ApiConfig ;
34
+ import no .nav .foreldrepenger .abakus .app .konfig .EksternApiConfig ;
35
+ import no .nav .foreldrepenger .abakus .app .konfig .InternalApiConfig ;
41
36
import no .nav .foreldrepenger .konfig .Environment ;
42
- import no .nav .vedtak .sikkerhet .jaspic .OidcAuthModule ;
43
37
44
38
public class JettyServer {
45
39
@@ -84,20 +78,17 @@ private static void initTrustStore() {
84
78
}
85
79
86
80
private ContextHandler createContext () throws IOException {
87
- var ctx = new WebAppContext ();
81
+ var ctx = new WebAppContext (CONTEXT_PATH , null , simpleConstraints (), null ,
82
+ new ErrorPageErrorHandler (), ServletContextHandler .NO_SESSIONS );
83
+
88
84
ctx .setParentLoaderPriority (true );
89
85
90
86
// må hoppe litt bukk for å hente web.xml fra classpath i stedet for fra filsystem.
91
- String descriptor ;
92
87
String baseResource ;
93
88
try (var factory = ResourceFactory .closeable ()) {
94
- var resource = factory .newClassLoaderResource ("/WEB-INF/web.xml" , false );
95
- descriptor = resource .getURI ().toURL ().toExternalForm ();
96
89
baseResource = factory .newResource ("." ).getRealURI ().toURL ().toExternalForm ();
97
90
}
98
- ctx .setDescriptor (descriptor );
99
91
100
- ctx .setContextPath (CONTEXT_PATH );
101
92
ctx .setBaseResourceAsString (baseResource );
102
93
ctx .setInitParameter ("org.eclipse.jetty.servlet.Default.dirAllowed" , "false" ); // Default servlet convention
103
94
ctx .setInitParameter ("pathInfoOnly" , "true" );
@@ -110,7 +101,6 @@ private ContextHandler createContext() throws IOException {
110
101
ctx .addServletContainerInitializer (new CdiServletContainerInitializer ());
111
102
ctx .addServletContainerInitializer (new org .jboss .weld .environment .servlet .EnhancedListener ());
112
103
113
- ctx .setSecurityHandler (createSecurityHandler ());
114
104
ctx .setThrowUnavailableOnStartupException (true );
115
105
116
106
return ctx ;
@@ -125,18 +115,6 @@ private static HttpConfiguration createHttpConfiguration() {
125
115
126
116
}
127
117
128
- private static SecurityHandler createSecurityHandler () {
129
- var securityHandler = new ConstraintSecurityHandler ();
130
- securityHandler .setAuthenticatorFactory (new JaspiAuthenticatorFactory ());
131
-
132
- var loginService = new JAASLoginService ();
133
- loginService .setName ("jetty-login" );
134
- loginService .setLoginModuleName ("jetty-login" );
135
- loginService .setIdentityService (new DefaultIdentityService ());
136
- securityHandler .setLoginService (loginService );
137
- return securityHandler ;
138
- }
139
-
140
118
void bootStrap () throws Exception {
141
119
konfigurerSikkerhet ();
142
120
konfigurerJndi ();
@@ -148,12 +126,6 @@ private void konfigurerSikkerhet() {
148
126
if (ENV .isLocal ()) {
149
127
initTrustStore ();
150
128
}
151
-
152
- var factory = new DefaultAuthConfigFactory ();
153
- factory .registerConfigProvider (new JaspiAuthConfigProvider (new OidcAuthModule ()), "HttpServlet" , "server " + CONTEXT_PATH ,
154
- "OIDC Authentication" );
155
-
156
- AuthConfigFactory .setFactory (factory );
157
129
}
158
130
159
131
protected void konfigurerJndi () throws NamingException {
@@ -178,8 +150,7 @@ void migrerDatabaser() {
178
150
private void start () throws Exception {
179
151
var server = new Server (getServerPort ());
180
152
server .setConnectors (createConnectors (server ).toArray (new Connector []{}));
181
- var handlers = new Handler .Sequence (new ResetLogContextHandler (), createContext ());
182
- server .setHandler (handlers );
153
+ server .setHandler (createContext ());
183
154
server .start ();
184
155
server .join ();
185
156
}
@@ -192,18 +163,28 @@ private List<Connector> createConnectors(Server server) {
192
163
return connectors ;
193
164
}
194
165
166
+ private static ConstraintSecurityHandler simpleConstraints () {
167
+ var handler = new ConstraintSecurityHandler ();
168
+ // Slipp gjennom kall fra plattform til JaxRs. Foreløpig kun behov for GET
169
+ handler .addConstraintMapping (pathConstraint (Constraint .ALLOWED , InternalApiConfig .API_URI + "/*" ));
170
+ // Slipp gjennom til autentisering i JaxRs / auth-filter
171
+ handler .addConstraintMapping (pathConstraint (Constraint .ALLOWED , ApiConfig .API_URI + "/*" ));
172
+ // Slipp gjennom til autentisering i JaxRs / auth-filter
173
+ handler .addConstraintMapping (pathConstraint (Constraint .ALLOWED , EksternApiConfig .API_URI + "/*" ));
174
+ // Alt annet av paths og metoder forbudt - 403
175
+ handler .addConstraintMapping (pathConstraint (Constraint .FORBIDDEN , "/*" ));
176
+ return handler ;
177
+ }
178
+
179
+ private static ConstraintMapping pathConstraint (Constraint constraint , String path ) {
180
+ var mapping = new ConstraintMapping ();
181
+ mapping .setConstraint (constraint );
182
+ mapping .setPathSpec (path );
183
+ return mapping ;
184
+ }
185
+
195
186
private Integer getServerPort () {
196
187
return this .serverPort ;
197
188
}
198
189
199
- /**
200
- * Legges først slik at alltid resetter context før prosesserer nye requests. Kjøres først så ikke risikerer andre har satt Request#setHandled(true).
201
- */
202
- static final class ResetLogContextHandler extends Handler .Abstract {
203
- @ Override
204
- public boolean handle (Request request , Response response , Callback callback ) {
205
- MDC .clear ();
206
- return false ;
207
- }
208
- }
209
190
}
0 commit comments