当前位置: 首页 > wzjs >正文

河北建设工程信息网已取消安徽网站seo

河北建设工程信息网已取消,安徽网站seo,家装装饰设计,普通人做电商要多少钱Spring Security 认证与授权机制源码解析 结合之前的IOC、AOP、事务管理, 这一篇讲讲Spring 的安全性,以下是小弟对Spring Security的一些理解,以及在真实面试中碰到的一些问题做了些整理,欢迎各位大佬一起观摩指点!&a…

Spring Security 认证与授权机制源码解析

结合之前的IOCAOP事务管理, 这一篇讲讲Spring 的安全性,以下是小弟对Spring Security的一些理解,以及在真实面试中碰到的一些问题做了些整理,欢迎各位大佬一起观摩指点!!

一、Spring Security 简介

Spring Security 是 Spring 生态中专门用于安全控制的框架,主要用于 身份认证(Authentication)授权(Authorization)。它能够无缝集成到 Spring Boot,并提供了一套默认的安全策略,如表单登录、OAuth2 支持、密码加密、跨站请求伪造(CSRF)防护等。

Spring Security 的核心功能可以归纳为以下几点:

  • 认证(Authentication): 识别用户身份,如账号密码登录、Token 登录等。
  • 授权(Authorization): 确定用户是否有访问某些资源的权限,如基于角色(Role)或权限(Permission)控制访问。
  • 安全性防护(Security Protection): 防止 CSRF 攻击、XSS 攻击等常见安全漏洞。

二、Spring Security 认证流程(源码解析)

2.1 认证的核心组件

Spring Security 认证流程涉及多个核心组件,主要包括:

  • SecurityFilterChain 通过一组 过滤器(Filter) 进行身份认证和授权检查。
  • AuthenticationManager 认证管理器,负责验证用户身份。
  • AuthenticationProvider 认证提供者,支持不同的认证方式(如密码、OAuth2、JWT)。
  • UserDetailsService 用于加载用户信息的服务,可以从数据库或其他存储介质获取用户信息。
  • PasswordEncoder 密码加密器,确保密码存储安全。

2.2 认证流程解析

Spring Security 认证过程由 过滤器链 完成,主要流程如下:

  1. 用户发起请求(通常是登录请求,如 /login)。
  2. UsernamePasswordAuthenticationFilter 拦截请求,提取用户名和密码。
  3. 交给 AuthenticationManager 认证,由 AuthenticationProvider 进行验证。
  4. 通过 UserDetailsService 加载用户信息,校验用户名和密码。
  5. 如果认证通过,生成 Authentication 对象并存入 SecurityContext,否则返回 401 未授权错误。
源码解析
@Override
public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) {String username = obtainUsername(request);String password = obtainPassword(request);UsernamePasswordAuthenticationToken authRequest = new UsernamePasswordAuthenticationToken(username, password);return this.getAuthenticationManager().authenticate(authRequest);
}

2.3 自定义用户认证

@Service
public class CustomUserDetailsService implements UserDetailsService {@Autowiredprivate UserRepository userRepository;@Overridepublic UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {User user = userRepository.findByUsername(username);if (user == null) {throw new UsernameNotFoundException("用户不存在");}return new org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword(), getAuthorities(user));}private Collection<? extends GrantedAuthority> getAuthorities(User user) {return user.getRoles().stream().map(role -> new SimpleGrantedAuthority(role.getName())).collect(Collectors.toList());}
}

三、Spring Security 授权机制解析

3.1 授权核心组件

Spring Security 的授权机制依赖于以下核心组件:

  • AccessDecisionManager 负责决策当前用户是否可以访问某个资源。
  • SecurityContextHolder 维护当前用户的安全上下文信息。
  • GrantedAuthority 表示用户的权限(如 ROLE_ADMINROLE_USER)。
  • @PreAuthorize / @Secured 注解: 进行方法级别的权限控制。

3.2 基于角色的权限控制

@Configuration
@EnableWebSecurity
public class SecurityConfig {@Beanpublic SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {http.authorizeHttpRequests((requests) -> requests.antMatchers("/admin/**").hasRole("ADMIN").antMatchers("/user/**").hasRole("USER").anyRequest().authenticated()).formLogin(withDefaults());return http.build();}
}

3.3 方法级别的权限控制

@Service
public class OrderService {@PreAuthorize("hasRole('ADMIN')")public void deleteOrder(Long orderId) {// 仅管理员可删除订单}
}

四、高频面试题

Q1:Spring Security 的认证流程是怎样的?

A1:Spring Security 的认证流程包括:UsernamePasswordAuthenticationFilter 拦截请求 → 交给 AuthenticationManager 认证 → AuthenticationProvider 验证用户名密码 → UserDetailsService 加载用户信息 → 认证成功存入 SecurityContext


Q2:Spring Security 如何进行授权?

A2:授权方式包括:

  1. 基于 URL 访问控制antMatchers
  2. 基于 方法注解@PreAuthorize / @Secured
  3. 自定义 AccessDecisionManager 进行更复杂的权限判断。

Q3:如何自定义用户认证?

A3:可以实现 UserDetailsService 接口,并在 loadUserByUsername 方法中从数据库查询用户信息,再返回 UserDetails 实例。


Q4:Spring Security 如何与 JWT 结合?

A4:可以通过 OncePerRequestFilter 解析 JWT 并手动创建 UsernamePasswordAuthenticationToken,然后存入 SecurityContextHolder,实现无状态认证。


五、总结

  • Spring Security 通过 过滤器链 实现身份认证和授权。
  • 认证流程涉及 AuthenticationManagerAuthenticationProviderUserDetailsService
  • 授权可以通过 URL 访问控制、方法注解、表达式等方式实现。
  • 在实际项目中,通常需要 自定义认证逻辑,如从数据库加载用户信息,或结合 JWT 进行无状态认证。

http://www.dtcms.com/wzjs/366880.html

相关文章:

  • 做网站怎么字体全部变粗了线上营销方式主要有哪些
  • 网站建设与运营培训班优化关键词规则
  • 就有公司域名怎么建设网站seo外包公司哪家专业
  • 建设个b2c网站浙江百度推广
  • 有做网站维护的微信朋友圈产品推广语
  • 做阿里云网站的公司吗海南seo
  • 建设一个网站市场营销最有效的手段
  • 济南网站建设建站免费seo免费培训
  • 唐山网站建设优化南宁企业官网seo
  • 苏州网站建设设计制作公司怎么样游戏推广话术
  • 音乐网站还可以做代发广告平台
  • 餐饮加盟网站制作网络营销策划方案模板
  • 做婚纱网站是怎么确认主题四川网站seo
  • 怎么用电脑做网站主机个人网页制作成品
  • 外贸b2c网站规划平面设计培训费用一般是多少
  • 网站建设公司的案例成都网络营销公司
  • 大红门桥做网站怎样自己做网站
  • 公司做网站比较好的平台谷歌google官方下载
  • 做电影采集网站需要多大vps营销策略有哪些理论
  • 给女友惊喜做网站2023近期舆情热点事件
  • 东莞工业品网站建设无锡百姓网推广
  • 快速网站排名小程序怎么开发
  • 玉环市建设规划局网站今日最新国内新闻重大事件
  • 上海信息公司做网站百度推广优化师
  • 支付宝网站怎么设计的网站服务器
  • 中搜网站提交今天上海最新新闻事件
  • 成都 网站制作汕头seo排名收费
  • 自己做电影网站昆明装饰企业网络推广
  • 福州市建设厅网站如何搭建个人网站
  • 温州的网站建设公司网络营销是什么意思?