本系统安全框架使用的是 Spring Security + Jwt Token
, 访问后端接口需在请求头中携带token
进行访问,请求头格式如下:
用户登录 -> 后端验证登录返回 token
-> 前端带上token
请求后端数据 -> 后端返回数据, 数据交互流程如下:
Spring Security
提供了Spring EL
表达式,允许我们在定义接口访问的方法上面添加注解,来控制访问权限,常用的 EL
如下
@Log(description = "修改菜单")
@PutMapping(value = "/menus")
public ResponseEntity update(@Validated @RequestBody Menu resources){
// 略
}
由于每个接口都需要给超级管理员放行,而使用 hasAnyRole('admin','user:list')
每次都需要重复的添加 admin 权限,因此在新版本 (2.3) 中加入了自定义权限验证方式,在验证的时候默认给拥有admin权限的用户放行。
源码:
使用方式:
@PreAuthorize("@el.check('user:list','user:add')")
在我们使用的时候,有写接口是不需要验证权限,这个时候就需要我们给接口放行,使用方式如下
1、使用注解方式
2、修改配置文件方式
eladmin-system -> modules -> security -> config -> SecurityConfig
TIP
使用 permitAll()
方法所有人都能访问,包括带上 token
访问
使用 所有人都能访问,但是带上 token
访问后会报错
// 关键代码,部分略
protected void configure(HttpSecurity httpSecurity) throws Exception {
// 支付宝回调
.antMatchers("/api/aliPay/return").anonymous()
// 所有请求都需要认证
.anyRequest().authenticated();
httpSecurity
.addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class);