Spring Security 多过滤链的使用

一、背景

在我们实际的开发过程中,有些时候可能存在这么一些情况,某些api 比如: /api/** 这些是给App端使用的,数据的返回都是以JSON的格式返回,且这些API的认证方式都是使用的TOKEN进行认证。而除了 /api/** 这些API之外,都是给网页端使用的,需要使用表单认证,给前端返回的 都是某个页面。

二、需求

1、给客户端使用的api

1.拦截 /api/**所有的请求。2./api/**的所有请求都需要ROLE_ADMIN的角色。3.从请求头中获取 token,只要获取到token的值,就认为认证成功,并赋予ROLE_ADMIN到角色。4.如果没有权限,则给前端返回JSON对象 {message:"您无权限访问"}5.访问 /api/userInfo端点1.请求头携带 token 可以访问。2.请求头不携带token不可以访问。

2、给网站使用的api

1.拦截 所有的请求,但是不处理/api/**开头的请求。
2.所有的请求需要ROLE_ADMIN的权限。
3.没有权限,需要使用表单登录。
4.登录成功后,访问了无权限的请求,直接跳转到百度去。
5.构建2个内建的用户1.用户一: admin/admin 拥有 ROLE_ADMIN 角色2.用户二:dev/dev 拥有 ROLE_DEV 角色
6.访问 /index 端点1.admin 用户访问,可以访问。2.dev 用户访问,不可以访问,权限不够。

三、实现方案

方案一:

直接拆成多个服务,其中 /api/** 的成为一个服务。非/api/**的拆成另外一个服务。各个服务使用自己的配置,互不影响。

方案二

在同一个服务中编写。不同的请求使用不同的SecurityFilterChain来实现。

经过考虑,此处采用方案二来实现,因为方案一简单,使用方案二实现,也可以记录下在同一个项目中 通过使用多条过滤器链,因为并不是所有的时候,都是可以分成多个项目的。

扩展:

1、Spring Security SecurityFilterChain 的结构

2、控制 SecurityFilterChain 的执行顺序

使用 org.springframework.core.annotation.Order 注解。

3、查看是怎样选择那个 SecurityFilterChain

查看 org.springframework.web.filter.DelegatingFilterProxy#doFilter

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值