Spring Security

1.关于Spring Security

Spring Security主要解决了认证和授权相关的问题

认证:验证用户提交的登录信息,判断是否可以通过。

授权:当认证通过以后,给予通过认证的用户一些信息,后续,将根据这些信息来判断用户是否允许执行某些访问

2.添加依赖

在Spring Boot项目,当需要使用Spring Security时,需要添加spring-boot-starter-security依赖:

<!-- Spring Boot Security,用于处理认证与授权 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

3.Spring Security的基本特点

点添加以上以来项后,再次启动项目,Spring Security会执行自动配置,使得:

此主机上所有的请求都必须登录才可以访问,并提供了登录页面,包括根本不存在的URL

  •  此特点是由继承自 WebSecurityConfigurerAdapter类中的protected void configure(HttpSecurity http)方法决定的
  • 此配置中的方法http.formLogin()将决定是否开启登录表单
  • 默认的用户名是uesr,默认的密码是启动日志中,每次都会发生变化
  • Using generated security password: 92062850-fb3d-4b86-be10-209ac26c143e
  •  当登录成功后,会自动跳转到此前尝试访问的URL
  • Spring Security默认使用Session保存用户的登录信息
    • 例如,当关闭浏览器后,再次访问,需要重新登录
  • 通过 http://localhost:9081/logout 退出登录
  • 自带BCryptPasswordEncoder,可以用于使用BCrypt算法对密码进行加密处理
  • 如果项目运行时Spring容器中有密码编译器(PasswordEncoder),Spring Security框架会自动使用它
  • Spring Security默认开启了”禁止跨越的异步请求“,避免”伪造的跨域攻击“

4.关于Bcrypt算法

Bcrypt算法是一种基于哈希算法的算法,所以,这种算法也是不可逆的!

通过Bcrypt算法经行编码后的结果,长度固定为60字符。

使用同一个原文进行反复编码,每次得到的结果都是不同的,因为在编码过程中,BCrypt使用了随机的盐,并且,使用的盐也作为编码结果的一部分保存了下来。

在开发实现中,通常,可以使用配置类中的@Bean方法来创建BCryptPasswordEncoder对象,此对象将是由Spring进行管理的,当需要使用是,自动装配即可,例如

@Slf4j
@Configuration
public class SecurityConfiguration {

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

}
@Slf4j
@Service
public class AdminServiceImpl implements IAdminService {

    @Autowired
    private PasswordEncoder passwordEncoder;
    
}

5.关于401和403的HTTP响应码

在HTTP协议中,401表示未认证的,通常是没有登录成功的,403是表示未授权的,通常是已经登录的,但是不具备相关的操作协议

在Spring Security中,许多禁止的场合都会使用403,并不完全符合HTTP协议的规范

6.关于伪造跨域攻击

在多选项卡的浏览器中,如果第一个选项卡中登录了某个平台,在同一个窗口中打开其他选项卡,访问同一平台,都会被平台识别,视为”已经通过认证"。

所谓的伪造跨域攻击,就是利用以上特性,在网页源代码中隐藏一些恶意访问的、会自动提交的请求URL(例如使用隐藏的<img>标签的src属性),例如,当用户在第1个选项卡登录了某银行系统,打开的第2个选项卡是有恶意代码的平台,第2个选项卡的网页发出“转账”的请求,会被银行系统视为“已通过认证的”。

  • 提示:以上只是举例,事实上,现在防止这种做法的技术已经非常成熟,不会出现此问题,并且,银行转账通常都需要再次输出密码,而不会收到请求就直接转账

在使用Spring Security时,应该自定义配置类,继承自WebSecurityConfigurerAdpater,并重写void configure(HttpSecurity http)方法,在其中调用http.csrf()方法。

----------------------------------------------------------------续--------------------------------------------------------------

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牛老师来巡山~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值