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

上海制作网站多少钱深圳市住房和建设局地址

上海制作网站多少钱,深圳市住房和建设局地址,北京建设教育协会官方网站,wordpress 关注功能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/wzjs/565554.html

相关文章:

  • ssh jsp做网站域名备案的网站名称
  • 旅游网站建设规模iis网站目录权限设置
  • 济南专业网站设计网站建设资讯站
  • 域名访问网站的知识网站建设的评价
  • 宜昌网站网站建设快三网站开发
  • 官方网站建立大连建设工程项目管理信息网
  • CP网站开发制作H5个人介绍网页
  • 天长做网站公司全球做的比较好的网站
  • 做视频直播网站需要多少资金wordpress framework
  • 建设彩票网站合法吗免费推广的软件
  • h5网站设计方案唐山网站主页制作
  • 成都网站建设详细内容什么是网站外部链接
  • 石家庄响应式模板建站服务器做网站需安装哪些软件
  • 网站建设公司的流程免费学校网站系统
  • 建设银行网站机构特点业务发展固始网站建设公司
  • 济宁网站建设济宁ui设计工作流程
  • 山西省网站建设哪家好网站开发时如何设计英文版本
  • 网站开发好要租服务器吗福州公交集团网站建设
  • 苏州网站优化佛山市建设官方网站
  • 专业网站设计联系方式企业网站数防泄露怎么做
  • 做PPT素材用到的网站大学生创新创业大赛的意义
  • 网页设计怎么建站点网站持有者和备案企业
  • 自己做网站能赚钱吗2018备案时候网站不能打开吗
  • 长兴县住房建设局网站WordPress怎么去掉主题也没
  • 福建省文明建设办公室网站设计商业网站应该做到什么
  • jsp做网站框架ui网页设计师
  • 合肥网站建设q479185700強看空间
  • 便利的广州微网站建设如何创建网站步骤
  • 十大电子商务网站网址安全检测
  • 赣州市建设考勤在哪个网站建设行业网站大概需要都少钱