【问题标题】:Disable Http-methods on Spring Security在 Spring Security 上禁用 Http 方法
【发布时间】:2016-07-31 18:50:18
【问题描述】:

我对 Spring 安全性有点陌生,需要帮助来禁用 http 方法,例如 OPTIONS、PUT 或 DELETE。

【问题讨论】:

    标签: spring-mvc spring-security


    【解决方案1】:

    Spring拦截器url提供了一个方法参数,缩小的地方是它只允许指定一个方法。
    您可以通过为同一模式指定几个拦截器 URL 项来克服这个问题

    <http auto-config="true" use-expressions="true" >
         <intercept-url pattern="/login " access="permitAll" />
    
        <intercept-url pattern="/**" access=" hasRole('ROLE_ADMIN')" method="GET" />
        <intercept-url pattern="/**" access=" hasRole('ROLE_ADMIN')" method="POST" />
    </http>
    

    另一种选择是编写自己的 spring-security-expression 例如isPermitedMethod 以下blog 可能会有所帮助。

    另请参阅:
    Using Spring Security, how can I use HTTP methods (e.g. GET, PUT, POST) to distingush security for particular URL patterns?

    【讨论】:

    • 如果 OP 想要禁用这些方法,使用 &lt;intercept-url pattern="/** " access="denyAll" /&gt; 就足够了
    【解决方案2】:

    为什么你没有一个只允许 GET 的控制器方法?任何其他 HTTP 方法都将被自动拒绝。

    @Controller
    @RequestMapping("/releaseupdates")
    public class ReleaseUpdateController {
    
       @RequestMapping(method=RequestMethod.GET)
       public String getRequest() {
          //do something, only accepts GET
       }
    
    
    }
    

    如果您想允许其他方法但只允许特定用户/角色,那么您可以通过类似的方式配置这些细粒度设置:https://www.mkyong.com/spring-security/spring-security-custom-login-form-annotation-example/

    【讨论】:

      猜你喜欢
      • 2014-03-08
      • 2016-05-10
      • 2018-08-26
      • 1970-01-01
      • 2017-07-11
      • 1970-01-01
      • 2015-05-01
      • 2016-07-21
      • 2016-05-16
      相关资源
      最近更新 更多