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 + + + + + + + + + + + + + +