前言

Spring Security作为一款安全框架,和Shiro一样,核心功能也是认证和授权。而对于web端的认证和授权,其本质也是通过各种Filter过滤器进行实现。本篇博文简单记录一下Spring Security为我们提供了哪些功能,以及Spring Security的实现原理。因为我们对Shiro框架做了一系列讲解,所以Spring Security框架就不再展开过于细致的讲解。他们基本套路都是大同小异。

一、Spring Security基本功能及其周边

1.1 基本使用介绍

SpringBoot依赖SpringSecurity相关jar包后,就自动加上了拦截认证机制和登陆页面。不过登陆页面是shiro自带的。我们需要设置成自己的登陆页面。

SpringSecurity也有放行规则功能,需要在配置类中配置。有自定义认证逻辑开发。

需要注意的是,重新定义成功界面时,Spring Security发出的是一个post请求,并不能直接跳转到新的登陆页面上,需要配置成controller里的请求,在controller里,进行登陆页面的跳转。如果是前后端分离的项目,那么controller里就需要配置成重定向,跳转到站外系统的登陆页面上。

用户登录的参数,默认必须为username和password,以及remember-me,SpringSecurity才可识别,可以通过配置,修改参数的名称。这都是SpringSecurity类里规定好的。

常用注解:
@Secured:用于专门判断是否具有某个角色。参数要以ROLE_开头。
需要在启动类或者SpringSecurity配置类上开启注解:

@EnableGlobalMethodSecurity( securedEnabled = true)

@PreAuthorize/@PostAuthorize:
@PreAuthorize表示在方法执行之前判断权限,@PostAuthorize表示在方法执行之后判断权限,这个注解很少用。
在启动类或SpringSecurity配置类上开启注解:

@EnableGlobalMethodSecurity(prePostEnabled = true)

CSRF:
跨站请求伪造。通俗点儿讲就是:比如你之前在浏览器上登陆了京东,现在的浏览器里有京东相关的cookie且还没过期。当你访问一个恶意网站时,恶意网站里隐藏了一个请求,这个请求就是去调用京东的支付请求,且携带你浏览器的cookie。这样,你的钱就被划走了。大概就是这个意思。
SpringSecurity提供了csrf的保护机制,默认是开启的,不过,在基于token验证的基础上,就不需要session的事情了,所以,一般基于token进行验证,都把csrf保护机制关闭掉了。

二、Spring Security原理介绍

SpringSecurity的本质就是一个过滤器链,网上关于其原理的讲解很多,这里就不再展开详细讲解,需要对SpringSecurity扩展或内部修改时,再进行学习即可。