使用Spring Security,我如何使用HTTP方法(例如GET,PUT,POST)来确定特定URL模式的安全性?

Spring Security参考说明:

您可以使用多个元素为不同的URL集定义不同的访问要求,但它们将按列出的顺序进行评估,并将使用第一个匹配项。 所以你必须把最具体的比赛放在最上面。 您还可以添加方法属性以限制与特定HTTP方法(GET,POST,PUT等)的匹配。 如果请求与多个模式匹配,则无论排序如何,特定于方法的匹配都将优先。

如何配置Spring Security,以便根据用于访问URL模式的HTTP方法,以不同方式保护对特定URL模式的访问?

这只是关于配置。 它表示元素将在配置文件的标记中从上到下进行评估:

     

在上面的示例中,我们尝试仅允许经过身份validation的用户访问所有内容,当然除了登录页面(用户必须首先登录,对吗?!)。 但是根据文档, 这不会起作用 ,因为不太具体的匹配是最重要的。 因此,(一个)完成此示例的目标的正确配置是:

     

将更具体的匹配放在顶部。

引用的最后一件事是关于HTTP方法。 您可以使用它来指定匹配,因此:

     

在第二个示例中,要通过GET访问/client/edit ,用户只需要进行身份validation,但要通过POST访问/client/edit (比如提交编辑表单),用户需要具有EDITOR角色。 在某些地方可能不鼓励这种url模式,但这只是一个例子。

对于那些更喜欢基于Java注释的配置的人,请将此类放入您的应用程序中。

 @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests().antMatchers(HttpMethod.GET).permitAll(); http.authorizeRequests().antMatchers(HttpMethod.POST).denyAll(); http.authorizeRequests().antMatchers(HttpMethod.DELETE,"/you/can/alsoSpecifyAPath").denyAll(); http.authorizeRequests().antMatchers(HttpMethod.PATCH,"/path/is/Case/Insensitive").denyAll(); http.authorizeRequests().antMatchers(HttpMethod.PUT,"/and/can/haveWildcards/*").denyAll(); } } 

使用以下Maven依赖项(Spring-Security的早期版本也可以使用):

   org.springframework.security spring-security-web 5.0.0.M3   org.springframework.security spring-security-config 5.0.0.M3