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

新服务器做网站做电子政务 网站

新服务器做网站,做电子政务 网站,济南网站搜索优化,如何注册一家投资公司Spring Security深度解析:构建企业级安全框架 本文将深入探讨Spring Security安全框架的核心原理、架构设计和实际应用,帮助开发者全面掌握企业级应用安全防护技术。 目录 Spring Security概述核心架构与原理认证机制详解授权机制详解核心组件分析配置与集成高级特性应用安全…

Spring Security深度解析:构建企业级安全框架

本文将深入探讨Spring Security安全框架的核心原理、架构设计和实际应用,帮助开发者全面掌握企业级应用安全防护技术。

目录

  1. Spring Security概述
  2. 核心架构与原理
  3. 认证机制详解
  4. 授权机制详解
  5. 核心组件分析
  6. 配置与集成
  7. 高级特性应用
  8. 安全漏洞防护
  9. 性能优化与最佳实践
  10. 总结

Spring Security概述

什么是Spring Security?

Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架。它是保护Spring应用程序的事实标准,提供了全面的安全解决方案,包括认证、授权、攻击防护等功能。

核心特性

// 基本安全配置示例
@Configuration
@EnableWebSecurity
public class SecurityConfig {@Beanpublic SecurityFilterChain filterChain(HttpSecurity http) throws Exception {http.authorizeHttpRequests(authz -> authz.requestMatchers("/public/**").permitAll().requestMatchers("/admin/**").hasRole("ADMIN").anyRequest().authenticated()).formLogin(form -> form.loginPage("/login").defaultSuccessUrl("/dashboard").permitAll()).logout(logout -> logout.logoutUrl("/logout").logoutSuccessUrl("/").permitAll());return http.build();}
}

发展历程

  • Spring Security 1.x:基于Acegi Security,XML配置为主
  • Spring Security 2.x:引入命名空间配置
  • Spring Security 3.x:注解支持,表达式语言
  • Spring Security 4.x:Java配置优化
  • Spring Security 5.x:OAuth2、WebFlux支持
  • Spring Security 6.x:Lambda配置,移除WebSecurityConfigurerAdapter

核心架构与原理

1. 安全架构总览

/*** Spring Security核心架构组件*/
public class SecurityArchitecture {// 1. SecurityContext - 安全上下文SecurityContext context = SecurityContextHolder.getContext();Authentication authentication = context.getAuthentication();// 2. AuthenticationManager - 认证管理器@Autowiredprivate AuthenticationManager authenticationManager;// 3. AccessDecisionManager - 访问决策管理器@Autowiredprivate AccessDecisionManager accessDecisionManager;// 4. SecurityFilterChain - 安全过滤器链@Beanpublic SecurityFilterChain filterChain(HttpSecurity http) throws Exception {return http.addFilterBefore(customFilter(), UsernamePasswordAuthenticationFilter.class).build();}
}

2. 过滤器链机制

