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。
然后重启项目。
标签:SpringBoot,spring,含义,访问,大年初二,security,权限,id From: https://www.cnblogs.com/cmx2012/p/18013573