当前位置: 首页 > 知识库问答 >
问题:

重命名Spring csrf令牌变量

华振
2023-03-14

我的应用程序在另一个门户应用程序下运行。两者都是在Spring中实现的,并且都使用csrf安全性。

我需要的基本上是改变csrf令牌在会话中的命名方式,这样两个令牌都可以在没有冲突的情况下工作。到目前为止,我尝试的是创建另一个令牌存储库并尝试更改安全配置类中的参数名称和会话属性名称。

final HttpSessionCsrfTokenRepository tokenRepository = new HttpSessionCsrfTokenRepository();
tokenRepository.setHeaderName("TOOLBIZ-CSRF-TOKEN");
tokenRepository.setParameterName("toolbiz_csfr");
//tokenRepository.setSessionAttributeName("toolbiz_csrf");

当我发出请求时,Spring不太喜欢这个新设置,日志会生成以下行:

Invalid CSRF token found

我还应该做些什么?我错过什么了吗?

共有2个答案

姚嘉容
2023-03-14

请记住在重命名Header之前删除您拥有的任何旧cookie。我遇到了同样的问题,一切都设置得很好,但浏览器中的旧cookie导致过滤器功能基本上无用。

颛孙和颂
2023-03-14

这就是我的工作原理:-

@Configuration
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
public class OptosoftWebfrontSecurity extends WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests().antMatchers("/assets/**").permitAll()
            .anyRequest().authenticated().and().formLogin().and()
            .httpBasic().disable()
            .addFilterAfter(new CsrfHeaderFilter(), CsrfFilter.class)
            .csrf().csrfTokenRepository(csrfTokenRepository());
}

private CsrfTokenRepository csrfTokenRepository() {
    HttpSessionCsrfTokenRepository repository = new HttpSessionCsrfTokenRepository();
    repository.setHeaderName("X-XSRF-TOKEN");
    repository.setParameterName("_csrf");
    return repository;
}

}

和过滤器:-

public class CsrfHeaderFilter extends OncePerRequestFilter {
    @Override
    protected void doFilterInternal(HttpServletRequest request,
            HttpServletResponse response, FilterChain filterChain)
            throws ServletException, IOException {
        CsrfToken csrf = (CsrfToken) request.getAttribute(CsrfToken.class
                .getName());
        if (csrf != null) {
            Cookie cookie = WebUtils.getCookie(request, "XSRF-TOKEN");
            String token = csrf.getToken();
            if (cookie == null || token != null
                    && !token.equals(cookie.getValue())) {
                cookie = new Cookie("XSRF-TOKEN", token);
                cookie.setPath("/");
                response.addCookie(cookie);
            }
        }
        filterChain.doFilter(request, response);
    }
}

是否重写了WebSecurityConfigureAdapter#configure方法?

 类似资料:
  • 本文向大家介绍JavaScript 销毁时重命名变量,包括了JavaScript 销毁时重命名变量的使用技巧和注意事项,需要的朋友参考一下 示例 解构允许我们引用一个对象中的一个键,但是将其声明为具有不同名称的变量。该语法看起来像普通JavaScript对象的键值语法。            

  • rename-command 例如:rename-command FLUSHALL “”。必须重启。

  • 问题内容: 因此,我具有以下结构: 我运行了一个命令来调整它们的大小 现在我的目录看起来像这样 第一个问题是,我该如何重命名文件,以便仅拥有一个扩展名。不是两个。(基本上,我该如何清除最初的错误)? 第二个问题是,将来使用xargs,如何将模拟文件的扩展名更改为第二个命令? 问题答案: 我如何重命名文件,以便我只能拥有一个扩展名。 将来,使用xargs,如何将模拟文件的扩展名更改为第二个命令? 据

  • 当我尝试使用Shift或Refactor重命名变量时= 当我进一步研究这种行为时,我知道它只发生在公共变量中。请参阅下面的截图。我试图重命名平方变量(关键字)。下面建议了许多完全不相关的代码行来相应地重命名。 有人知道这里到底有什么问题吗?还有一个方便的解决办法? 谢谢你。