From 9bc2a0cb918fba61633b0312caf14d8317835f1b Mon Sep 17 00:00:00 2001 From: Hithesh Sampathi Date: Sun, 11 Dec 2022 20:49:47 +0530 Subject: [PATCH] Spring Security and Swagger development Added the Spring security Configuration and also swagger-ui --- pom.xml | 9 ++++++ .../SpringBootDemoApplication.java | 3 +- .../springbootdemo/config/SecurityConfig.java | 23 +++++++++++++ .../springbootdemo/config/SwaggerConfig.java | 32 +++++++++++++++++++ .../controller/DemoController.java | 3 ++ src/main/resources/application.properties | 6 ++++ 6 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/hithesh/springbootdemo/config/SecurityConfig.java create mode 100644 src/main/java/com/hithesh/springbootdemo/config/SwaggerConfig.java diff --git a/pom.xml b/pom.xml index a98666c..82a8ba9 100644 --- a/pom.xml +++ b/pom.xml @@ -41,6 +41,15 @@ spring-boot-starter-test test + + org.springframework.boot + spring-boot-starter-security + + + io.springfox + springfox-boot-starter + 3.0.0 + diff --git a/src/main/java/com/hithesh/springbootdemo/SpringBootDemoApplication.java b/src/main/java/com/hithesh/springbootdemo/SpringBootDemoApplication.java index c1a163f..218c461 100644 --- a/src/main/java/com/hithesh/springbootdemo/SpringBootDemoApplication.java +++ b/src/main/java/com/hithesh/springbootdemo/SpringBootDemoApplication.java @@ -2,8 +2,9 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration; -@SpringBootApplication +@SpringBootApplication(exclude = { SecurityAutoConfiguration.class }) public class SpringBootDemoApplication { public static void main(String[] args) { diff --git a/src/main/java/com/hithesh/springbootdemo/config/SecurityConfig.java b/src/main/java/com/hithesh/springbootdemo/config/SecurityConfig.java new file mode 100644 index 0000000..38332ab --- /dev/null +++ b/src/main/java/com/hithesh/springbootdemo/config/SecurityConfig.java @@ -0,0 +1,23 @@ +package com.hithesh.springbootdemo.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; + +import org.springframework.security.config.http.SessionCreationPolicy; +import org.springframework.security.web.SecurityFilterChain; + +@Configuration +@EnableWebSecurity +public class SecurityConfig { + + @Bean + public SecurityFilterChain configure(HttpSecurity http) throws Exception { + return http + .csrf().disable().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) + .and().authorizeRequests().antMatchers("/demo/getDemoResponse").permitAll() + .anyRequest().authenticated().and() + .httpBasic().and().build(); + } +} diff --git a/src/main/java/com/hithesh/springbootdemo/config/SwaggerConfig.java b/src/main/java/com/hithesh/springbootdemo/config/SwaggerConfig.java new file mode 100644 index 0000000..4470fbe --- /dev/null +++ b/src/main/java/com/hithesh/springbootdemo/config/SwaggerConfig.java @@ -0,0 +1,32 @@ +package com.hithesh.springbootdemo.config; + +import org.springframework.cglib.core.Predicate; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.bind.annotation.RestController; +import springfox.documentation.builders.ApiInfoBuilder; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.service.ApiInfo; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.swagger2.annotations.EnableSwagger2; + +@Configuration +@EnableSwagger2 +public class SwaggerConfig { + + @Bean + public Docket api(){ + return new Docket(DocumentationType.SWAGGER_2).select() + .apis(RequestHandlerSelectors.basePackage("com.hithesh.springbootdemo.controller")) + .paths(PathSelectors.any()) + .build().apiInfo(apiEndPointsInfo()); + } + + private ApiInfo apiEndPointsInfo() { + return new ApiInfoBuilder().title("DEMO Project") + .description("This is a demo project for Swagger implementation") + .license("Demo license").version("1.0.0").build(); + } +} diff --git a/src/main/java/com/hithesh/springbootdemo/controller/DemoController.java b/src/main/java/com/hithesh/springbootdemo/controller/DemoController.java index 6365a4e..290ca52 100644 --- a/src/main/java/com/hithesh/springbootdemo/controller/DemoController.java +++ b/src/main/java/com/hithesh/springbootdemo/controller/DemoController.java @@ -2,6 +2,7 @@ import com.hithesh.springbootdemo.Repository.DemoRepository; import com.hithesh.springbootdemo.dto.Demo; +import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -17,11 +18,13 @@ public class DemoController { private DemoRepository repository; @GetMapping("/getDemoResponse") + @ApiOperation(value="This Endpoint is used to get the static response") public String getDemoResponse(){ return " This is an demo response "; } @GetMapping("/getDemoDbResponse") + @ApiOperation(value="This Endpoint is used to get the data stored in database") public List getDemoDbResponse(){ return repository.getDemoDetails(); } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index f954e8a..b2ecb33 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,2 +1,8 @@ +spring.security.user.name=admin +spring.security.user.password=admin@123 + spring.datasource.url=jdbc:h2:mem:demodb spring.datasource.driverClassName=org.h2.Driver + +spring.mvc.pathmatch.matching-strategy = ANT_PATH_MATCHER +