Я использую H2 DB в тесте и временно в разработке. Я добавляю консоль h2 в свое приложение, и оно работает. Мне нужно дать доступ только администраторам, и это тоже работает. Но мне нужна тестовая работа доступа пользователей и администраторов и тестовая ошибка get 404. Как я могу решить эту проблему?
Я попытался протестировать без авторизации и получил ошибку 401. Для использования консоли H2 я добавляю инструменты Dev
Интеграционный тест
@RunWith(SpringRunner.class)
@SpringBootTest(properties = "spring.h2.console.enabled=true", classes = CrmApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@ContextConfiguration(classes = H2ConsoleSecurityConfig.class)
public class H2ConsoleSecurityTest {
@Autowired
private WebApplicationContext context;
private MockMvc mockMvc;
@Before
public void setUp() {
mockMvc = webAppContextSetup(context)
.apply(springSecurity()).build();
}
@Test
@WithMockUser(username = "admin2@email.com", password = "AdminPass", roles = "ADMIN")
public void youCanAccessH2ConsoleWhenRoleIsAdmin() throws Exception {
mockMvc.perform(get("/h2-console")
.with(httpBasic("admin2@email.com", "AdminPass")))
.andExpect(status().isOk());
}
}
Конфигурация безопасности Spring
@Configuration
@Order(1)
public class H2ConsoleSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.antMatcher("/h2-console/**")
.authorizeRequests()
.anyRequest()
.hasRole("ADMIN")
.and()
.httpBasic()
.and()
.csrf().disable()
.headers().frameOptions().sameOrigin();
}
}
application.properties
spring.main.banner-mode=off
spring.jpa.hibernate.ddl-auto=none
server.address=localhost
server.port=8000
#frontend info
frontend.domain=http://localhost:8081
#datasource properties
spring.datasource.url=jdbc:h2:mem:FoxmindedCrmDB;DB_CLOSE_ON_EXIT=FALSE;DB_CLOSE_DELAY=-1
spring.datasource.username=user
spring.datasource.password=pwd
spring.datasource.driverClassName=org.h2.Driver
#mail properties
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
#h2 console conf when without Dev Tools
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
#LogMailScheduler properties
logmail.from = applogreport@foxminded.com.ua
logmail.to = testgmail.com
logmail.subject = FoxmindedCRM Log Email Report
#RegistrationConfirmationMail properties
email.confirmationEmail.from = appinfo@foxminded.com.ua
#Swagger properties
swagger.title=CRM RESTful Web Service with Spring Boot
swagger.description=CRM RESTful Web Service with Spring Boot for Foxminded
swagger.terms.service.url=
swagger.contact.name=
swagger.contact.url=
swagger.contact.email=
swagger.license=Apache License Version 2.0
swagger.license.url=https://www.apache.org/license.html
swagger.license.version=1.0.0
#Default admin properties
default.user.admin.pass=AdminPass
default.user.admin.firstName=admin
default.user.admin.lastName=admin
default.user.admin.email=admin@email.com
#Default time-zone properties
default.time.zone.name=Europe/Kiev
# JWT token properties
jwt.Secret=x-auth-token
jwt.ExpirationInMs=864000000
# Email Token confirmation
token.emailConfirmation.lifeDays=1
#Actuator endpoints properties
endpoints.shutdown.enabled=true
management.security.roles=ROLE_ADMIN
#Logging properties
logging.level.org.springframework=error
logging.level.ua.com.foxminded=debug
logging.path=./crm-backend/logs
logging.file=${logging.path}/application.log
#Locale properties
default.locale.language=uk
application.properties для теста
#h2 console conf
#spring.h2.console.enabled=true
#spring.h2.console.path=/console
spring.main.banner-mode=off
server.port=8000
#frontend info
frontend.domain=http://localhost:8081
logging.level.org.springframework=error
logging.level.ua.com.foxminded=debug
spring.jpa.hibernate.ddl-auto=none
#mail properties
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
#RegistrationConfirmationMail properties
email.confirmationEmail.from = appinfo@foxminded.com.ua
#Swager properties
swagger.title=CRM RESTful Web Service with Spring Boot
swagger.description=CRM RESTful Web Service with Spring Boot for Foxminded
swagger.terms.service.url=
swagger.contact.name=
swagger.contact.url=
swagger.contact.email=
swagger.license=Apache License Version 2.0
swagger.license.url=https://www.apache.org/license.html
swagger.license.version=1.0.0
#Default admin properties
default.user.admin.pass=AdminPass
default.user.admin.firstName=admin
default.user.admin.lastName=admin
default.user.admin.email=admin@email.com
#Default time-zone properties
default.time.zone.name=Europe/Kiev
# JWT token properties
jwt.Secret=x-auth-token
jwt.ExpirationInMs=864000000
# Email Token confirmation
token.emailConfirmation.lifeDays=1
#Locale properties
default.locale.language=uk
Я ожидаю, что консоль h2 будет работать для тестирования.