SpringSecurity详解

编程

要使用Spring Security,首先当然是得要加上依赖

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-security</artifactId>

</dependency>

这个时候我们不在配置文件中做任何配置,随便写一个Controller

@RestController

public class TestController {

@GetMapping("/hello")

public String request() {

return "hello";

}

}

启动项目,我们会发现有这么一段日志

2020-01-05 01:57:16.482  INFO 3932 --- [           main] .s.s.UserDetailsServiceAutoConfiguration :

Using generated security password: 1f0b4e14-1d4c-4dc8-ac32-6d84524a57dc

此时表示Security生效,默认对项目进行了保护,我们访问该Controller中的接口,会见到如下登录界面

这里面的用户名和密码是什么呢?此时我们需要输入用户名:user,密码则为之前日志中的"1f0b4e14-1d4c-4dc8-ac32-6d84524a57dc",输入之后,我们可以看到此时可以正常访问该接口

在老版本的Springboot中(比如说Springboot 1.x版本中),可以通过如下方式来关闭Spring Security的生效,但是现在Springboot 2中已经不再支持

security:

basic:

enabled: false

当然像这种什么都不配置的情况下,其实是使用的表单认证,现在我们可以把认证方式改成HttpBasic认证(关于HTTP的几种认证方式可以参考HTTP协议整理 中的HTTP的常见认证方式)。

此时我们需要在项目中加入这样一个配置类

/**

* WebSecurityConfigurerAdapter是Spring提供的对安全配置的适配器

* 使用@EnableWebSecurity来开启Web安全

*/

@Configuration

@EnableWebSecurity

public class SecrityConfig extends WebSecurityConfigurerAdapter {

/**

* 重写configure方法来满足我们自己的需求

* 此处允许Basic登录

* @param http

* @throws Exception

*/

@Override

protected void configure(HttpSecurity http) throws Exception {

http.httpBasic() //允许Basic登录

.and()

.authorizeRequests() //对请求进行授权

.anyRequest() //任何请求

.authenticated(); //都需要身份认证

}

}

此时重启项目,在访问/hello,界面如下

输入用户名,密码(方法与之前相同),则可以正常访问该接口。当然在这里,我们也可以改回允许表单登录。

@Override

protected void configure(HttpSecurity http) throws Exception {

http.formLogin() //允许表单登录

.and()

.authorizeRequests() //对请求进行授权

.anyRequest() //任何请求

.authenticated(); //都需要身份认证

}

这样又变回跟之前默认不配置一样了。

SpringSecutiry基本原理

由上图我们可以看到,Spring Security其实就是一个过滤器链,它里面有很多很多的过滤器,就图上的第一个过滤器UsernamePasswordAuthenticationFilter是用来做表单认证过滤的;如果我们没有配置表单认证,而是Basic认证,则第二个过滤器BasicAuthenticationFilter会发挥作用。最后一个FilterSecurityInterceptor则是用来最后一个过滤器,它的作用是用来根据前面的过滤器是否生效以及生效的结果来判断你的请求是否可以访问REST接口。如果无法通过FilterSecurityInterceptor的判断的情况下,会抛出异常。而ExceptionTranslationFIlter会捕获抛出的异常来进行相应的处理。

 

 

 

以上是 SpringSecurity详解 的全部内容, 来源链接: utcz.com/z/512356.html

回到顶部