Spring Security-0-简介及简单使用

简介

Spring Security是一个强大的和高度可定制的身份验证和访问控制框架

Spring Security着重于为Java应用程序提供身份验证和授权。身份验证是为用户建立一个他所声明的主体的过程(主体一般式指用户,设备或可以在你系统中执行动作的其他系统)。授权指的是一个用户能否在你的应用中执行某个操作,在到达授权判断之前,身份的主体已经由身份验证过程建立了。这些概念是通用的,并不是Spring Security特有的。

在一个web服务中.如果没有身份认证的话,那就是只要知道接口地址就可以调用,在实际的项目中肯定是不可能的,都需要做用户的认证,也就是登录的操作,登录完成之后,再调用接口的时候,还需要判断这个用户有没有权限,如果这个用户没有权限的话,那也是不能调,使用Spring Security就可以实现对接口的认证和权限的一个控制

Spring Security主要实现了以下三件事:

  • 认证
  • 授权
  • 攻击防护,防止伪造身份

简单使用

首先,需要引入security的依赖,如下:

1
2
3
4
5
<!-- serurity -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>

引入依赖之后,项目就会自动加入一个身份的验证,我们请求项目中的一个接口,效果如下:
image

这里会提示输入用户名和密码,这时候我们是只引入了一个依赖,还什么都没有配置,所以就是默认的用户名和密码, 默认的用户名是:user, 然后默认的密码可以在我们项目的启动日志里面找到,如下:
image

这里登陆之后就可以访问接口了

那如果说我们引入security的依赖之后,并不想去让他做认证,可以在 application.yml 中关闭,代码如下:

1
2
3
security:
basic:
enabled: false

简单配置

在我们上面的例子中,请求如果没有登录的话,是在浏览器里面弹出个框,然后输入用户名和密码,实际的应用中,不可能用这种方式去登录的,一般是用一个登录的页面来进行登录的操作,下面来看做一下简单的配置,实现登录页登录

首先需要建一个类 BrowserSecurityConfig, 针对浏览器的一些配置,写在这个类里面,然后继承 WebSecurityConfigurerAdapter, spring提供的一个适配器, 然后重写里面的 configure(HttpSecurity http) 这个方法,具体代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Configuration
public class BrowserSecurityConfig extends WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
// formLogin 表示表单认证
http.formLogin()
.and()
// 授权请求. anyRequest 就表示所有的请求都需要权限认证
.authorizeRequests()
.anyRequest()
.authenticated();
}
}

配置完成之后,再来看一下效果,访问接口,效果如下:
image

这里就是一个默认的表单登录页面,还是和上面一样,输入用户名和密码就可以访问到接口了

本文用到的一些api,都传到了github上面,之后的文章到基于这个初始的项目 传送门

然后还有本文的这些代码也传了上去,传送门

然后之后文章中所对应的代码的分支名,都和文章标题的下标相同