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

大白话解释安全框架Spring Security是什么 有什么用 怎么用

Spring Security是什么?

Spring Security就像你公司的“门禁系统”,专门管两件事——
你是谁(认证):每个员工进公司都要刷卡或刷脸,确认身份合法才能进。
你能去哪(授权):普通员工只能进办公区,领导能进财务室,保洁阿姨能进仓库——不同权限的人能去的地方不一样。
**技术解释:它是Spring官方推出的安全框架,前身叫Acegi Security,专门解决Java程序的身份验证(登录)、权限控制(谁能访问什么)、防攻击(防黑客)**等问题,相当于给程序加了一套“防盗门”。

二、Spring Security有什么用?

核心功能

**登录认证:**支持用户名密码、指纹、扫码、第三方登录(微信/钉钉)等方式,比如用户输错密码3次就锁账号。
**权限管理:**控制不同用户能访问的页面或功能,比如普通用户只能看商品,管理员能删改商品 。
**防攻击:**自动防CSRF(伪造请求)、XSS(脚本攻击)、暴力破解等,像门禁系统能识别假门卡。

实际场景

电商:用户登录后只能看自己的订单,管理员能看所有订单。
银行系统:操作转账必须二次验证(短信验证码)。
企业内部系统:不同部门员工只能访问自己部门的文件。

Spring Security怎么用?三步走:装门禁→定规则→发门卡

安装(装门禁)

添加依赖(类似买门禁设备):
在项目的pom.xml里加一行代码,引入Spring Security包:

<dependency>  
  <groupId>org.springframework.boot</groupId>  
  <artifactId>spring-boot-starter-security</artifactId>  
</dependency>  

加完依赖后,所有接口默认需要登录才能访问,账号是user,密码在控制台随机生成。

配置规则(定权限)

创建配置类(定门禁规则)

@Configuration  
@EnableWebSecurity  
public class SecurityConfig extends WebSecurityConfigurerAdapter {  
  @Override  
  protected void configure(HttpSecurity http) throws Exception {  
    http  
      .authorizeRequests()  
        .antMatchers("/home").permitAll()      // 首页所有人能看  
        .antMatchers("/admin/**").hasRole("ADMIN")  // 管理员才能进后台  
        .anyRequest().authenticated()          // 其他页面需登录  
      .and()  
      .formLogin()                             // 开启登录页  
        .loginPage("/login")                   // 自定义登录页地址  
        .defaultSuccessUrl("/dashboard")       // 登录后跳转  
      .and()  
      .logout().permitAll();                   // 允许退出登录  
  }  
}  

这段代码相当于规定:谁都能进/home页面;
只有管理员能进/admin开头的页面;
其他页面必须登录才能看 。

发门卡(用户权限)

内存用户(临时测试用):

@Override  
protected void configure(AuthenticationManagerBuilder auth) throws Exception {  
  auth.inMemoryAuthentication()  
    .withUser("张三").password("{noop}123").roles("USER")  
    .and()  
    .withUser("李四").password("{noop}admin").roles("ADMIN");  
}  

这段代码创建两个用户:张三(密码123,普通用户);李四(密码admin,管理员)。
数据库用户(正式用):
实现UserDetailsService接口,从数据库查用户信息,比如:

@Service  
public class MyUserService implements UserDetailsService {  
  @Autowired  
  private UserRepository userRepo;  // 假设用户存在数据库里  

  @Override  
  public UserDetails loadUserByUsername(String username) {  
    User user = userRepo.findByUsername(username);  
    return new org.springframework.security.core.userdetails.User(  
      user.getUsername(),   
      user.getPassword(),   
      user.getRoles()  // 角色列表(如ROLE_ADMIN)  
    );  
  }  
}  

注意事项

**别关CSRF防护:**默认开启的CSRF防护能防伪造请求攻击,除非你明确知道自己在做什么。
**密码必须加密:**别用明文存密码,推荐用BCryptPasswordEncoder加密(比如{bcrypt}$2a 10 10 10…)。
**权限分配最小化:**普通用户尽量少给权限,避免被黑客利用后造成更大损失。
适用场景:所有需要登录和权限控制的系统,比如电商、银行、OA系统。

相关文章:

  • Windows Qt开发到底选MSVC编译还是MinGW编译?
  • 小红书湖仓架构的跃迁之路
  • 004-利用Docker安装Mysql
  • Python数据类型与运算全攻略:零基础掌握类型转换与核心操作
  • WordPress多语言插件GTranslate
  • Windows 11 部署 GPUStack 运行 DeepSeek
  • 基于 MetaGPT 自部署一个类似 MGX 的多智能体协作框架
  • 版图自动化连接算法开发 00001 ------ 直接连接两个给定的坐标点
  • AI大模型-提示工程学习笔记21-图提示 (Graph Prompting)
  • 清华—北大DeepSeek教学资料合集—从入门到精通【免费下载】
  • 【2023——二项式反演】
  • 什么是多线程?线程池?
  • 基于vue3和spring boot实现大文件上传
  • 2025年2月21日优雅草内测分发站全新升级-测试运营-优雅草内测分发站新用户提供免费100下载点-2月28日正式运营并且提供私有化部署版本
  • GPT大语言模型与搜索引擎:技术本质与应用场景的深度解析
  • 第十四届蓝桥杯大赛软件赛国赛C/C++大学C组
  • Nodejs-逐行读取文件【简易版】
  • 金融赋能绍兴纺织 民生银行助力外贸中小微企业“走出去”
  • 算法题(81):询问学号
  • 服务器禁止操作汇总(Server Prohibits 0peration Summary)
  • 即刻搜索网站提交入口/临沂色度广告有限公司
  • 中国外协加工网最新订单/自动优化app
  • 苏州怎么政府网站建设/怎么做网络广告
  • 网站做的和别人一样违法/济南seo排名优化推广
  • 萧山做网站/百度扫一扫
  • 高端网络尊享服务/网站内容优化关键词布局