SpringBoot2.0实战(16)整合SpringSecurity之最简登录方法鉴权

时间:2024-04-02 08:08:42

目标

整合 SpringSecurity 实现最简登陆鉴权及方法鉴权,大致理解 SpringSecurity 的功用。

操作步骤

添加依赖

 

 

编码

Controller 层

添加一个最简单的测试接口

SpringBoot2.0实战(16)整合SpringSecurity之最简登录方法鉴权

 

启动类

SpringBoot2.0实战(16)整合SpringSecurity之最简登录方法鉴权

 

可以看到,除了在 pom 文件加了一个 spring-boot-starter-security 依赖,其它跟创建最简 springBoot 应用没有区别。

最简初体验

最简体验就是什么都不做,直接体验,启动应用,查看日志,可以看到有一行比较特殊

SpringBoot2.0实战(16)整合SpringSecurity之最简登录方法鉴权

 

通过网页访问 http://localhost:8080/hello 地址,原本页面应该显示 hello world 字样,但实际有所偏差,页面被自动跳转至 http://localhost:8080/login,而且出现一个很丑的登录界面,这个不重要,重要的是我们的访问被阻止了,被 SpringSecurity 要求登录。

SpringSecurity 默认提供了一个用户名称叫 user,密码就是上面提到的日志里打印出来的,从格式看应该是一个 UUID。输入用户名密码进行登录,我们终于看到了 hello world,这就是 SpringSecurity 最简初体验。

配置用户名密码

配置用户名,密码,角色,配置过后,重启应用,日志中将不会再有生成密码那一行。

SpringBoot2.0实战(16)整合SpringSecurity之最简登录方法鉴权

添加方法权限验证

注册

在启动类上添加 @EnableGlobalMethodSecurity 注解,用于开启方法权限验证,该注解有三个参数

  • securedEnabled:开启 @Secured 注解

用法:

  1. 单个角色:@Secured(“ROLE_USER”)
  2. 多个角色任意一个:@Secured({“ROLE_USER”,“ROLE_ADMIN”})
  • prePostEnabled:开启 @PreAuthorize 及 @PostAuthorize 注解,分别适用于进入方法前后进行鉴权,支持表达式

用法:

  1. 允许所有访问:@PreAuthorize(“true”)
  2. 拒绝所有访问:@PreAuthorize(“false”)
  3. 单个角色:@PreAuthorize(“hasRole(‘ROLE_USER’)”)
  4. 多个角色与条件:@PreAuthorize(“hasRole(‘ROLE_USER’) AND hasRole(‘ROLE_ADMIN’)”)
  5. 多个角色或条件:@PreAuthorize(“hasRole(‘ROLE_USER’) OR hasRole(‘ROLE_ADMIN’)”)
  • jsr250Enabled:开启 JSR-250 相关注解

用法:

  1. 允许所有访问:@PermitAll
  2. 拒绝所有访问:@DenyAll
  3. 多个角色任意一个:@RolesAllowed({“ROLE_USER”, “ROLE_ADMIN”})

SpringBoot2.0实战(16)整合SpringSecurity之最简登录方法鉴权

 

验证

编写 Service 并为每个方法添加权限注解

SpringBoot2.0实战(16)整合SpringSecurity之最简登录方法鉴权

 

执行测试用例

SpringBoot2.0实战(16)整合SpringSecurity之最简登录方法鉴权

 

使用编码的方式进行配置

SpringSecurity 提供了一个 WebSecurityConfigurerAdapter 配置类,此类有三个重要的方法可供继承

  • configure(AuthenticationManagerBuilder auth)配置在内存中进行注册公开内存的身份验证
  • configure(WebSecurity web)配置拦截资源,例如过滤掉css/js/images等静态资源
  • configure(HttpSecurity http)定义需要拦截的URL

本例,我们重写 configure(AuthenticationManagerBuilder auth) 方法,在内存中添加两个用户。

使用了编码的方式进行配置后,在配置文件中配置的用户将失效。

SpringBoot2.0实战(16)整合SpringSecurity之最简登录方法鉴权

 

源码地址

本章源码 : https://github.com/caiyuanzi-song/boot.git

结束语

SpringSecurity 与 Shiro 是两个最常用的权限框架,SpringSecurity 因为是 Spring 全家桶中的一员,所以在与 Spring 的集成方面会更好一点。