news 2026/9/3 3:24:53

Spring Security

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Spring Security

Spring Security 的作用

Spring Security 是一个基于 Spring 框架的安全框架,用于为 Java 应用程序提供身份验证(Authentication)和授权(Authorization)功能。它的核心功能包括用户认证、权限控制、防止常见安全攻击(如 CSRF、XSS)等。主要作用如下:

  1. 身份验证:验证用户身份(如用户名密码、OAuth2、JWT 等)。
  2. 授权:控制用户对资源的访问权限(如角色、权限检查)。
  3. 安全防护:提供 CSRF 防护、Session 管理、HTTP 安全头配置等。
  4. 集成扩展:支持与 OAuth2、LDAP、SAML 等第三方认证协议集成。

Spring Security 的核心组件

  1. SecurityContextHolder:存储当前用户的安全上下文(如认证信息)。
  2. Authentication:封装用户的认证信息(如 Principal、Credentials、Authorities)。
  3. UserDetailsService:加载用户信息的接口,需自定义实现。
  4. PasswordEncoder:密码加密与验证(如 BCrypt、PBKDF2)。
  5. SecurityFilterChain:定义安全过滤规则(如 URL 权限、登录配置)。

常用方法及示例

基础配置示例

以下是一个基于 Spring Boot 的 Spring Security 配置示例,实现用户名密码登录和权限控制:

@Configuration @EnableWebSecurity public class SecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http .authorizeHttpRequests(auth -> auth .requestMatchers("/public/**").permitAll() .requestMatchers("/admin/**").hasRole("ADMIN") .anyRequest().authenticated() ) .formLogin(form -> form .loginPage("/login") .defaultSuccessUrl("/home") .permitAll() ) .logout(logout -> logout .logoutSuccessUrl("/login?logout") .permitAll() ); return http.build(); } @Bean public UserDetailsService userDetailsService() { UserDetails user = User.builder() .username("user") .password(passwordEncoder().encode("password")) .roles("USER") .build(); UserDetails admin = User.builder() .username("admin") .password(passwordEncoder().encode("admin")) .roles("ADMIN") .build(); return new InMemoryUserDetailsManager(user, admin); } @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } }
关键方法说明
  1. authorizeHttpRequests
    定义 URL 的访问权限规则,如:

    • .permitAll():允许所有用户访问。
    • .hasRole("ADMIN"):仅允许 ADMIN 角色访问。
    • .authenticated():需登录后访问。
  2. formLogin
    配置表单登录:

    • loginPage("/login"):自定义登录页面路径。
    • defaultSuccessUrl("/home"):登录成功后跳转的页面。
  3. logout
    配置注销行为:

    • logoutSuccessUrl("/login?logout"):注销后跳转的页面。
  4. UserDetailsService
    提供用户数据源(示例中使用内存存储,实际需对接数据库)。

  5. PasswordEncoder
    使用BCryptPasswordEncoder加密密码,确保存储安全。


实际应用场景示例

自定义登录逻辑

若需从数据库加载用户信息,需实现UserDetailsService

@Service public class CustomUserDetailsService implements UserDetailsService { @Autowired private UserRepository userRepository; @Override public UserDetails loadUserByUsername(String username) { User user = userRepository.findByUsername(username); if (user == null) { throw new UsernameNotFoundException("User not found"); } return new org.springframework.security.core.userdetails.User( user.getUsername(), user.getPassword(), AuthorityUtils.createAuthorityList(user.getRoles()) ); } }
方法级权限控制

在 Service 或 Controller 方法上使用注解控制权限:

@PreAuthorize("hasRole('ADMIN')") @GetMapping("/admin/data") public String getAdminData() { return "Admin Data"; }

需在配置类添加@EnableMethodSecurity

@Configuration @EnableMethodSecurity public class MethodSecurityConfig { }

总结

Spring Security 通过灵活的配置和丰富的扩展点,能够满足从基础登录到分布式认证的各种需求。核心步骤包括配置安全规则、实现用户数据源、定义密码加密策略,并通过注解或 URL 规则细化权限控制。实际项目中,通常会结合数据库、JWT 或 OAuth2 进一步扩展。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 15:58:40

如何实现细粒度权限管理?政务Agent授权模型深度剖析

第一章:政务 Agent 的权限控制在政务系统中,Agent 通常指代自动化服务代理或智能程序,负责执行数据查询、流程审批、跨系统集成等关键任务。由于其操作涉及敏感政务数据和核心业务流程,必须建立严格的权限控制机制,防止…

作者头像 李华
网站建设 2026/9/2 8:01:57

java计算机毕业设计双西小学学费收缴系统的设计与实现 双西小学学杂费在线征缴平台的设计与实现 基于Java的双西小学收费信息化系统开发

计算机毕业设计双西小学学费收缴系统的设计与实现7627j9 (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。义务教育资金流转环节长期依赖人工登记、Excel 汇总,家长排队…

作者头像 李华
网站建设 2026/9/2 21:46:09

【瑞萨RA × Zephyr评测】DAC-ADC测试

📝 调试笔记:Renesas RA 系列 DAC-ADC 闭环测试 硬件: Renesas FPB-RA6E2 (假设) SSD1306 OLED 目标: 实现 DAC 输出三角波电压,并通过 ADC 实时采样读取,在屏幕和串口同步显示,验证数模转换的准确性。1. 硬件连接与引…

作者头像 李华
网站建设 2026/9/1 12:23:31

《创业之路》-743-草台班子的特征

“草台班子”是一个带有调侃和讽刺意味的中文网络用语,原指临时拼凑、缺乏专业性的戏曲班子,现广泛用于形容组织松散、管理混乱、专业性不足的团队或机构。在互联网、创业圈、职场文化中,“草台班子”常被用来揭示某些表面光鲜实则运作粗糙的…

作者头像 李华