How to run jBPM REST API in Spring Boot
This is a quick article to discuss how to configure jBPM projects with Spring Boot to include the Swagger UI. The Swagger UI is an handy wrapper to invoke jBPM REST API.
Firstly, if you are new to jBPM REST API we recommend checking this article: jBPM REST API made simple
That being said, to enable the Swagger UI in jBPM you need two main actions:
- Enable Swagger in the Spring Boot configuration
- Include the relevant dependencies
- Configure the Security to allow permissions to access the REST API
Let’s get started!
How to enable Swagger UI in Spring Boot
Firstly, enable the SwaggerUI by setting the kieserver.swagger.enabled property to true. It is also recommended to set the jbpm.executor.enabled property to true if you want to execute Jobs (such as the LogCleanUpCommand) via the REST API:
kieserver.swagger.enabled=true
jbpm.executor.enabled=true
Including Swagger dependencies
The first step requires adding the following dependencies in your pom.xml:
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-rs-service-description-swagger</artifactId>
<version>3.2.6</version>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-jaxrs</artifactId>
<version>1.5.15</version>
<exclusions>
<exclusion>
<groupId>javax.ws.rs</groupId>
<artifactId>jsr311-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>swagger-ui</artifactId>
<version>2.2.10</version>
</dependency>
That should be fairly simple. Then, let’s move to the next point.
Configuring the Security
Next, include in our Spring Boot project a class which extends WebSecurityConfigurerAdapter and implements the configuration methods to allow an user with “kie-server” Role:
@Configuration("kieServerSecurity")
@EnableWebSecurity
public class DefaultWebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.cors().and()
.csrf().disable()
.authorizeRequests()
.antMatchers("/rest/*").authenticated().and()
.httpBasic().and()
.headers().frameOptions().disable();
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication().withUser("user").password("user").roles("kie-server");
auth.inMemoryAuthentication().withUser("wbadmin").password("wbadmin").roles("admin");
auth.inMemoryAuthentication().withUser("kieserver").password("kieserver1!").roles("kie-server");
}
@Bean
CorsConfigurationSource corsConfigurationSource() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration corsConfiguration = new CorsConfiguration();
corsConfiguration.setAllowedOrigins(Arrays.asList("*"));
corsConfiguration.setAllowCredentials(true);
corsConfiguration.setAllowedMethods(Arrays.asList(HttpMethod.GET.name(), HttpMethod.HEAD.name(),
HttpMethod.POST.name(), HttpMethod.DELETE.name(), HttpMethod.PUT.name()));
corsConfiguration.applyPermitDefaultValues();
source.registerCorsConfiguration("/**", corsConfiguration);
return source;
}
@Bean
public PasswordEncoder passwordEncoder() {
return NoOpPasswordEncoder.getInstance();
}
}
In this example code, the username “user/user” can access the REST API. Let’s test it!
Testing the REST API
Once started, you will be able to access the REST API at the following URL: http://localhost:8090/rest/api-docs?url=http://localhost:8090/rest/swagger.json#/
Here is the Swagger UI in action:
Conclusion
This article was a quick walk though the configuration of Swagger UI on Spring Boot to simplify the testing of the jBPM REST API.
Recommended Articles
Bootstrap Three jBPM Projects with Spring Boot Using jBPM Maven Archetype
Learn how to bootstrap three jBPM projects using Spring Boot and the jBPM Maven archetype. #jBPM #SpringBoot #MavenArchetypes
Integrate jBPM 6 with Spring Boot Microservices Application - A Comprehensive Guide
Learn how to use jBPM 6 runtime engine with a Spring Boot microservices application, including configuration and implementation of IdentityProvider interface.
Create a Web Application Using jBPM 7: A Step-by-Step Guide
Learn how to create a web application using jBPM 7 with step-by-step instructions and code examples. #jBPM #Java #WebDevelopment
Configure jBPM to use MySQL as Database | Enterprise Java Tutorials
Learn how to configure jBPM to use MySQL as database for storing process data. A step-by-step guide on setting up jBPM with MySQL.