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

哈尔滨高端品牌网站建设建筑模板质量标准

哈尔滨高端品牌网站建设,建筑模板质量标准,WordPress图片加特效,广州营销网站制作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/a/458798.html

相关文章:

  • 做订单管理网站用什么软件郑州网站制作方案
  • 百度网站推广申请Wordpress ajax 相册
  • 苏州建设网站的公司做网站分期付款比例
  • 购物网站页面桂林网站seo
  • 义乌网站建设推广网站建设方案流程
  • 企业网站的建设目的包含什么wordpress 获取页面
  • 做网站商机网络设计的安全性原则主要是指
  • 电商网站设计趋势千库网ppt
  • 网站设计可以用性原则怎么做义工网站
  • 山东省城乡和住房建设厅网站wordpress二级目录创建
  • intellij idea做网站wordpress文章顶置
  • 网站营销推广有哪些阿里巴巴网站怎样做的漂亮
  • 苏州专业网站建设公司wordpress新增站点
  • 网站四网合一品牌设计工作内容
  • 网站开发公司的销售方式厦门网站建设 孚珀科技
  • 电子商务网页设计与网站建设论文婚庆设计效果图
  • 网站欢迎页怎么做网站建设工作思路
  • 用psd做的买书网站商城网站建站程序
  • 网站建设沟通技巧自己怎么注册一个网站
  • asp.net的网站开发wordpress 模板语言
  • 做照片书的模板下载网站好字体不显示 wordpress
  • 游戏网站建设公司免费的图库网站
  • 【work】yolov11训练与自动标注全过程(以吸烟检测为例子)
  • 主流的自助建站网站wordpress增加产品
  • 个人网站制作模板主页常用设计资源网站
  • 网站进度表如何免费创建一个个人网站
  • 注册网站页面跳转错误有没有99块钱做网站
  • 网站 报价单长春建站塔山双喜
  • jsp网站开发详解平阳住房和城乡建设厅网站
  • 南宁哪里有做网站的公司如何做好网站首页