首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CSRF -首次登录

CSRF -首次登录
EN

Stack Overflow用户
提问于 2015-08-11 16:30:50
回答 1查看 1.5K关注 0票数 1

当我在服务器上部署我的应用程序时,我第一次登录时没有问题。但当我登出时,我会收到"403禁止“的注销邮件请求。然后我无法成功地登录,因为我在登录请求上得到了403错误。Ctrl+F5,想再登录一次.有效,但只有一次。

代码语言:javascript
复制
    @Override
    protected void configure(HttpSecurity http) throws Exception {
http
                .authorizeRequests()
                .antMatchers("/apps", "/sites", "/users").authenticated()
                .and()
                .csrf()
                .csrfTokenRepository(csrfTokenRepository())
                .and()
                .addFilterAfter(new CsrfHeaderFilter(), CsrfFilter.class);
}
private CsrfTokenRepository csrfTokenRepository() {
    HttpSessionCsrfTokenRepository repository = new HttpSessionCsrfTokenRepository();
    repository.setHeaderName("X-XSRF-TOKEN");
    return repository;
}

CsrfHeaderFilter类:

代码语言:javascript
复制
public class CsrfHeaderFilter extends OncePerRequestFilter {
    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
        CsrfToken token = (CsrfToken) request.getAttribute(CsrfToken.class
                .getName());
        response.setHeader("X-CSRF-HEADER", token.getHeaderName());

        response.setHeader("X-CSRF-PARAM", token.getParameterName());

        response.setHeader("X-XSRF-TOKEN", token.getToken());

        if (token != null) {
            Cookie cookie = WebUtils.getCookie(request, "X-XSRF-TOKEN");
            if (cookie == null || token != null && !token.equals(cookie.getValue())) {
                cookie = new Cookie("X-XSRF-TOKEN", token.getToken());
                cookie.setPath("/");
                response.addCookie(cookie);
            }
        }
        filterChain.doFilter(request, response);
    }

在角度上:

代码语言:javascript
复制
$httpProvider.defaults.xsrfHeaderName = 'X-XSRF-TOKEN';

我的应用程序部署在localhost:8080/myApp (如果重要的话)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-12 00:50:21

在某些事件(如loginlogout )之后,CSRF令牌会发生更改。因此,下一个POST请求将失败,就像您的情况一样。我也面临着同样的问题,经过一些诊断后,我发现在loginlogout等之后发送另一个GET请求将是解决这个问题的最佳方法。(如果不使用CORS,最好让loginlogout发送重定向响应)。有关更多详细信息,请参阅this stackoverflow post

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31947205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档