BAEL-636: register servlet using java config (#1525)
This commit is contained in:
parent
a18d779294
commit
0bc9bfbacb
@ -0,0 +1,87 @@
|
|||||||
|
package com.baeldung.functional;
|
||||||
|
|
||||||
|
import org.springframework.boot.SpringApplication;
|
||||||
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
|
import org.springframework.boot.web.servlet.ServletRegistrationBean;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.ComponentScan;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.context.annotation.Profile;
|
||||||
|
import org.springframework.core.io.ClassPathResource;
|
||||||
|
import org.springframework.http.server.reactive.HttpHandler;
|
||||||
|
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
|
||||||
|
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
|
||||||
|
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
|
||||||
|
import org.springframework.web.reactive.function.server.RouterFunction;
|
||||||
|
import org.springframework.web.reactive.function.server.RouterFunctions;
|
||||||
|
import org.springframework.web.reactive.function.server.ServerResponse;
|
||||||
|
import org.springframework.web.server.adapter.WebHttpHandlerBuilder;
|
||||||
|
import reactor.core.publisher.Flux;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.concurrent.CopyOnWriteArrayList;
|
||||||
|
|
||||||
|
import static org.springframework.web.reactive.function.BodyInserters.fromObject;
|
||||||
|
import static org.springframework.web.reactive.function.server.RequestPredicates.*;
|
||||||
|
import static org.springframework.web.reactive.function.server.RouterFunctions.route;
|
||||||
|
import static org.springframework.web.reactive.function.server.RouterFunctions.toHttpHandler;
|
||||||
|
import static org.springframework.web.reactive.function.server.ServerResponse.ok;
|
||||||
|
|
||||||
|
@SpringBootApplication
|
||||||
|
@ComponentScan(basePackages = { "com.baeldung.functional" })
|
||||||
|
public class FunctionalSpringBootApplication {
|
||||||
|
|
||||||
|
private static final Actor BRAD_PITT = new Actor("Brad", "Pitt");
|
||||||
|
private static final Actor TOM_HANKS = new Actor("Tom", "Hanks");
|
||||||
|
private static final List<Actor> actors = new CopyOnWriteArrayList<>(Arrays.asList(BRAD_PITT, TOM_HANKS));
|
||||||
|
|
||||||
|
private RouterFunction<ServerResponse> routingFunction() {
|
||||||
|
FormHandler formHandler = new FormHandler();
|
||||||
|
|
||||||
|
RouterFunction<ServerResponse> restfulRouter = route(GET("/"), serverRequest -> ok().body(Flux.fromIterable(actors), Actor.class)).andRoute(POST("/"), serverRequest -> serverRequest
|
||||||
|
.bodyToMono(Actor.class)
|
||||||
|
.doOnNext(actors::add)
|
||||||
|
.then(ok().build()));
|
||||||
|
|
||||||
|
return route(GET("/test"), serverRequest -> ok().body(fromObject("helloworld")))
|
||||||
|
.andRoute(POST("/login"), formHandler::handleLogin)
|
||||||
|
.andRoute(POST("/upload"), formHandler::handleUpload)
|
||||||
|
.and(RouterFunctions.resources("/files/**", new ClassPathResource("files/")))
|
||||||
|
.andNest(path("/actor"), restfulRouter)
|
||||||
|
.filter((request, next) -> {
|
||||||
|
System.out.println("Before handler invocation: " + request.path());
|
||||||
|
return next.handle(request);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public ServletRegistrationBean servletRegistrationBean() throws Exception {
|
||||||
|
HttpHandler httpHandler = WebHttpHandlerBuilder
|
||||||
|
.webHandler(toHttpHandler(routingFunction()))
|
||||||
|
.prependFilter(new IndexRewriteFilter())
|
||||||
|
.build();
|
||||||
|
ServletRegistrationBean registrationBean = new ServletRegistrationBean<>(new RootServlet(httpHandler), "/");
|
||||||
|
registrationBean.setLoadOnStartup(1);
|
||||||
|
registrationBean.setAsyncSupported(true);
|
||||||
|
return registrationBean;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
@EnableWebSecurity
|
||||||
|
@Profile("!https")
|
||||||
|
static class SecurityConfig extends WebSecurityConfigurerAdapter {
|
||||||
|
@Override
|
||||||
|
protected void configure(final HttpSecurity http) throws Exception {
|
||||||
|
http
|
||||||
|
.authorizeRequests()
|
||||||
|
.anyRequest()
|
||||||
|
.permitAll();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
SpringApplication.run(FunctionalSpringBootApplication.class, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -33,7 +33,7 @@ public class RootServlet extends ServletHttpHandlerAdapter {
|
|||||||
.build());
|
.build());
|
||||||
}
|
}
|
||||||
|
|
||||||
private RootServlet(HttpHandler httpHandler) {
|
RootServlet(HttpHandler httpHandler) {
|
||||||
super(httpHandler);
|
super(httpHandler);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user