微服务认证与授权 Spring Cloud Security:核心过滤器之 FilterSecurityInterceptor

举报
chongz-z 发表于 2021/01/14 22:30:02 2021/01/14
【摘要】 对于一个服务系统,安全是必须需要考虑的方面。应用安全是一个不断追求更强的目标,全面性、全系统的方法很重要,因为开发者永远不知道入侵者是如何对系统进行攻击。在系统安全的实现上,一般倡导使用安全层layers of security,即多层次安全保证,通过连续层提供额外的安全性。每一层的安全性越强,应用程序的健壮性和安全性就越高。Java EE应用程序位于安全层的高层次,需要为它添加特定的问题域...

对于一个服务系统,安全是必须需要考虑的方面。应用安全是一个不断追求更强的目标,全面性、全系统的方法很重要,因为开发者永远不知道入侵者是如何对系统进行攻击。在系统安全的实现上,一般倡导使用安全层layers of security,即多层次安全保证,通过连续层提供额外的安全性。每一层的安全性越强,应用程序的健壮性和安全性就越高。Java EE应用程序位于安全层的高层次,需要为它添加特定的问题域安全配置。

我们在本文将会介绍下微服务认证与授权 Spring Cloud Security:核心过滤器和FilterSecurityInterceptor。

核心过滤器

在spring-security中有一部分核心过滤器,总是会被应用在web安全中,接下来我们将对这些核心过滤器的相关实现进行介绍, 分别被有:

  • FilterSecurityInterceptor鉴权拦截器
  • ExceptionTranslationFilter异常处理转化过滤器
  • SecurityContextPersistenceFilter上下文持久化过滤器
  • UsernamePasswordAuthenticationFilter用户名密码过滤器



FilterSecurityInterceptor

FilterSecurityInterceptor负责了控制了HTTP资源的访问安全,对访问进行鉴权处理。我们可以通过配置SecurityMetadataSource来决定对资源访问的所需要的权限啊约束,对SecurityMetadataSource主要配置是对某个资源的路径需要的List<ConfigAttribute>权限规则列表。

DefaultFilterInvocationSecurityMetadataSource中获取请求的权限规则的方法如下:

public Collection<ConfigAttribute> getAttributes(Object object) {
 final HttpServletRequest request = ((FilterInvocation) object).getRequest();
 for (Map.Entry<RequestMatcher, Collection<ConfigAttribute>> entry : requestMap
   .entrySet()) {
  if (entry.getKey().matches(request)) {
   return entry.getValue();
  }
 }
 return null;
}

根据请求的路径匹配出对应的Collection<ConfigAttribute>用于判断访问规则,进行鉴权操作。FilterSecurityInterceptor.setSecurityMetadataSource()方法接受的是FilterInvocationSecurityMetadataSource接口的实现,在自定义SecurityMetadataSource时要注意继承正确的接口并注入。

具体涉及到的`FilterSecurityInterceptor`中的过滤器操作流程,我们将会在后面的文章继续介绍。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。