本系统安全框架使用的是 Spring Security + Jwt Token, 访问后端接口需在请求头中携带token进行访问,请求头格式如下:

    用户登录 -> 后端验证登录返回 token -> 前端带上token请求后端数据 -> 后端返回数据, 数据交互流程如下:

    权限控制 - 图2

    Spring Security 提供了Spring EL表达式,允许我们在定义接口访问的方法上面添加注解,来控制访问权限,常用的 EL如下

    1. @Log(description = "修改菜单")
    2. @PutMapping(value = "/menus")
    3. public ResponseEntity update(@Validated @RequestBody Menu resources){
    4. // 略
    5. }

    由于每个接口都需要给超级管理员放行,而使用 hasAnyRole('admin','user:list') 每次都需要重复的添加 admin 权限,因此在新版本 (2.3) 中加入了自定义权限验证方式,在验证的时候默认给拥有admin权限的用户放行。

    源码:

    使用方式:

    1. @PreAuthorize("@el.check('user:list','user:add')")

    在我们使用的时候,有写接口是不需要验证权限,这个时候就需要我们给接口放行,使用方式如下

    1、使用注解方式

    2、修改配置文件方式

    eladmin-system -> modules -> security -> config -> SecurityConfig

    TIP

    使用 permitAll() 方法所有人都能访问,包括带上 token 访问

    使用 所有人都能访问,但是带上 token 访问后会报错

    1. // 关键代码,部分略
    2. protected void configure(HttpSecurity httpSecurity) throws Exception {
    3. // 支付宝回调
    4. .antMatchers("/api/aliPay/return").anonymous()
    5. // 所有请求都需要认证
    6. .anyRequest().authenticated();
    7. httpSecurity
    8. .addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class);