网站关键词堆砌,wordpress邮件服务,wordpress+存储视频,seo发包排名软件Spring Security是一项非常有用的技术。 它使您可以保护应用程序而不会过于侵入#xff0c;并允许插入许多不同的身份验证机制。 另一方面#xff0c;要使用它并不是那么容易#xff0c;并且每次接触它时我都必须重新学习这些工具之一。 在这篇文章中#xff0c;我将介绍Sp… Spring Security是一项非常有用的技术。 它使您可以保护应用程序而不会过于侵入并允许插入许多不同的身份验证机制。 另一方面要使用它并不是那么容易并且每次接触它时我都必须重新学习这些工具之一。 在这篇文章中我将介绍Spring安全性的一些基础知识以及如何使用它以不同的方式保护应用程序的不同部分。 Spring安全配置 让我们看一下Spring Security的一部分配置您可以在Github上找到完整的源代码 。 我正在使用Spring Boot但是对于所有Spring应用程序大多数部分应该是相同的。 Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { Override protected void configure(HttpSecurity http) throws Exception { http .httpBasic() .and() .authorizeRequests().antMatchers( /secret/** ).authenticated() .and() .authorizeRequests().antMatchers( /** ).permitAll(); } } 在最简单的情况下您只需使用Spring Security中常见的方法链接来配置HttpSecurity 。 在这种情况下我们启用HTTP基本身份验证并要求对一个端点进行身份验证 /secure/以下的所有内容。 允许所有其他请求以/**表示。 此处使用的模式是Ant路径语法但是您也可以使用不同的RequestMatcher来决定应用程序的哪些部分需要哪种身份验证。 Spring boot的所有功能都在过滤器链中实现。 上面对httpBasic()的调用实际上只是确保将相关过滤器添加到过滤器链中。 在这种情况下 BasicAuthenticationFilter将检查是否存在一个Authorization标头并对其进行评估。 如果找到一个它将在上下文中添加一个Authentication对象并执行其余的过滤器链。 在该链的末尾是FilterSecurityInterceptor 它检查所请求的资源是否需要身份验证以及所设置的资源是否符合所请求的角色。 您还可以通过配置WebSecurity将应用程序的某些部分从身份验证中WebSecurity 。 以下方法确保对/resources/所有请求都跳过上面的配置。 Override public void configure(WebSecurity web) throws Exception { web.ignoring().antMatchers( /resources/** ); } 在幕后这将添加一个附加的过滤器链该过滤器链针对配置的路径触发但不执行任何操作。 多个过滤链 有时可能需要对应用程序的不同部分使用不同的身份验证机制。 为此Spring Security允许您添加几个配置对象。 为此通常使用内部配置类这些内部配置类也可以共享封闭应用程序的某些部分。 下列类添加了两个不同的Spring Security过滤器链。 public class SecurityConfig { Configuration public static class ApiConfiguration extends WebSecurityConfigurerAdapter { Override protected void configure(HttpSecurity http) throws Exception { // doesnt really make sense to protect a REST API using form login but it is just for illustration http .formLogin() .and() .authorizeRequests().antMatchers( /secret/** ).authenticated() .and() .authorizeRequests().antMatchers( /** ).permitAll(); } Override public void configure(WebSecurity web) throws Exception { web.ignoring().antMatchers( /resources/** ); } } Order ( 1 ) Configuration public static class ActuatorConfiguration extends WebSecurityConfigurerAdapter { Override protected void configure(HttpSecurity http) throws Exception { http .antMatcher( /management/** ) .httpBasic() .and() .authorizeRequests().antMatchers( /management/** ).authenticated(); } Override public void configure(WebSecurity web) throws Exception { super .configure(web); } } } 这两个类都继承自适配器配置类并配置其HttpSecurity 。 这些类中的每一个都添加一个过滤器链并执行第一个匹配的链。 Order批注可用于影响过滤器链的顺序以确保首先执行正确的过滤器链。 也可能有必要将过滤器链限制为仅应用程序的特定部分以免其他部分触发该过滤器链。 ActuatorConfiguration被限制为仅将请求匹配到/management/ 。 请注意配置中有两个不同的地方可以接受RequestMatcher 。 开头的一个限制了触发过滤链的网址。 authorizeRequests()之后的请求用于定义哪些请求需要哪种身份验证。 请注意配置WebSecurity并不与HttpSecurity配置之一绑定因为它们添加了自己的过滤器链只是顺序可能有所不同。 如果在两种配置中都添加了模式它甚至可以在WebSecurity的同一实例上WebSecurity 。 最后一件事如果您使用的是自定义身份验证过滤器例如基于令牌的身份验证则可能需要注意不要将过滤器也注册为Servlet过滤器。 您可以通过配置一个返回FilterRegistrationBean的方法并接受Filter的实例来影响它。 只要创建一个新的FilterRegistrationBean为您的过滤器并设置enabled以false 。 翻译自: https://www.javacodegeeks.com/2017/08/spring-security-multiple-filter-chains.html