大年初二学习SpringBoot之权限管理

1 增加spring-security依赖

目前市面上主流的权限框架是:spring-security和shiro,shrio使用起来更简单,而spring-security的功能更强大。

苏三商城项目选择的权限框架是:spring-security。

首先要加入spring-security的相关依赖包。

在项目中的pom.xml文件中增加如下依赖:

<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
</dependency>

刷新maven之后,重新启动项目。

访问之前的swagger地址:http://localhost:8011/swagger-ui/index.html,发现已经访问不了了,跳转到了一个登录页面: 

说明成功了。

2 开启全局方法权限控制

首先需要开启全局方法权限控制。

增加一个SpringSecurityConfig类:

@Configuration(proxyBeanMethods = false)
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
public class SpringSecurityConfig {
}

在上面增加@Configuration、@EnableWebSecurity和@EnableGlobalMethodSecurity三个注解。

3 使用@PreAuthorize注解

接下来,我们需要对接口做权限验证。

在spring-security中已经给我们封装了一个@PreAuthorize注解,我们只需要使用该注解就可以进行权限验证。

@PreAuthorize注解的value是Spring-EL表达式类型的字符串,它的值可以包含下面几种方法。

  • hasRole:含义为必须含有某角色(非ROLE_开头),如有多个的话,必须同时具有这些角色,才可访问对应资源。
  • hasAnyRole:含义为只具有某一角色(多个角色的话,具有任意一个即可),即可访问对应资源。
  • hasAuthority: 含义同 hasRole,不同点在于这是权限,而不是角色,区别就在于权限往往带有前缀(如默认的ROLE_),而角色只有标识。
  • hasAnyAuthority:含义同 hasAnyRole,不同点在于这是权限,而不是角色,区别就在于权限往往带有前缀(如默认的ROLE_),而角色只有标识。
  • permitAll:含义为允许所有人(可无任何权限)访问。
  • denyAll:含义为不允许任何(即使有最大权限)访问。
  • isAnonymous:含义为可匿名(不登录)访问。
  • isAuthenticated:含义为身份证认证后访问。
  • isRememberMe:含义为记住我用户操作访问。
  • isFullyAuthenticated:含义为非匿名且非记住我用户允许访问。

在用户查询接口上增加@PreAuthorize注解,使用hasRole方法:

/**
* 通过id查询用户信息
*
* @param id 系统ID
* @return 用户信息
*/
@PreAuthorize("hasRole('User')")
@ApiOperation(notes = "通过id查询用户信息", value = "通过id查询用户信息")
@GetMapping("/findById")
public UserEntity findById(Long id) {
return userService.findById(id);
}

其中设置的角色为User。

我们需要一个账号能够登录成功。

为了测试起来更加方便,我们需要增加一个用于做权限测试的账号。

在mall-mgt的application.yml配置文件中增加如下配置:

spring
security:
user:
name: admin
password: 123456
roles:
User

增加一个用户名是:admin,密码是:123456的账号,角色名是User。

然后重启项目。

 

posted @ 2024-02-11 22:12  元乙虹  阅读(174)  评论(0)    收藏  举报