Skills Plugins MCP Prompt Model 博客 我的中心
Development #security

springboot-verification

Verification loop for Spring Boot projects: build, static analysis, tests with coverage, security scans, and diff review before release or PR.

DeepseekModel Curated skill Quality Excellent · 90 v1.0.0

Get

https://deepseekmodel.com/api/download.php?id=affaan-m-ecc-skills-springboot-verification-skill-md&format=skill
Download .skill Standard format with system_prompt and model_config, ready for any agent framework
The actual content of the system_prompt field in the .skill file.
name springboot-verification description Verification loop for Spring Boot projects: build, static analysis, tests with coverage, security scans, and diff review before release or PR. metadata {"origin":"ECC"} Spring Boot Verification Loop Run before PRs, after major changes, and pre-deploy. When to Activate Before opening a pull request for a Spring Boot service After major refactoring or dependency upgrades Pre-deployment verification for staging or production Running full build → lint → test → security scan pipeline Validating test coverage meets thresholds Phase 1: Build mvn -T 4 clean verify -DskipTests # or ./gradlew clean assemble -x test If build fails, stop and fix. Phase 2: Static Analysis Maven (common plugins): mvn -T 4 spotbugs:check pmd:check checkstyle:check Gradle (if configured): ./gradlew checkstyleMain pmdMain spotbugsMain Phase 3: Tests + Coverage mvn -T 4 test mvn jacoco:report # verify 80%+ coverage # or ./gradlew test jacocoTestReport Report: Total tests, passed/failed Coverage % (lines/branches) Unit Tests Test service logic in isolation with mocked dependencies: @ExtendWith(MockitoExtension.class) class UserServiceTest { @Mock private UserRepository userRepository; @InjectMocks private UserService userService; @Test void createUser_validInput_returnsUser () { var dto = new CreateUserDto ( "Alice" , "alice@example.com" ); var expected = new User ( 1L , "Alice" , "alice@example.com" ); when (userRepository.save(any(User.class))).thenReturn(expected); var result = userService.create(dto); assertThat(result.name()).isEqualTo( "Alice" ); verify(userRepository).save(any(User.class)); } @Test void createUser_duplicateEmail_throwsException () { var dto = new CreateUserDto ( "Alice" , "existing@example.com" ); when (userRepository.existsByEmail(dto.email())).thenReturn( true ); assertThatThrownBy(() -> userService.create(dto)) .isInstanceOf(DuplicateEmailException.class); } } Integration Tests with Testcontainers Test against a real database instead of H2: @SpringBootTest @Testcontainers class UserRepositoryIntegrationTest { @Container static PostgreSQLContainer<?> postgres = new PostgreSQLContainer <>( "postgres:16-alpine" ) .withDatabaseName( "testdb" ); @DynamicPropertySource static void configureProperties (DynamicPropertyRegistry registry) { registry.add( "spring.datasource.url" , postgres::getJdbcUrl); registry.add( "spring.datasource.username" , postgres::getUsername); registry.add( "spring.datasource.password" , postgres::getPassword); } @Autowired private UserRepository userRepository; @Test void findByEmail_existingUser_returnsUser () { userRepository.save( new User ( "Alice" , "alice@example.com" )); var found = userRepository.findByEmail( "alice@example.com" ); assertThat(found).isPresent(); assertThat(found.get().getName()).isEqualTo( "Alice" ); } } API Tests with MockMvc Test controller layer with full Spring context: @WebMvcTest(UserController.class) class UserControllerTest { @Autowired private MockMvc mockMvc; @MockBean private UserService userService; @Test void createUser_validInput_returns201 () throws Exception { var user = new UserDto ( 1L , "Alice" , "alice@example.com" ); when (userService.create(any())).thenReturn(user); mockMvc.perform(post( "/api/users" ) .contentType(MediaType.APPLICATION_JSON) .content( """ {"name": "Alice", "email": "alice@example.com"} """ )) .andExpect(status().isCreated()) .andExpect(jsonPath( "$.name" ).value( "Alice" )); } @Test void createUser_invalidEmail_returns400 () throws Exception { mockMvc.perform(post( "/api/users" ) .contentType(MediaType.APPLICATION_JSON) .content( """ {"name": "Alice", "email": "not-an-email"} """ )) .andExpect(status().isBadRequest()); } } Phase 4: Security Scan # Dependency CVEs mvn org.owasp:dependency-check-maven:check # or ./gradlew dependencyCheckAnalyze # Secrets in source grep -rn "password\s*=\s*\"" src/ --include= "*.java" --include= "*.yml" --include= "*.properties" grep -rn "sk-\|api_key\|secret" src/ --include= "*.java" --include= "*.yml" # Secrets (git history) git secrets --scan # if configured Common Security Findings # Check for System.out.println (use logger instead) grep -rn "System\.out\.print" src/main/ --include="*.java" # Check for raw exception messages in responses grep -rn "e\.getMessage()" src/main/ --include="*.java" # Check for wildcard CORS grep -rn "allowedOrigins.*\*" src/main/ --include="*.java" Phase 5: Lint/Format (optional gate) mvn spotless:apply # if using Spotless plugin ./gradlew spotlessApply Phase 6: Diff Review git diff -- stat git diff Checklist: No debugging logs left ( System.out , log.debug without guards) Meaningful errors and HTTP statuses Transactions and validation present where needed Config changes documented Output Template VERIFICATION REPORT =================== Build: [PASS/FAIL] Static: [PASS/FAIL] (spotbugs/pmd/checkstyle) Tests: [PASS/FAIL] (X/Y passed, Z% coverage) Security: [PASS/FAIL] (CVE findings: N) Diff: [X files changed] Overall: [READY / NOT READY] Issues to Fix: 1. ... 2. ... Continuous Mode Re-run phases on significant changes or every 30–60 minutes in long sessions Keep a short loop: mvn -T 4 test + spotbugs for quick feedback Remember : Fast feedback beats late surprises. Keep the gate strict—treat warnings as defects in production systems.
Keywords that activate this skill. Click one to copy it.

This skill does not provide trigger words.

The downloaded .skill package contains the following fields.
Field Description
formatFormat tag (skill/v1)
skill_idUnique skill ID
nameSkill name
versionVersion
descriptionDescription
categoryCategories (array)
trigger_wordsTrigger words
tagsTags
sourceSource
source_urlSource URL (this page)
exported_atExported at (set per download)
system_promptSystem prompt body
model_configModel config: provider / model / temperature / max_tokens / top_p
examplesExamples
install_guideImport guide for Coze / Dify / Claude / custom frameworks
The same skill can be exported in different platform formats.
.skill Standard format with system_prompt and model_config, ready for any agent framework Download
.skillpro Enhanced format with scripts, tools, dependencies and hooks Download
.json Plain JSON export with system_prompt and model parameters only Download
Coze Markdown with frontmatter, for Coze platform import Download
Dify Dify DSL, import directly after creating an app Download

每日精选 Skill 推荐,免费送到你邮箱

输入邮箱,每天接收一个精选 AI Agent 技能推荐。完全免费,持续更新。

提交后我们会发送一封确认邮件,点击邮件里的链接才会开始收信。

完全免费,取消任意时间。我们不会发送垃圾邮件。