mcpField
S
spring-security

spring-security

github.com/partme-ai安全71693 次安装3 周前更新
代码仓库

关于 spring-security

spring-security 是用于配置 Spring Boot 应用身份验证与授权的技能,涵盖 JWT、OAuth2、方法级访问规则及 Web 安全设置等常见模式。

主要功能

  1. 01配置 SecurityFilterChain 访问规则
  2. 02实现 UserDetailsService 身份验证
  3. 03设置 JWT 和 OAuth2 安全
  4. 04应用方法级授权
  5. 05配置 CORS、CSRF 和安全标头

适用场景

  1. 01保护 Spring Boot 应用端点
  2. 02添加基于 JWT 的无状态身份验证
  3. 03按角色限制服务方法
  4. 04设置浏览器与 API 安全策略

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/partme-ai/full-stack-skills --skill spring-security

安装后在 Claude Code 中输入/spring-security确认已加载。

附带文件LICENSE.txt

详细介绍

适用场景

当用户希望执行以下操作时,请使用此技能:

  • 在 Spring Boot 应用程序中配置身份验证和授权
  • 设置 SecurityFilterChain、UserDetailsService 和 PasswordEncoder
  • 实现基于 JWT 的无状态身份验证
  • 集成 OAuth2 客户端或资源服务器
  • 使用 @PreAuthorize 和 @Secured 实现方法级安全
  • 配置 CORS、CSRF、会话管理和安全标头

使用方法

工作流
  1. 添加 Spring Security starter 依赖
  2. 配置 SecurityFilterChain,定义基于 URL 的访问规则
  3. 实现身份验证:内存、JDBC、LDAP 或自定义 UserDetailsService
  4. 添加授权:基于角色或表达式的访问控制
1. 基本安全配置
@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests(auth -> auth
                .requestMatchers("/api/public/**").permitAll()
                .requestMatchers("/api/admin/**").hasRole("ADMIN")
                .anyRequest().authenticated()
            )
            .httpBasic(Customizer.withDefaults());
        return http.build();
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}
2. 自定义 UserDetailsService
@Service
public class CustomUserDetailsService implements UserDetailsService {
    private final UserRepository userRepository;

    public CustomUserDetailsService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    @Override
    public UserDetails loadUserByUsername(String username) {
        User user = userRepository.findByUsername(username)
            .orElseThrow(() -> new UsernameNotFoundException("User not found: " + username));
        return new org.springframework.security.core.userdetails.User(
            user.getUsername(), user.getPassword(), user.getAuthorities()
        );
    }
}
3. JWT 身份验证过滤器
@Component
public class JwtAuthFilter extends OncePerRequestFilter {
    private final JwtService jwtService;
    private final UserDetailsService userDetailsService;

    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
            throws ServletException, IOException {
        String token = extractToken(request);
        if (token != null && jwtService.isValid(token)) {
            String username = jwtService.extractUsername(token);
            UserDetails userDetails = userDetailsService.loadUserByUsername(username);
            var authToken = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());
            SecurityContextHolder.getContext().setAuthentication(authToken);
        }
        chain.doFilter(request, response);
    }
}
4. 方法级安全
@EnableMethodSecurity
@Configuration
public class MethodSecurityConfig {}

@Service
public class AdminService {
    @PreAuthorize("hasRole('ADMIN')")
    public void deleteUser(Long id) { /* ... */ }

    @PreAuthorize("#userId == authentication.principal.id")
    public UserProfile getProfile(Long userId) { /* ... */ }
}

最佳实践

  • 始终使用 BCrypt 或 Argon2 对密码进行编码;切勿存储明文密码
  • 在生产环境中使用 HTTPS;配置安全标头(HSTS、X-Content-Type-Options)
  • 遵循最小权限原则;谨慎设计角色和权限
  • 保护敏感端点;对基于浏览器的应用程序使用 CSRF 保护
  • 为 API 服务显式配置 CORS

资源

关键词

spring security、身份验证、授权、JWT、OAuth2、SecurityFilterChain、UserDetailsService、BCrypt、CORS、CSRF、方法安全、PreAuthorize、角色、权限

评论

支持 Markdown