五分钟带你玩转SpringSecurity(五)如何优雅的接口鉴权是个难题

简介: 五分钟带你玩转SpringSecurity(五)如何优雅的接口鉴权是个难题


鉴权:及判断用户是否有访问接口的权利

Spring security提供了两种配置鉴权方式

1 在配置文件中配置

在SpringSecurityConfig中的 protected void configure(HttpSecurity http)方法中添加

sys:user就是菜单表中的code字段

@Override
    protected void configure(HttpSecurity http) throws Exception {
        //调用验证码过滤器 下文会详细介绍
        http.addFilterBefore(imageCodeValidateFilter, UsernamePasswordAuthenticationFilter.class)
                .formLogin() // 表单登录方式
                .loginPage("/login/page") //登录页的页面地址
                .loginProcessingUrl("/login/form") // 登录表单提交处理url, 默认是/login
                .usernameParameter("username") //默认的是 username
                .passwordParameter("password")  // 默认的是 password
                .successHandler(customAuthenticationSuccessHandler) //登录成功返回的json
                .failureHandler(customAuthenticationFailureHandler) //登录失败返回的json
                .and() //每个类型的配置 以.and()间隔 相当于;
                .authorizeRequests() // 授权请求
                .antMatchers("/login/page",
                        "/code/image","/mobile/page", "/code/mobile",
                        "/code/image",
                        "/code/mobile",
                        "/mobile/page"
                ).permitAll() // 放行/login/page不需要认证可访问 因为如果在调用验证接口时还需要权限 那么就没有入口了 所以一些不需要登录就能访问的接口在此配置
                // 此处是鉴权
                // 有 sys:user 权限的可以访问任意请求方式的/role
                .antMatchers("/user").hasAuthority("sys:user")
                // 有 sys:role 权限的可以访问 get方式的/role
                .antMatchers(HttpMethod.GET,"/role").hasAuthority("sys:role")
                .antMatchers(HttpMethod.GET, "/permission")
                // ADMIN 注意角色会在前面加上前缀 ROLE_ , 也就是完整的是 ROLE_ADMIN, ROLE_ROOT
                .access("hasAuthority('sys:premission') or hasAnyRole('ADMIN', 'ROOT')")
                // 此处是鉴权
    }

2 在方法中加入注解提供 比较细腻

@PreAuthorize("hasAuthority('sys:user')")
@GetMapping(value = {"/", ""}) // /user/  /user
public String user() {
    return HTML_PREFIX + "user-list";
}
/**
 * 跳转到新增或者修改页面
 * @return
 */
// 有 'sys:user:add' 或 'sys:user:edit'权限 的用户可以访问
@PreAuthorize("hasAnyAuthority('sys:user:add', 'sys:user:edit')")
@GetMapping(value={"/form"}) // /user/form
public String form() {
   return HTML_PREFIX + "user-form";
}
// 返回值的code等于200,则调用成功有权限 ,否则把403
@PostAuthorize("returnObject.code == 200")
@RequestMapping("/{id}")  // /user/{id}
@ResponseBody
public MengxueguResult deleteById(@PathVariable Long id) {
    if(id < 0) {
        return MengxueguResult.build(500, "id不能小于0", id);
    }
    return MengxueguResult.ok();
}
// 过滤请求参数:filterTarget 指定哪个参数,filterObject是集合中的每个元素,
// 如果value表达式为true的数据则不会被过滤,否则 就过滤掉
@PreFilter(filterTarget = "ids", value = "filterObject > 0")
@RequestMapping("/batch/{ids}") // /user/batch/-1,0,1,2
@ResponseBody
public MengxueguResult deleteByIds(@PathVariable List<Long> ids) {
    return MengxueguResult.ok(ids);
}
// 过滤返回值:filterObject是返回值集合中的每一个元素,当表达式为true则对应元素会返回
@PostFilter("filterObject != authentication.principal.username")
@RequestMapping("/list")
@ResponseBody
public List<String> page() {
    List<String> userList = Lists.newArrayList("meng", "xue", "gu");
    return userList;
}


相关文章
|
7月前
|
JSON 安全 Java
Spring Security 与 JWT、OAuth 2.0 整合详解:构建安全可靠的认证与授权机制
Spring Security 与 JWT、OAuth 2.0 整合详解:构建安全可靠的认证与授权机制
579 0
|
8月前
|
XML Cloud Native Dubbo
【Dubbo3高级特性】「提升系统安全性」手把手教你如何通过令牌进行Dubbo3服务验证及服务鉴权控制实战指南(一)
【Dubbo3高级特性】「提升系统安全性」手把手教你如何通过令牌进行Dubbo3服务验证及服务鉴权控制实战指南
364 1
|
8月前
|
XML Dubbo Java
【Dubbo3高级特性】「提升系统安全性」手把手教你如何通过令牌进行Dubbo3服务验证及服务鉴权控制实战指南(二)
【Dubbo3高级特性】「提升系统安全性」手把手教你如何通过令牌进行Dubbo3服务验证及服务鉴权控制实战指南
440 0
盘点认证框架 : SpringSecurity 基础篇
SpringSecurity 应该是最常见的认证框架了 , 处于Spring体系中使他能快速地上手 , 这一篇开始作为入门级开篇作 , 来浅浅地讲一下SpringSecurity 的整体结构.
|
移动开发 小程序 安全
Spring Security OAuth2 微服务认证中心自定义授权模式扩展以及常见登录认证场景下的应用实战(二)
Spring Security OAuth2 微服务认证中心自定义授权模式扩展以及常见登录认证场景下的应用实战(二)
Spring Security OAuth2 微服务认证中心自定义授权模式扩展以及常见登录认证场景下的应用实战(二)
|
安全 Cloud Native Java
Spring与OAuth2:实现第三方认证和授权的最佳实践
Spring与OAuth2:实现第三方认证和授权的最佳实践
223 0
|
安全 前端开发 小程序
Spring Security OAuth2 微服务认证中心自定义授权模式扩展以及常见登录认证场景下的应用实战(一)
Spring Security OAuth2 微服务认证中心自定义授权模式扩展以及常见登录认证场景下的应用实战(一)
|
安全 Java 微服务
十四.SpringCloud+Security+Oauth2实现微服务授权 - 网关统一鉴权
SpringCloud+Security+Oauth2实现微服务授权 - 网关统一鉴权
|
存储 Java 数据库
SpringSecurity基础-认证原理
SpringSecurity是基于Filter实现认证和授权,底层通过FilterChainProxy代理去调用各种Filter(Filter链),Filter通过调用AuthenticationManager完成认证 ,通过调用AccessDecisionManager完成授权,SpringSecurity中核心的过滤器链详细如下:
109 0
|
存储 Java 数据库
三.SpringSecurity基础-认证原理
SpringSecurity基础-认证原理