如何在集成测试中启用H2控制台

时间:2019-03-25 07:23:13

标签: java spring-boot spring-security h2 spring-test

我在测试中和在开发中临时使用H2 DB。我将h2控制台添加到我的应用程序中,并且可以正常工作。我只需要授予管理员访问权限,它也可以工作。但是我需要进行对用户和管理员访问权限的测试工作,并测试得到错误404。如何解决此问题?

我试图未经授权进行测试并出现错误401。为使用H2控制台,我添加了开发工具

集成测试

@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控制台可以进行测试。

0 个答案:

没有答案