@Component
public class SecurityFilterChainAnalyzer {/*** Spring Security默认过滤器链顺序*/public void analyzeFilterChain() {List<String> filterOrder = Arrays.asList("SecurityContextPersistenceFilter",     // 安全上下文持久化"LogoutFilter",                         // 登出处理"UsernamePasswordAuthenticationFilter", // 用户名密码认证"DefaultLoginPageGeneratingFilter",     // 默认登录页生成"BasicAuthenticationFilter",            // Basic认证"RequestCacheAwareFilter",             // 请求缓存"SecurityContextHolderAwareRequestFilter", // 安全上下文请求包装"AnonymousAuthenticationFilter",        // 匿名认证"SessionManagementFilter",             // 会话管理"ExceptionTranslationFilter",          // 异常转换"FilterSecurityInterceptor"            // 权限校验);filterOrder.forEach(filter -> System.out.println("Filter: " + filter));}
}

3. 自定义过滤器

@Component
public class JwtAuthenticationFilter extends OncePerRequestFilter {@Autowiredprivate JwtTokenProvider tokenProvider;@Overrideprotected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {String token = extractToken(request);if (token != null && tokenProvider.validateToken(token)) {// 1. 验证TokenString username = tokenProvider.getUsernameFromToken(token);// 2. 创建认证对象UserDetails userDetails = userDetailsService.loadUserByUsername(username);UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());// 3. 设置认证信息到安全上下文SecurityContextHolder.getContext().setAuthentication(authentication);}filterChain.doFilter(request, response);}private String extractToken(HttpServletRequest request) {String bearerToken = request.getHeader("Authorization");if (StringUtils.hasText(bearerToken) && bearerToken.startsWith("Bearer ")) {return bearerToken.substring(7);}return null;}
}

认证机制详解

1. 内存认证

@Configuration
public class InMemoryAuthConfig {@Beanpublic UserDetailsService userDetailsService() {UserDetails admin = User.builder().username("admin").password(passwordEncoder().encode("admin123")).roles("ADMIN", "USER").build();UserDetails user = User.builder().username("user").password(passwordEncoder().encode("user123")).roles("USER").build();return new InMemoryUserDetailsManager(admin, user);}@Beanpublic PasswordEncoder passwordEncoder() {return new BCryptPasswordEncoder();}
}

2. 数据库认证

@Service
public class CustomUserDetailsService implements UserDetailsService {@Autowiredprivate UserRepository userRepository;@Override@Transactional(readOnly = true)public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {User user = userRepository.findByUsername(username).orElseThrow(() -> new UsernameNotFoundException("用户不存在: " + username));return UserPrincipal.create(user);}
}@Entity
@Table(name = "users")
public class User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;@Column(unique = true)private String username;private String password;private String email;private Boolean enabled = true;private Boolean accountNonExpired = true;private Boolean accountNonLocked = true;private Boolean credentialsNonExpired = true;@ManyToMany(fetch = FetchType.EAGER)@JoinTable(name = "user_roles",joinColumns = @JoinColumn(name = "user_id"),inverseJoinColumns = @JoinColumn(name = "role_id"))private Set<Role> roles = new HashSet<>();// getters and setters
}public class UserPrincipal implements UserDetails {private Long id;private String username;private String password;private String email;private Collection<? extends GrantedAuthority> authorities;public static UserPrincipal create(User user) {List<GrantedAuthority> authorities = user.getRoles().stream().map(role -> new SimpleGrantedAuthority("ROLE_" + role.getName())).collect(Collectors.toList());return new UserPrincipal(user.getId(),user.getUsername(),user.getPassword(),user.getEmail(),authorities);}@Overridepublic Collection<? extends GrantedAuthority> getAuthorities() {return authorities;}@Overridepublic boolean isAccountNonExpired() {return true;}@Override
http://www.dtcms.com/a/572201.html

相关文章:

  • 做网站最基本阿里云网站域名绑定
  • 临汾市住房城乡建设局网站中国未来巨型空间站
  • 中山市企业网站seo营销工具wordpress打开页面很慢
  • 网站开发设计素材怎么搜索网站
  • 家里电脑做网站服务器如何策划手机网站
  • 网站建设方案数建筑人才网证书
  • 企业创建网站的途径湖州网站推广
  • 个人网站发布怎么做谷歌paypal官网入口
  • 临桂建设局网站营销网站的关键字
  • 教育类网站源码软件工程专业是干什么的
  • 哈尔滨市呼兰区住房城乡建设局网站服务器网站80端口打不开
  • 网站的相关链接怎么做外贸免费网站建设
  • wordpress头像网站辽宁省建设工程质量监督总站网站
  • 贵港网站推广课程培训网站建设
  • 正能量网站推荐渠道网络是什么意思
  • 瓦房店 网站建设网上商城开发
  • 做外贸自己公司的网站一定要吗凌云网站
  • 公司制作网站费用怎么做分录学校网站建设整改报告
  • 本地赣州网站建设网站开发模块学些什么
  • 市网站制作扬中网站哪家做的好
  • 像素时代网站建设手机站设计丹麦网站后缀
  • 微信公众号免费模板网站wordpress 小工具插件下载地址
  • 基于C 的网站开发源码软文公司代写
  • 校园二级网站建设评比自评做网站需要准备什么资料
  • 梦织做网站中国纪检监察报邮发代号
  • 建设社区服务网站的论文网站推广的途径和方法
  • 东莞南海网站制作微网站缺点
  • 江阴网络推广公司seo牛人
  • 信息技术网站建设专业网站搭建实训总结
  • 中小型企业网站的设计与开发温州网吧什么时候恢复营业