diff --git a/clearing-parent/backend-api/pom.xml b/clearing-parent/backend-api/pom.xml
index 63f151bbc..138531400 100644
--- a/clearing-parent/backend-api/pom.xml
+++ b/clearing-parent/backend-api/pom.xml
@@ -24,7 +24,28 @@
org.springframework.boot
spring-boot-starter-web
+
+ org.springframework.boot
+ spring-boot-starter-security
+
+
+ org.keycloak
+ keycloak-spring-boot-starter
+ 17.0.1
+
+
+
+
+
+ org.keycloak.bom
+ keycloak-adapter-bom
+ 17.0.1
+ pom
+ import
+
+
+
backend-api
@@ -34,7 +55,7 @@
- ru.spcex.clearing.frontendapi.FrontendApplication
+ ru.spcex.clearing.backendapi.BackendApiApplication
diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/frontendapi/FrontendApplication.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/BackendApiApplication.java
similarity index 74%
rename from clearing-parent/backend-api/src/main/java/ru/spcex/clearing/frontendapi/FrontendApplication.java
rename to clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/BackendApiApplication.java
index b4f960e00..8acfda2d8 100644
--- a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/frontendapi/FrontendApplication.java
+++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/BackendApiApplication.java
@@ -1,4 +1,4 @@
-package ru.spcex.clearing.frontendapi;
+package ru.spcex.clearing.backendapi;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -10,7 +10,12 @@ import javax.servlet.ServletContext;
import javax.servlet.ServletException;
@SpringBootApplication
-public class FrontendApplication extends SpringBootServletInitializer {
+public class BackendApiApplication extends SpringBootServletInitializer {
+
+ public static void main(String[] args) {
+ SpringApplication app = new SpringApplication(BackendApiApplication.class);
+ app.run(args);
+ }
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
@@ -20,7 +25,7 @@ public class FrontendApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
// springApplicationBuilder.initializers(DfaConfig.get().getLoggingInitializer());
- return builder.sources(FrontendApplication.class);
+ return builder.sources(BackendApiApplication.class);
}
@Override
diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/SimpleController.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/SimpleController.java
new file mode 100644
index 000000000..ced569d5a
--- /dev/null
+++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/SimpleController.java
@@ -0,0 +1,34 @@
+package ru.spcex.clearing.backendapi.controller;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.http.MediaType;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+@Controller("/")
+public class SimpleController implements InitializingBean {
+ private final Logger log = LoggerFactory.getLogger(getClass());
+
+ @RequestMapping(method = RequestMethod.GET, path = "/anonymous/method1", produces = MediaType.TEXT_PLAIN_VALUE)
+ @ResponseBody
+ public String processGet() {
+ log.info("controller method1");
+ return "use post";
+ }
+
+ @RequestMapping(method = RequestMethod.GET, path = "/users/method2", produces = MediaType.TEXT_PLAIN_VALUE)
+ @ResponseBody
+ public String processProtectedGet() {
+ log.info("controller method2");
+ return "use post";
+ }
+
+ @Override
+ public void afterPropertiesSet() throws Exception {
+ log.info("controller started");
+ }
+}
diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/security/WebSecurityConfig.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/security/WebSecurityConfig.java
new file mode 100644
index 000000000..318f88e0d
--- /dev/null
+++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/security/WebSecurityConfig.java
@@ -0,0 +1,46 @@
+package ru.spcex.clearing.backendapi.security;
+
+import org.keycloak.adapters.KeycloakConfigResolver;
+import org.keycloak.adapters.springboot.KeycloakSpringBootConfigResolver;
+import org.keycloak.adapters.springsecurity.KeycloakConfiguration;
+import org.keycloak.adapters.springsecurity.authentication.KeycloakAuthenticationProvider;
+import org.keycloak.adapters.springsecurity.config.KeycloakWebSecurityConfigurerAdapter;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
+import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.core.authority.mapping.SimpleAuthorityMapper;
+import org.springframework.security.web.authentication.session.NullAuthenticatedSessionStrategy;
+import org.springframework.security.web.authentication.session.SessionAuthenticationStrategy;
+
+@KeycloakConfiguration
+@EnableGlobalMethodSecurity(prePostEnabled = true)
+public class WebSecurityConfig extends KeycloakWebSecurityConfigurerAdapter {
+
+ @Override
+ protected SessionAuthenticationStrategy sessionAuthenticationStrategy() {
+ return new NullAuthenticatedSessionStrategy();
+ }
+
+ @Autowired
+ public void configureGlobal(AuthenticationManagerBuilder authManagerBuilder) {
+ KeycloakAuthenticationProvider keycloakAuthenticationProvider = keycloakAuthenticationProvider();
+ keycloakAuthenticationProvider.setGrantedAuthoritiesMapper(new SimpleAuthorityMapper());
+ authManagerBuilder.authenticationProvider(keycloakAuthenticationProvider);
+ }
+
+ @Bean
+ public KeycloakConfigResolver keycloakConfigResolver() {
+ return new KeycloakSpringBootConfigResolver();
+ }
+
+ @Override
+ protected void configure(HttpSecurity http) throws Exception {
+ super.configure(http);
+ http
+ .authorizeRequests()
+ .antMatchers("/anonymous/**").permitAll()
+ .anyRequest().fullyAuthenticated();
+ }
+}
diff --git a/clearing-parent/backend-api/src/main/resources/application.properties b/clearing-parent/backend-api/src/main/resources/application.properties
new file mode 100644
index 000000000..4399d094d
--- /dev/null
+++ b/clearing-parent/backend-api/src/main/resources/application.properties
@@ -0,0 +1,13 @@
+server.port = 8080
+server.servlet.context-path=/backend-api
+spring.main.web-application-type=servlet
+logging.level.root=warn
+
+#keycloak
+keycloak.auth-server-url=http://10.200.200.147:8080/auth
+keycloak.realm=Master
+keycloak.resource=clearing
+keycloak.public-client=true
+#keycloak.credentials.secret=WnOVCxcAmrUYc8IjiFHOuRif5Oesoyfr
+keycloak.security-constraints[0].authRoles[0]=admin
+keycloak.security-constraints[0].securityCollections[0].patterns[0]=/backend-api/users/*
\ No newline at end of file
diff --git a/clearing-parent/backend-api/src/main/resources/logback.xml b/clearing-parent/backend-api/src/main/resources/logback.xml
new file mode 100644
index 000000000..eacc94dbb
--- /dev/null
+++ b/clearing-parent/backend-api/src/main/resources/logback.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+ %date{HH:mm:ss.SSS} [%thread] %-5level %class{0}:%line - %message%n
+ utf-8
+
+
+
+ ../logs/backend-api.log
+
+
+ %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %class{0}:%msg%n
+ utf8
+
+
+
+ ../logs/backend-api.%i.log
+
+ 1
+ 10
+
+
+ 500MB
+
+
+
+
+
+
+
+
+
+
+
+
+
+