gpt4 book ai didi

spring-security - spring security 3.2.0 csrf token 在 freemarker 模板中不起作用

转载 作者:行者123 更新时间:2023-12-01 13:54:02 28 4
gpt4 key购买 nike

升级到 Spring Security 3.2.0 并配置 xml 后,_csrf token 不起作用。

基础知识:

  • Spring 4.0.1
  • Spring 安全 3.2.0。
  • Freemarker 模板语言

  • 第一步——spring security xml配置:

    <!-- enable csrf protection via csrf-element -->
    <sec:http>
    <!-- -->
    <sec:csrf token-repository-ref="csrfTokenRepository" />
    </sec:http>

    <!-- rewrite headerName -->
    <bean id="csrfTokenRepository" class="org.springframework.security.web.csrf.HttpSessionCsrfTokenRepository">
    <property name="headerName" value="X-SECURITY" />
    </bean>

    第 2 步 - freemarker 模板:

    <form accept-charset="UTF-8" action="/portal" method="POST" name="formAddItemToCart">
    <!-- ... -->

    <!-- inlcude csrf token -->
    <input type="hidden"
    name="${_csrf.parameterName}"
    value="${_csrf.token}"/>
    </form>

    第 3 步 - 渲染输出:

    <form accept-charset="UTF-8" action="/portal" method="POST" name="formAddItemToCart">
    <!-- ... -->

    <input type="hidden" name="" value=""/>
    </form>

    第 4 步 - freemarker 模板错误:

    FreeMarker template error:
    The following has evaluated to null or missing:
    ==> _csrf [in template "cart.ftl" at line 28, column 21]

    引用:
    http://docs.spring.io/spring-security/site/docs/3.2.0.RELEASE/reference/htmlsingle/#csrf

    目前我正在调试整个应用程序。

    我不知道问题究竟出在哪里 - 但似乎 csrf 不适用于 freemarker。这通常可以在 freemarker 模板中包含 csrf token 吗?您有什么建议或解决方案吗?

    最佳答案

    更新:

    xml 配置不正确。
    我找到了这个对我有很大帮助的解决方案。
    https://github.com/spring-projects/spring-mvc-showcase/commit/361adc124c05a8187b84f25e8a57550bb7d9f8e4

    现在我的文件看起来像这样:

    安全文件

        <sec:http>
    <!-- ... -->
    <sec:csrf />
    </sec:http>

    <bean id="requestDataValueProcessor" class="org.springframework.security.web.servlet.support.csrf.CsrfRequestDataValueProcessor"/>

    <bean id="csrfFilter" class="org.springframework.security.web.csrf.CsrfFilter">
    <constructor-arg>
    <bean class="org.springframework.security.web.csrf.HttpSessionCsrfTokenRepository">
    <property name="headerName" value="X-SECURITY" />
    </bean>
    </constructor-arg>
    </bean>

    网页.xml

     <filter>
    <filter-name>csrfFilter</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    <async-supported>true</async-supported>
    </filter>

    <filter-mapping>
    <filter-name>csrfFilter</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>

    关于spring-security - spring security 3.2.0 csrf token 在 freemarker 模板中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21757222/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com