SpringSecurity

Spring安全管理框架

引入依赖

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

基本原理

SpringSecurity本质是一个过滤器链

FilerSecurityInterceptor:是一个方法级的权限过滤器,基本位于过滤器的最底部

ExceptionTranslationFilter:异常过滤器,用来处理在认证授权过程 中抛出的异常

UsernamePasswordAuthenticationFilter:对/login的POST请求做拦截,校验表单中的用户名和密码

过滤器是如何加载的

基础接口

UserDetailService

查询数据库用户名和密码的接口

创建类继承UsernamePasswordAuthenticationFilter,重写三个方法

创建类实现UserDetailService,编写查询数据过程,发回User对象,这个User对象是安全框架提供对象

PasswordEncoder

数据加密接口,用于返回User对象里面的密码加密

设置用户名和密码

通过配置文件

配置文件设置

通过配置类

配置类设置

自定义编写实现类

自定义编写设置

权限控制

权限控制1

权限控制2

权限控制3

注解

@Secured

判断是否具有角色,字符串需要添加前缀ROLE_

使用之前需要在启动类上开启注解@EnableGlobalMethodSecurity(securedEnabled=true)

1
2
3
4
5
6
7
@GetMapping("/api/test")
// 有admin角色和root角色可以访问
@Secured({"ROLE_admin","ROLE_root"})
public ResponseResult<String> genCodeQr(HttpServletRequest request) {
// xxxxxx
return new ResponseResult<>("xxxxx")
}

@PreAuthorize

开启注解@EnableGlobalMethodSecurity(prePostEnabled=true)

该注解适合进入方法前的权限验证

1
2
3
4
5
6
7
@GetMapping("/api/test")
// 有有admins权限的可以访问
@PreAuthorize("hasAnyAuthority('admins')")
public ResponseResult<String> genCodeQr(HttpServletRequest request) {
// xxxxxx
return new ResponseResult<>("xxxxx")
}

相关文章

数据库连接池

Junit和Spring

Tomcat

Servlet

Request,Response和ServletContext

Cookie和Session

JSP和EL和Jstl

Filter和Listener

Mybatis

SpringCache