Grails - Spring Security插件:启用CSRF过滤器

时间:2016-04-23 02:42:27

标签: grails spring-security

我知道Spring Security在版本3.2.0中添加了内置的CSRF保护,如下所述:http://docs.spring.io/spring-security/site/docs/3.2.0.CI-SNAPSHOT/reference/html/csrf.html

我正在使用带有Spring-security-core插件版本2.0.0的Grails 2.4.3,它似乎使用了Spring Security版本3.2.3,但CSRF保护未启用或不存在。

我想知道是否有办法在我缺少的插件中打开它。有没有办法使用此插件链接中提到的配置方法之一?任何帮助,将不胜感激!感谢。

我知道以后的版本默认启用此功能,但升级Grails版本对我来说不是一个选项,而更新版本的spring-security-core插件需要Grails 3。

2 个答案:

答案 0 :(得分:1)

据我所知,在任何版本的Grails spring安全插件中都没有默认的CSRF保护。 根据春季安全文档

  

1)您需要确定您的应用程序正在使用PATCH,POST,PUT和/或DELETE来修改状态

     

2)在所有PATCH,POST,PUT和DELETE方法中包含CSRF令牌

Grails可以为您生成并检查令牌,只需对所有表单子项使用// Simple method which encrypts all chars in a string String input = "Hel!lo"; String result = input.chars() // Need to convert into an IntStream .mapToObj(e -> Character.toUpperCase((char) e)) // Need to map to Object (!) and then cast to char .map(CryptoMath::encryptChar) // Calling the encryption .map(String::valueOf) // Need to cast to String again... .collect(joining("")); // Finally done System.out.println(result); 即可。检查here。然后你必须修改所有控制器。

否则你必须使用一些自定义解决方案,例如你可以创建一个服务来生成令牌,从gsp调用它:

<g:form useToken="true" ...>

创建一个过滤器,以验证来自每个PATCH,POST,PUT和DELETE请求的令牌

答案 1 :(得分:0)

您可以参考https://stackoverflow.com/a/38053797

我在grails 2.5.6上实现了这一点。希望这有帮助!