BAEL-649 Making updates to add two service applications that are domain specific
This commit is contained in:
parent
299fed28f5
commit
626360dedd
|
@ -1,4 +1,4 @@
|
|||
spring.application.name=resource
|
||||
spring.application.name=book-service
|
||||
server.port=8083
|
||||
|
||||
resource.returnString=hello cloud
|
|
@ -6,9 +6,13 @@ eureka.client.registryFetchIntervalSeconds = 5
|
|||
|
||||
management.security.sessions=always
|
||||
|
||||
zuul.routes.resource.path=/resource/**
|
||||
zuul.routes.resource.sensitive-headers=Set-Cookie,Authorization
|
||||
hystrix.command.resource.execution.isolation.thread.timeoutInMilliseconds=600000
|
||||
zuul.routes.book-service.path=/book-service/**
|
||||
zuul.routes.book-service.sensitive-headers=Set-Cookie,Authorization
|
||||
hystrix.command.book-service.execution.isolation.thread.timeoutInMilliseconds=600000
|
||||
|
||||
zuul.routes.rating-service.path=/rating-service/**
|
||||
zuul.routes.rating-service.sensitive-headers=Set-Cookie,Authorization
|
||||
hystrix.command.rating-service.execution.isolation.thread.timeoutInMilliseconds=600000
|
||||
|
||||
zuul.routes.discovery.path=/discovery/**
|
||||
zuul.routes.discovery.sensitive-headers=Set-Cookie,Authorization
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
spring.application.name=rating-service
|
||||
server.port=8084
|
||||
|
||||
resource.returnString=hello cloud
|
||||
resource.user.returnString=hello cloud user
|
||||
resource.admin.returnString=hello cloud admin
|
||||
|
||||
eureka.client.region = default
|
||||
eureka.client.registryFetchIntervalSeconds = 5
|
||||
|
||||
management.security.sessions=never
|
||||
|
||||
logging.level.org.springframework.web.=debug
|
||||
logging.level.org.springframework.security=debug
|
||||
|
||||
spring.redis.host=localhost
|
||||
spring.redis.port=6379
|
|
@ -22,14 +22,14 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
|
|||
@Override
|
||||
protected void configure(HttpSecurity http) throws Exception {
|
||||
http.authorizeRequests()
|
||||
.antMatchers("/resource/hello/cloud").permitAll()
|
||||
.antMatchers("/book-service/books").permitAll()
|
||||
.antMatchers("/eureka/**").hasRole("ADMIN")
|
||||
.anyRequest().authenticated()
|
||||
.and()
|
||||
.formLogin()
|
||||
.and()
|
||||
.logout().permitAll()
|
||||
.logoutSuccessUrl("/resource/hello/cloud").permitAll()
|
||||
.logoutSuccessUrl("/book-service/books").permitAll()
|
||||
.and()
|
||||
.csrf()
|
||||
.disable();
|
||||
|
|
|
@ -14,7 +14,8 @@
|
|||
<module>config</module>
|
||||
<module>discovery</module>
|
||||
<module>gateway</module>
|
||||
<module>resource</module>
|
||||
<module>svc-book</module>
|
||||
<module>svc-rating</module>
|
||||
</modules>
|
||||
|
||||
|
||||
|
|
|
@ -1,41 +0,0 @@
|
|||
package com.baeldung.spring.cloud.bootstrap.resource;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
@SpringBootApplication
|
||||
@EnableEurekaClient
|
||||
@RestController
|
||||
public class ResourceApplication {
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(ResourceApplication.class, args);
|
||||
}
|
||||
|
||||
@Value("${resource.returnString}")
|
||||
private String returnString;
|
||||
|
||||
@Value("${resource.user.returnString}")
|
||||
private String userReturnString;
|
||||
|
||||
@Value("${resource.admin.returnString}")
|
||||
private String adminReturnString;
|
||||
|
||||
@RequestMapping("/hello/cloud")
|
||||
public String getString() {
|
||||
return returnString;
|
||||
}
|
||||
|
||||
@RequestMapping("/hello/user")
|
||||
public String getUserString() {
|
||||
return userReturnString;
|
||||
}
|
||||
|
||||
@RequestMapping("/hello/admin")
|
||||
public String getAdminString() {
|
||||
return adminReturnString;
|
||||
}
|
||||
}
|
|
@ -4,7 +4,8 @@
|
|||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>resource</artifactId>
|
||||
<groupId>com.baeldung.spring.cloud</groupId>
|
||||
<artifactId>svc-book</artifactId>
|
||||
<version>1.0.0-SNAPSHOT</version>
|
||||
|
||||
<parent>
|
|
@ -0,0 +1,40 @@
|
|||
package com.baeldung.spring.cloud.bootstrap.svcbook;
|
||||
|
||||
public class Book {
|
||||
private Long id;
|
||||
private String author;
|
||||
private String title;
|
||||
|
||||
public Book(Long id, String title, String author) {
|
||||
this.id = id;
|
||||
this.author = author;
|
||||
this.title = title;
|
||||
}
|
||||
|
||||
public Book() {
|
||||
}
|
||||
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Long id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getAuthor() {
|
||||
return author;
|
||||
}
|
||||
|
||||
public void setAuthor(String author) {
|
||||
this.author = author;
|
||||
}
|
||||
|
||||
public String getTitle() {
|
||||
return title;
|
||||
}
|
||||
|
||||
public void setTitle(String title) {
|
||||
this.title = title;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,37 @@
|
|||
package com.baeldung.spring.cloud.bootstrap.svcbook;
|
||||
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
@SpringBootApplication
|
||||
@EnableEurekaClient
|
||||
@RestController
|
||||
@RequestMapping("/books")
|
||||
public class BookServiceApplication {
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(BookServiceApplication.class, args);
|
||||
}
|
||||
|
||||
private List<Book> bookList = Arrays.asList(
|
||||
new Book(1L, "Baeldung goes to the market", "Tim Schimandle"),
|
||||
new Book(2L, "Baeldung goes to the park", "Slavisa")
|
||||
);
|
||||
|
||||
@GetMapping("")
|
||||
public List<Book> findAllBooks() {
|
||||
return bookList;
|
||||
}
|
||||
|
||||
@GetMapping("/{bookId}")
|
||||
public Book findBook(@PathVariable Long bookId) {
|
||||
return bookList.stream().filter(b -> b.getId().equals(bookId)).findFirst().orElse(null);
|
||||
}
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package com.baeldung.spring.cloud.bootstrap.resource;
|
||||
package com.baeldung.spring.cloud.bootstrap.svcbook;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
@ -22,9 +22,8 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
|
|||
http.httpBasic()
|
||||
.disable()
|
||||
.authorizeRequests()
|
||||
.antMatchers("/hello/cloud").permitAll()
|
||||
.antMatchers("/hello/user").hasAnyRole("USER", "ADMIN")
|
||||
.antMatchers("/hello/admin").hasRole("ADMIN")
|
||||
.antMatchers("/books").permitAll()
|
||||
.antMatchers("/books/*").hasAnyRole("USER", "ADMIN")
|
||||
.anyRequest().authenticated()
|
||||
.and()
|
||||
.csrf()
|
|
@ -1,4 +1,4 @@
|
|||
package com.baeldung.spring.cloud.bootstrap.resource;
|
||||
package com.baeldung.spring.cloud.bootstrap.svcbook;
|
||||
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
|
|
@ -1,4 +1,4 @@
|
|||
spring.cloud.config.name=resource
|
||||
spring.cloud.config.name=book-service
|
||||
spring.cloud.config.discovery.service-id=config
|
||||
spring.cloud.config.discovery.enabled=true
|
||||
spring.cloud.config.username=configUser
|
|
@ -0,0 +1,85 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<groupId>com.baeldung.spring.cloud</groupId>
|
||||
<artifactId>svc-rating</artifactId>
|
||||
<version>1.0.0-SNAPSHOT</version>
|
||||
|
||||
<parent>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-parent</artifactId>
|
||||
<version>1.4.2.RELEASE</version>
|
||||
<relativePath/> <!-- lookup parent from repository -->
|
||||
</parent>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.springframework.cloud</groupId>
|
||||
<artifactId>spring-cloud-starter-config</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.cloud</groupId>
|
||||
<artifactId>spring-cloud-starter-eureka</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-web</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-security</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.session</groupId>
|
||||
<artifactId>spring-session</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-data-redis</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-test</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<dependencyManagement>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.springframework.cloud</groupId>
|
||||
<artifactId>spring-cloud-dependencies</artifactId>
|
||||
<version>${spring-cloud-dependencies.version}</version>
|
||||
<type>pom</type>
|
||||
<scope>import</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>${maven-compiler-plugin.version}</version>
|
||||
<configuration>
|
||||
<source>1.8</source>
|
||||
<target>1.8</target>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
<properties>
|
||||
<spring-cloud-dependencies.version>Brixton.SR7</spring-cloud-dependencies.version>
|
||||
<maven-compiler-plugin.version>3.6.0</maven-compiler-plugin.version>
|
||||
</properties>
|
||||
</project>
|
|
@ -0,0 +1,40 @@
|
|||
package com.baeldung.spring.cloud.bootstrap.svcrating;
|
||||
|
||||
public class Rating {
|
||||
private Long id;
|
||||
private Long bookId;
|
||||
private int stars;
|
||||
|
||||
public Rating() {
|
||||
}
|
||||
|
||||
public Rating(Long id, Long bookId, int stars) {
|
||||
this.id = id;
|
||||
this.bookId = bookId;
|
||||
this.stars = stars;
|
||||
}
|
||||
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Long id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public Long getBookId() {
|
||||
return bookId;
|
||||
}
|
||||
|
||||
public void setBookId(Long bookId) {
|
||||
this.bookId = bookId;
|
||||
}
|
||||
|
||||
public int getStars() {
|
||||
return stars;
|
||||
}
|
||||
|
||||
public void setStars(int stars) {
|
||||
this.stars = stars;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,41 @@
|
|||
package com.baeldung.spring.cloud.bootstrap.svcrating;
|
||||
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@SpringBootApplication
|
||||
@EnableEurekaClient
|
||||
@RestController
|
||||
@RequestMapping("/ratings")
|
||||
public class RatingServiceApplication {
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(RatingServiceApplication.class, args);
|
||||
}
|
||||
|
||||
private List<Rating> ratingList = Arrays.asList(
|
||||
new Rating(1L, 1L, 2),
|
||||
new Rating(2L, 1L, 3),
|
||||
new Rating(3L, 2L, 4),
|
||||
new Rating(4L, 2L, 5)
|
||||
);
|
||||
|
||||
@GetMapping("")
|
||||
public List<Rating> findRatingsByBookId(@RequestParam Long bookId) {
|
||||
return bookId == null || bookId.equals(0L) ? Collections.EMPTY_LIST : ratingList.stream().filter(r -> r.getBookId().equals(bookId)).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@GetMapping("/all")
|
||||
public List<Rating> findAllRatings() {
|
||||
return ratingList;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
package com.baeldung.spring.cloud.bootstrap.svcrating;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
|
||||
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;
|
||||
|
||||
@EnableWebSecurity
|
||||
@Configuration
|
||||
public class SecurityConfig extends WebSecurityConfigurerAdapter {
|
||||
|
||||
@Autowired
|
||||
public void configureGlobal1(AuthenticationManagerBuilder auth) throws Exception {
|
||||
//try in memory auth with no users to support the case that this will allow for users that are logged in to go anywhere
|
||||
auth.inMemoryAuthentication();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void configure(HttpSecurity http) throws Exception {
|
||||
http.httpBasic()
|
||||
.disable()
|
||||
.authorizeRequests()
|
||||
.antMatchers("/ratings").hasRole("USER")
|
||||
.antMatchers("/ratings/all").hasAnyRole("USER", "ADMIN")
|
||||
.anyRequest().authenticated()
|
||||
.and()
|
||||
.csrf()
|
||||
.disable();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
package com.baeldung.spring.cloud.bootstrap.svcrating;
|
||||
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
|
||||
import org.springframework.session.web.context.AbstractHttpSessionApplicationInitializer;
|
||||
|
||||
@Configuration
|
||||
@EnableRedisHttpSession
|
||||
public class SessionConfig extends AbstractHttpSessionApplicationInitializer {
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
spring.cloud.config.name=rating-service
|
||||
spring.cloud.config.discovery.service-id=config
|
||||
spring.cloud.config.discovery.enabled=true
|
||||
spring.cloud.config.username=configUser
|
||||
spring.cloud.config.password=configPassword
|
||||
|
||||
eureka.client.serviceUrl.defaultZone=http://discUser:discPassword@localhost:8082/eureka/
|
Loading…
Reference in New Issue