SpringSecurity(一)Featrue

今天开始系统学习Spring Security。主要基于Spring Security 5.4。
参考链接:https://docs.spring.io/spring-security/site/docs/current/reference/html5/#community

一、特点

Spring Security为身份验证(Authentication),授权(Authorization)和针对常见漏洞的防护提供了全面的支持。它还提供与其他库的集成,以简化其使用。

1.认证 Authentication

Spring Security为身份验证提供了全面的支持。身份验证是我们验证谁试图访问特定资源的身份的方法。验证用户身份的常用方法是要求用户输入用户名和密码。一旦执行了身份验证,我们就会知道身份并可以执行授权。

1.1 密码储存

Spring Security的PasswordEncoder界面用于对密码执行单向转换,以允许安全地存储密码。给出的PasswordEncoder是一种单向转换(明->密),它不适用于双向转换时使用。通常PasswordEncoder用于在认证时存储需要与用户提供的密码明文进行比较的密文。

DelegatingPasswordEncoder

DelegatingPasswordEncoder可根据密码前缀样式自适应的选用不同PasswordEncoder。

创建默认DelegatingPasswordEncoder:

PasswordEncoder passwordEncoder =
    PasswordEncoderFactories.createDelegatingPasswordEncoder();

自定义DelegatingPasswordEncoder:

String idForEncode = "bcrypt";
Map encoders = new HashMap<>();
encoders.put(idForEncode, new BCryptPasswordEncoder());
encoders.put("noop", NoOpPasswordEncoder.getInstance());
encoders.put("pbkdf2", new Pbkdf2PasswordEncoder());
encoders.put("scrypt", new SCryptPasswordEncoder());
encoders.put("sha256", new StandardPasswordEncoder());

PasswordEncoder passwordEncoder =
    new DelegatingPasswordEncoder(idForEncode, encoders);
密码存储格式

密码的一般格式为:

{id}encodedPassword

密码存储配置

Spring Security默认使用DelegatingPasswordEncoder。公开PasswordEncoder为Spring bean来对其进行自定义。

如果是从Spring Security 4.2.x迁移的,则可以通过公开NoOpPasswordEncoderbean恢复到以前的行为。

@Bean
public static NoOpPasswordEncoder passwordEncoder() {
    return NoOpPasswordEncoder.getInstance();
}

2.防止漏洞攻击

2.1 CSRF

何时使用CSRF保护

什么时候应该使用CSRF保护?我们的建议是对普通用户可能由浏览器处理的任何请求使用CSRF保护。如果仅创建非浏览器客户端使用的服务,则可能需要禁用CSRF保护。

2.2 默认HTTP响应头

Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000 ; includeSubDomains //https请求响应才有
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值