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

Spring Security安全框架原理与实战

SpringSecurity安全框架原理与实战🔒

SpringSecurity是Spring生态中强大的安全框架,为Java应用提供认证(Authentication)和授权(Authorization)功能。本文将介绍其核心原理并通过代码示例展示实战应用!🚀

核心原理🧠

SpringSecurity基于过滤器链(FilterChain)工作,请求会经过一系列安全过滤器:
```java
SecurityFilterChain→UsernamePasswordAuthenticationFilter→BasicAuthenticationFilter→...
```

认证流程采用ProviderManager委托多个AuthenticationProvider进行验证:
```java
//伪代码示例
Authenticationauthenticate(Authenticationauth){
for(AuthenticationProviderprovider:providers){
if(provider.supports(auth.getClass())){
returnprovider.authenticate(auth);
}
}
thrownewAuthenticationException("Nosuitableproviderfound");
}
```

实战配置⚙️

基础安全配置示例:
```java
@Configuration
@EnableWebSecurity
publicclassSecurityConfigextendsWebSecurityConfigurerAdapter{

@Override
protectedvoidconfigure(HttpSecurityhttp)throwsException{
http
.authorizeRequests()
.antMatchers("/public/").permitAll()//公共资源
.antMatchers("/admin/").hasRole("ADMIN")//需要ADMIN角色
.anyRequest().authenticated()//其他请求需认证
.and()
.formLogin()//启用表单登录
.loginPage("/login")//自定义登录页
.defaultSuccessUrl("/home")//登录成功跳转
.and()
.logout()//登出配置
.logoutUrl("/logout")
.logoutSuccessUrl("/login?logout");
}

@Bean
publicPasswordEncoderpasswordEncoder(){
returnnewBCryptPasswordEncoder();//密码加密
}
}
```

自定义认证✨

实现自定义UserDetailsService:
```java
@Service
publicclassCustomUserDetailsServiceimplementsUserDetailsService{

@Autowired
privateUserRepositoryuserRepository;

@Override
publicUserDetailsloadUserByUsername(Stringusername){
Useruser=userRepository.findByUsername(username)
.orElseThrow(()->newUsernameNotFoundException("用户不存在"));

returnneworg.springframework.security.core.userdetails.User(
user.getUsername(),
user.getPassword(),
getAuthorities(user.getRoles())
);
}

privateCollectiongetAuthorities(Setroles){
returnroles.stream()
.map(role->newSimpleGrantedAuthority("ROLE_"+role.getName()))
.collect(Collectors.toList());
}
}
```

方法级安全🔐

使用注解保护方法:
```java
@PreAuthorize("hasRole('ADMIN')oruserId==authentication.principal.id")
publicUsergetUserById(LonguserId){
//只有ADMIN或用户自己可以访问
returnuserRepository.findById(userId).orElse(null);
}
```

SpringSecurity的强大之处在于其可扩展性,开发者可以根据需求定制各种安全策略!💪记住:安全无小事,合理配置是关键!🔑
http://www.dtcms.com/a/561289.html

相关文章:

  • 不用js可以做网站吗黄页88
  • 配置镜像仓库镜像(Registry Mirror)的指南
  • 25套科技商务风PPT模板合集,多场景适配专业演示(PPTX格式)
  • 网站内容收费专业网站定制报价
  • 跟der包学习java_day5「数组(Array)」
  • lerobot框架部署act模型
  • 用织梦搭建网站外贸网站建设报价
  • 【软考架构】案例分析-web应用设计:SSH 和 SSM(Spring + Spring MVC + MyBatis ) 之间的区别,以及使用场景
  • 天津做网站的公司怎么样东莞全网合一网站
  • ☆☆FPGA图像处理算法开发学习教程——总目录
  • Nestjs框架: 微服务项目工程结构优化与构建方案
  • 佛山建网站的公司泰安房地产信息网官网
  • 重庆—阿尔及利亚南通道铁海联运线路首发
  • 八股训练营第 4 天 | HTTP1.0 和 HTTP1.1 的区别?HTTP2.0 与 HTTP1.1 的区别?HTTP3.0 有了解过吗?
  • 全球搜和外贸快车哪个好厦门seo传播
  • 给传销产品做网站班级优化大师免费下载学生版
  • 工信部 网站备案材料 复印件 电子版哪个网站做外链视频好
  • UE5C++GameplayStatics源代码
  • 关键词解释:梯度下降法(Gradient Descent)
  • 做外贸的网站哪个好湖南人文科技学院
  • deadbeef播放器歌词插件
  • 网站推广有什么好处咨询公司招聘条件
  • 网站定位授权开启权限怎么做精准营销模式
  • Flutter 开发环境配置教程
  • Go Gorm 深度解析:从内部原理到实战避坑指南
  • 保定企业建网站房产网站运营方案
  • 机械动力的能力
  • 山西省旅游网站建设分析廊坊网站制作网站
  • 【YashanDB认证】之二:Docker部署一体YashanDB(YDC,YCM)
  • C语言刷题(一)